test: fix: test raise generic
This commit is contained in:
@@ -86,6 +86,9 @@
|
|||||||
pg-schema = pkgs.callPackage ./package/postgres/pg-schema/default.nix rust.commonArgs;
|
pg-schema = pkgs.callPackage ./package/postgres/pg-schema/default.nix rust.commonArgs;
|
||||||
pg-migration = pkgs.callPackage ./package/postgres/pg-migration/default.nix rust.commonArgs;
|
pg-migration = pkgs.callPackage ./package/postgres/pg-migration/default.nix rust.commonArgs;
|
||||||
libhectic = pkgs.callPackage ./package/c/libhectic/default.nix {};
|
libhectic = pkgs.callPackage ./package/c/libhectic/default.nix {};
|
||||||
|
hmpl = pkgs.callPackage ./package/c/hmpl/default.nix {
|
||||||
|
libhectic = self.packages.${system}.libhectic;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
devShells.${system} = let
|
devShells.${system} = let
|
||||||
|
|||||||
28
package/c/hmpl/default.nix
Normal file
28
package/c/hmpl/default.nix
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{ stdenv, gcc, lib, libhectic }:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
pname = "libhectic";
|
||||||
|
version = "1.0";
|
||||||
|
src = ./.;
|
||||||
|
doCheck = true;
|
||||||
|
|
||||||
|
buildInputs = [ libhectic ];
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
mkdir -p target
|
||||||
|
${gcc}/bin/cc -Wall -Wextra -g \
|
||||||
|
-pedantic -fsanitize=address -c hmpl.c \
|
||||||
|
-l:libhectic.a -o target/libhectic.o
|
||||||
|
'';
|
||||||
|
|
||||||
|
checkPhase = '' '';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/lib $out/include
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "libhectic";
|
||||||
|
license = lib.licenses.mit;
|
||||||
|
};
|
||||||
|
}
|
||||||
0
package/c/hmpl/hmpl.c
Normal file
0
package/c/hmpl/hmpl.c
Normal file
@@ -81,6 +81,8 @@ typedef enum {
|
|||||||
LOG_LEVEL_EXCEPTION
|
LOG_LEVEL_EXCEPTION
|
||||||
} LogLevel;
|
} LogLevel;
|
||||||
|
|
||||||
|
void logger_level_reset();
|
||||||
|
|
||||||
void logger_level(LogLevel level);
|
void logger_level(LogLevel level);
|
||||||
|
|
||||||
LogLevel log_level_from_string(const char *level_str);
|
LogLevel log_level_from_string(const char *level_str);
|
||||||
|
|||||||
@@ -4,46 +4,37 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "libhectic.h"
|
#include "libhectic.h"
|
||||||
|
|
||||||
// Reusable test function for any raise_* logging function.
|
#define TEST_RAISE_GENERIC(LOG_MACRO, LEVEL, LEVEL_STR) do { \
|
||||||
// The logging function must have the signature: char* func(const char* message)
|
FILE *orig_stderr = stderr; \
|
||||||
void test_raise_generic(const char* (*raise_func)(const char*), LogLevel log_level, const char* level_str) {
|
FILE *temp = tmpfile(); \
|
||||||
FILE *orig_stderr = stderr;
|
char result_buffer[256]; \
|
||||||
FILE *temp = tmpfile();
|
if (!temp) { perror("tmpfile"); exit(EXIT_FAILURE); } \
|
||||||
char result_buffer[256];
|
stderr = temp; \
|
||||||
|
logger_level(LEVEL); \
|
||||||
if (!temp) {
|
const char* time_str = LOG_MACRO("message"); \
|
||||||
perror("tmpfile");
|
logger_level_reset(); \
|
||||||
exit(EXIT_FAILURE);
|
fflush(stderr); \
|
||||||
}
|
fseek(temp, 0, SEEK_SET); \
|
||||||
stderr = temp;
|
size_t nread = fread(result_buffer, 1, sizeof(result_buffer)-1, temp); \
|
||||||
|
result_buffer[nread] = '\0'; \
|
||||||
logger_level(log_level);
|
stderr = orig_stderr; \
|
||||||
int line = __LINE__;
|
fclose(temp); \
|
||||||
char* time_str = raise_func("message");
|
char expected_buffer[256]; \
|
||||||
logger_level_reset();
|
sprintf(expected_buffer, "%s %d " LEVEL_STR ": message\n", time_str, __LINE__); \
|
||||||
|
printf("DEBUG: [%s] [%s]\n", result_buffer, expected_buffer); \
|
||||||
fflush(stderr);
|
assert(strcmp(result_buffer, expected_buffer) == 0); \
|
||||||
fseek(temp, 0, SEEK_SET);
|
} while(0)
|
||||||
size_t nread = fread(result_buffer, 1, sizeof(result_buffer) - 1, temp);
|
|
||||||
result_buffer[nread] = '\0';
|
|
||||||
|
|
||||||
stderr = orig_stderr;
|
|
||||||
fclose(temp);
|
|
||||||
|
|
||||||
char expected_buffer[256];
|
|
||||||
sprintf(expected_buffer, "%s %d %s: message\n", time_str, line + 1, level_str, message);
|
|
||||||
assert(strcmp(result_buffer, expected_buffer) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
set_output_color_mode(COLOR_MODE_DISABLE);
|
set_output_color_mode(COLOR_MODE_DISABLE);
|
||||||
|
raise_log("zalupa");
|
||||||
|
|
||||||
test_raise_generic(raise_log, LOG_LEVEL_LOG, "LOG");
|
TEST_RAISE_GENERIC(raise_debug, LOG_LEVEL_DEBUG, "DEBUG");
|
||||||
test_raise_generic(raise_debug, LOG_LEVEL_DEBUG, "DEBUG");
|
TEST_RAISE_GENERIC(raise_log, LOG_LEVEL_LOG, "LOG");
|
||||||
test_raise_generic(raise_warn, LOG_LEVEL_INFO, "INFO");
|
TEST_RAISE_GENERIC(raise_info, LOG_LEVEL_INFO, "INFO");
|
||||||
test_raise_generic(raise_notice, LOG_LEVEL_NOTICE, "NOTICE");
|
TEST_RAISE_GENERIC(raise_notice, LOG_LEVEL_NOTICE, "NOTICE");
|
||||||
test_raise_generic(raise_warn, LOG_LEVEL_WARN, "WARN");
|
TEST_RAISE_GENERIC(raise_warn, LOG_LEVEL_WARN, "WARN");
|
||||||
test_raise_generic(raise_exception, LOG_LEVEL_EXCEPTION, "EXCEPTION");
|
TEST_RAISE_GENERIC(raise_exception, LOG_LEVEL_EXCEPTION, "EXCEPTION");
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user