Clownfish-CFC
view release on metacpan or search on metacpan
src/CFCTest.c view on Meta::CPAN
return (struct CFCParcel*)result;
}
struct CFCType*
CFCTest_parse_type(CFCTest *test, CFCParser *parser, const char *src) {
CFCBase *result = CFCParser_parse(parser, src);
OK(test, result != NULL, "parse '%s'", src);
STR_EQ(test, CFCBase_get_cfc_class(result),
"Clownfish::CFC::Model::Type", "result class of '%s'", src);
return (struct CFCType*)result;
}
struct CFCVariable*
CFCTest_parse_variable(CFCTest *test, CFCParser *parser, const char *src) {
CFCBase *result = CFCParser_parse(parser, src);
OK(test, result != NULL, "parse '%s'", src);
STR_EQ(test, CFCBase_get_cfc_class(result),
"Clownfish::CFC::Model::Variable", "result class of '%s'", src);
return (struct CFCVariable*)result;
}
struct CFCParamList*
CFCTest_parse_param_list(CFCTest *test, CFCParser *parser, const char *src) {
CFCBase *result = CFCParser_parse(parser, src);
OK(test, result != NULL, "parse '%s'", src);
STR_EQ(test, CFCBase_get_cfc_class(result),
"Clownfish::CFC::Model::ParamList", "result class of '%s'", src);
return (struct CFCParamList*)result;
}
struct CFCFunction*
CFCTest_parse_function(CFCTest *test, CFCParser *parser, const char *src) {
CFCBase *result = CFCParser_parse(parser, src);
OK(test, result != NULL, "parse '%s'", src);
STR_EQ(test, CFCBase_get_cfc_class(result),
"Clownfish::CFC::Model::Function", "result class of '%s'", src);
return (struct CFCFunction*)result;
}
struct CFCMethod*
CFCTest_parse_method(CFCTest *test, CFCParser *parser, const char *src) {
CFCBase *result = CFCParser_parse(parser, src);
OK(test, result != NULL, "parse '%s'", src);
STR_EQ(test, CFCBase_get_cfc_class(result),
"Clownfish::CFC::Model::Method", "result class of '%s'", src);
return (struct CFCMethod*)result;
}
struct CFCClass*
CFCTest_parse_class(CFCTest *test, CFCParser *parser, const char *src) {
CFCBase *result = CFCParser_parse(parser, src);
OK(test, result != NULL, "parse class");
STR_EQ(test, CFCBase_get_cfc_class(result),
"Clownfish::CFC::Model::Class", "result class");
return (struct CFCClass*)result;
}
time_t
CFCTest_get_file_mtime(const char *path) {
struct stat buf;
if (stat(path, &buf)) {
CFCUtil_die("Can't stat '%s': %s", path, strerror(errno));
}
return buf.st_mtime;
}
#if defined(CHY_HAS_WINDOWS_H)
#include <windows.h>
void
CFCTest_set_file_times(const char *path, time_t time) {
// Strawberry Perl may unpack the distribution's files as read-only.
DWORD attrs = GetFileAttributes(path);
if (attrs == INVALID_FILE_ATTRIBUTES) {
CFCUtil_die("Can't get file attrs of '%s': %u", path, GetLastError());
}
if (attrs & FILE_ATTRIBUTE_READONLY) {
attrs &= ~FILE_ATTRIBUTE_READONLY;
if (!SetFileAttributes(path, attrs)) {
CFCUtil_die("Can't make '%s' writable: %u", path,
GetLastError());
}
}
HANDLE handle = CreateFile(path, GENERIC_WRITE, FILE_SHARE_READ, NULL,
OPEN_EXISTING, 0, NULL);
if (handle == INVALID_HANDLE_VALUE) {
CFCUtil_die("Can't open '%s': %u", path, GetLastError());
}
uint64_t ticks = 10000000 * (UINT64_C(11644473600) + time);
FILETIME file_time;
file_time.dwLowDateTime = (DWORD)ticks;
file_time.dwHighDateTime = (DWORD)(ticks >> 32);
if (!SetFileTime(handle, &file_time, &file_time, &file_time)) {
CFCUtil_die("Can't set file time of '%s': %u", path, GetLastError());
}
CloseHandle(handle);
}
#elif defined(CHY_HAS_UTIME_H)
#include <utime.h>
void
CFCTest_set_file_times(const char *path, time_t time) {
struct utimbuf buf;
buf.actime = time;
buf.modtime = time;
if (utime(path, &buf)) {
CFCUtil_die("Can't set file time of '%s': %s", path, strerror(errno));
}
}
#else
#error Need either utime.h or windows.h
#endif
( run in 2.651 seconds using v1.01-cache-2.11-cpan-437f7b0c052 )