test_strings.cpp 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #define PAR_STRING_BLOCKS_IMPLEMENTATION
  2. #include "par_string_blocks.h"
  3. extern "C" {
  4. #include "describe.h"
  5. }
  6. const char test_string[] = R"(
  7. --- my_shader
  8. void main() { ... }
  9. --- common
  10. uniform vec4 resolution;
  11. uniform vec4 color;
  12. --- spooky
  13. -- hello
  14. !! world
  15. )";
  16. FILE* global_file;
  17. int main()
  18. {
  19. parsb_context* blocks;
  20. describe("simple") {
  21. it("can create a context") {
  22. blocks = parsb_create_context((parsb_options){});
  23. assert_equal((int) sizeof(test_string), (int) strlen(test_string) + 1);
  24. parsb_add_blocks(blocks, test_string, strlen(test_string));
  25. }
  26. it("can extract single blocks") {
  27. assert_str_equal(parsb_get_blocks(blocks, "my_shader"),
  28. "void main() { ... }\n\n");
  29. assert_str_equal(parsb_get_blocks(blocks, "common"),
  30. "uniform vec4 resolution;\nuniform vec4 color;\n");
  31. assert_str_equal(parsb_get_blocks(blocks, "spooky"),
  32. "-- hello\n!! world\n ");
  33. }
  34. it("can glue blocks") {
  35. assert_str_equal(parsb_get_blocks(blocks, "spooky common"),
  36. "-- hello\n!! world\n uniform vec4 resolution;\nuniform vec4 color;\n");
  37. }
  38. it("can add a named block") {
  39. parsb_add_block(blocks, "prefix", "13");
  40. assert_str_equal(parsb_get_blocks(blocks, "prefix spooky common"),
  41. "13-- hello\n!! world\n uniform vec4 resolution;\nuniform vec4 color;\n");
  42. }
  43. it("can replace a named block") {
  44. parsb_add_block(blocks, "prefix", "11");
  45. assert_str_equal(parsb_get_blocks(blocks, "prefix spooky common"),
  46. "11-- hello\n!! world\n uniform vec4 resolution;\nuniform vec4 color;\n");
  47. }
  48. it("add and replace multiple blocks") {
  49. const char newblocks[] = R"(
  50. --- prefix
  51. 12
  52. --- great
  53. goodbye)";
  54. parsb_add_blocks(blocks, newblocks, strlen(newblocks));
  55. assert_str_equal(parsb_get_blocks(blocks, "prefix spooky"),
  56. "12\n-- hello\n!! world\n ");
  57. assert_str_equal(parsb_get_blocks(blocks, "great prefix"), "goodbye12\n");
  58. }
  59. it("can export the database") {
  60. global_file = fopen("test0.glsl", "w");
  61. parsb_write_blocks(blocks, [](const char* line, void* user) {
  62. fprintf(global_file, "%s\n", line);
  63. }, nullptr);
  64. fclose(global_file);
  65. parsb_destroy_context(blocks);
  66. }
  67. it("can import the database") {
  68. blocks = parsb_create_context((parsb_options){});
  69. assert_equal((int) sizeof(test_string), (int) strlen(test_string) + 1);
  70. parsb_add_blocks_from_file(blocks, "test0.glsl");
  71. }
  72. it("can re-export the database") {
  73. global_file = fopen("test1.glsl", "w");
  74. parsb_write_blocks(blocks, [](const char* line, void* user) {
  75. fprintf(global_file, "%s\n", line);
  76. }, nullptr);
  77. fclose(global_file);
  78. parsb_destroy_context(blocks);
  79. }
  80. }
  81. return assert_failures();
  82. }