diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-10-17 18:01:11 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-10-17 18:01:11 -0400 |
| commit | 6ca4d7a6b6c896cfcba0b3dfe02bf135b5c8ead7 (patch) | |
| tree | e35928104292b91693489bd3fb1952b70b4916ce /tests | |
| parent | 464e3ff178545c21de8e2d64f8c8cd7dec4d5384 (diff) | |
pke-at: first-pass parse planning center json
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/pke-at-test-data-parser.cpp | 241 | ||||
| -rw-r--r-- | tests/pke-at-test-data-parser.h | 8 | ||||
| -rw-r--r-- | tests/pke-at-test-main.cpp | 8 |
3 files changed, 254 insertions, 3 deletions
diff --git a/tests/pke-at-test-data-parser.cpp b/tests/pke-at-test-data-parser.cpp new file mode 100644 index 0000000..a6a42cb --- /dev/null +++ b/tests/pke-at-test-data-parser.cpp @@ -0,0 +1,241 @@ + +#include "pke-at-test-data-parser.h" +#include "../src/pke-at-data-parser.hpp" +#include "../data/service_types_json.h" +#include "../data/upcoming_plans_json.h" +#include "../data/plan_items_json.h" +#include "pke/pk.h" + +static pk_membucket *bkt = nullptr; + +void parse_test_init() { + bkt = pk_mem_bucket_create("pke-at-test-data-parser", PK_MEM_DEFAULT_BUCKET_SIZE, PK_MEMBUCKET_FLAG_NONE); + pk_mem_bucket_set_client_mem_bucket(bkt); +} +void parse_test_teardown() { + pk_mem_bucket_set_client_mem_bucket(nullptr); + pk_mem_bucket_destroy(bkt); + bkt = nullptr; +} + +int parse_test_001() { + pk_arr_t<di_service_type> service_types = pke_at_data_parser_service_types((char*)data_service_types_json); + + PK_TEST_ASSERT_EQ_RET(6, service_types.next); + + PK_TEST_ASSERT_EQ_RET(291481, service_types[0].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(291539, service_types[1].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(647998, service_types[2].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(1164771, service_types[3].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(1572501, service_types[4].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(1627193, service_types[5].details.id.id_long); + + PK_TEST_ASSERT_EQ_RET(0, strcmp("Decatur ", service_types[0].details.name.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Berne", service_types[1].details.name.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("High School", service_types[2].details.name.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("worship night", service_types[3].details.name.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Security - Decatur", service_types[4].details.name.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Project Worship", service_types[5].details.name.val)); + + return 0; +} + +int parse_test_002() { + pk_arr_t<di_plan> plans = pke_at_data_parser_plans((char*)data_upcoming_plans_json); + + PK_TEST_ASSERT_EQ_RET(12, plans.next); + + PK_TEST_ASSERT_EQ_RET(82934314, plans[0].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(82934328, plans[1].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(82934359, plans[2].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(82934399, plans[3].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(82934414, plans[4].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(82934432, plans[5].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(82934448, plans[6].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(82934561, plans[7].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(82934598, plans[8].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(82934630, plans[9].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(82934779, plans[10].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(82934900, plans[11].details.id.id_long); + + // 1760730718 + PK_TEST_ASSERT_NEQ_RET(0, plans[0].details.date); + PK_TEST_ASSERT_NEQ_RET(0, plans[1].details.date); + PK_TEST_ASSERT_NEQ_RET(0, plans[2].details.date); + PK_TEST_ASSERT_NEQ_RET(0, plans[3].details.date); + PK_TEST_ASSERT_NEQ_RET(0, plans[4].details.date); + PK_TEST_ASSERT_NEQ_RET(0, plans[5].details.date); + PK_TEST_ASSERT_NEQ_RET(0, plans[6].details.date); + PK_TEST_ASSERT_NEQ_RET(0, plans[7].details.date); + PK_TEST_ASSERT_NEQ_RET(0, plans[8].details.date); + PK_TEST_ASSERT_NEQ_RET(0, plans[9].details.date); + PK_TEST_ASSERT_NEQ_RET(0, plans[10].details.date); + PK_TEST_ASSERT_NEQ_RET(0, plans[11].details.date); + // after "today" + PK_TEST_ASSERT_EQ_RET(true, plans[0].details.date > 1760730718); + PK_TEST_ASSERT_EQ_RET(true, plans[1].details.date > 1760730718); + PK_TEST_ASSERT_EQ_RET(true, plans[2].details.date > 1760730718); + PK_TEST_ASSERT_EQ_RET(true, plans[3].details.date > 1760730718); + PK_TEST_ASSERT_EQ_RET(true, plans[4].details.date > 1760730718); + PK_TEST_ASSERT_EQ_RET(true, plans[5].details.date > 1760730718); + PK_TEST_ASSERT_EQ_RET(true, plans[6].details.date > 1760730718); + PK_TEST_ASSERT_EQ_RET(true, plans[7].details.date > 1760730718); + PK_TEST_ASSERT_EQ_RET(true, plans[8].details.date > 1760730718); + PK_TEST_ASSERT_EQ_RET(true, plans[9].details.date > 1760730718); + PK_TEST_ASSERT_EQ_RET(true, plans[10].details.date > 1760730718); + PK_TEST_ASSERT_EQ_RET(true, plans[11].details.date > 1760730718); + // before the new year + PK_TEST_ASSERT_EQ_RET(true, plans[0].details.date < 1767225600); + PK_TEST_ASSERT_EQ_RET(true, plans[1].details.date < 1767225600); + PK_TEST_ASSERT_EQ_RET(true, plans[2].details.date < 1767225600); + PK_TEST_ASSERT_EQ_RET(true, plans[3].details.date < 1767225600); + PK_TEST_ASSERT_EQ_RET(true, plans[4].details.date < 1767225600); + PK_TEST_ASSERT_EQ_RET(true, plans[5].details.date < 1767225600); + PK_TEST_ASSERT_EQ_RET(true, plans[6].details.date < 1767225600); + PK_TEST_ASSERT_EQ_RET(true, plans[7].details.date < 1767225600); + PK_TEST_ASSERT_EQ_RET(true, plans[8].details.date < 1767225600); + PK_TEST_ASSERT_EQ_RET(true, plans[9].details.date < 1767225600); + PK_TEST_ASSERT_EQ_RET(true, plans[10].details.date < 1767225600); + PK_TEST_ASSERT_EQ_RET(true, plans[11].details.date < 1767225600); + for (int i = 0; i < 10; ++i) { + PK_TEST_ASSERT_EQ_RET(true, plans[i].details.date < plans[i+1].details.date); + } + + PK_TEST_ASSERT_EQ_RET(0, strcmp("When Self-Love Is Selfish", plans[0].details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Why Don’t I Feel Like Enough?", plans[1].details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Why Doesn’t God Give Me What I Want?", plans[2].details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("The Problem With Perfectionism", plans[3].details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Living for Jesus in a Culture of Compromise", plans[4].details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("When You’re Under Attack", plans[5].details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Anxious Hearts, Fearless Faith", plans[6].details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("When It’s Hard to Obey", plans[7].details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("A Moment of Surrender", plans[8].details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("To Hell With Hesitation", plans[9].details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Stand Alone", plans[10].details.title.val)); + PK_TEST_ASSERT_EQ_RET(nullptr, plans[11].details.title.val); + + PK_TEST_ASSERT_EQ_RET(0, strcmp("Almost True", plans[0].details.series_title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Almost True", plans[1].details.series_title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Almost True", plans[2].details.series_title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Almost True", plans[3].details.series_title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Unshakable", plans[4].details.series_title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Unshakable", plans[5].details.series_title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Unshakable", plans[6].details.series_title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Holy Moments", plans[7].details.series_title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Holy Moments", plans[8].details.series_title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Holy Moments", plans[9].details.series_title.val)); + PK_TEST_ASSERT_EQ_RET(nullptr, plans[10].details.series_title.val); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Christmas Eve", plans[11].details.series_title.val)); + + return 0; +} + +int parse_test_003() { + pk_arr_t<di_plan_item> items = pke_at_data_parser_plan_items((char*)data_plan_items_json); + + PK_TEST_ASSERT_EQ_RET(4, items.next); + + PK_TEST_ASSERT_EQ_RET(1116826609, items[0].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(1116826612, items[1].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(1116826614, items[2].details.id.id_long); + PK_TEST_ASSERT_EQ_RET(1131208437, items[3].details.id.id_long); + + PK_TEST_ASSERT_EQ_RET(24030215, items[0].song.details.id.id_long); + PK_TEST_ASSERT_EQ_RET(27793425, items[0].arrangement.details.id.id_long); + PK_TEST_ASSERT_EQ_RET(44596256, items[0].key.details.id.id_long); + + PK_TEST_ASSERT_EQ_RET(22058189, items[1].song.details.id.id_long); + PK_TEST_ASSERT_EQ_RET(25398725, items[1].arrangement.details.id.id_long); + PK_TEST_ASSERT_EQ_RET(45863343, items[1].key.details.id.id_long); + + PK_TEST_ASSERT_EQ_RET(18743841, items[2].song.details.id.id_long); + PK_TEST_ASSERT_EQ_RET(21448360, items[2].arrangement.details.id.id_long); + PK_TEST_ASSERT_EQ_RET(29304181, items[2].key.details.id.id_long); + + PK_TEST_ASSERT_EQ_RET(12327928, items[3].song.details.id.id_long); + PK_TEST_ASSERT_EQ_RET(13840808, items[3].arrangement.details.id.id_long); + PK_TEST_ASSERT_EQ_RET(21251195, items[3].key.details.id.id_long); + + PK_TEST_ASSERT_EQ_RET(PKE_AT_KEY_INDEX_G, items[0].details.key); + PK_TEST_ASSERT_EQ_RET(PKE_AT_KEY_INDEX_G, items[1].details.key); + PK_TEST_ASSERT_EQ_RET(PKE_AT_KEY_INDEX_G, items[2].details.key); + PK_TEST_ASSERT_EQ_RET(PKE_AT_KEY_INDEX_D, items[3].details.key); + + PK_TEST_ASSERT_EQ_RET(7, items[0].details.sequence); + PK_TEST_ASSERT_EQ_RET(8, items[1].details.sequence); + PK_TEST_ASSERT_EQ_RET(9, items[2].details.sequence); + PK_TEST_ASSERT_EQ_RET(13, items[3].details.sequence); + + PK_TEST_ASSERT_EQ_RET(0, strcmp("This Is Our God", items[0].song.details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Egypt", items[1].song.details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Good Grace", items[2].song.details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("My Heart Is Yours", items[3].song.details.title.val)); + PK_TEST_ASSERT_EQ_RET(7211413, items[0].song.details.ccli); + PK_TEST_ASSERT_EQ_RET(7133348, items[1].song.details.ccli); + PK_TEST_ASSERT_EQ_RET(7122177, items[2].song.details.ccli); + PK_TEST_ASSERT_EQ_RET(7017788, items[3].song.details.ccli); + + PK_TEST_ASSERT_EQ_RET(0, strcmp("Phil Wickham", items[0].arrangement.details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Cory Asbury ", items[1].arrangement.details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Hillsong United", items[2].arrangement.details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, strcmp("Default Arrangement", items[3].arrangement.details.title.val)); + PK_TEST_ASSERT_EQ_RET(0, items[0].arrangement.details.beats_per_minute); + PK_TEST_ASSERT_EQ_RET(75, items[1].arrangement.details.beats_per_minute); + PK_TEST_ASSERT_EQ_RET(73, items[2].arrangement.details.beats_per_minute); + PK_TEST_ASSERT_EQ_RET(0, items[3].arrangement.details.beats_per_minute); + PK_TEST_ASSERT_EQ_RET(0, items[0].arrangement.details.beats_per_bar); + PK_TEST_ASSERT_EQ_RET(4, items[1].arrangement.details.beats_per_bar); + PK_TEST_ASSERT_EQ_RET(4, items[2].arrangement.details.beats_per_bar); + PK_TEST_ASSERT_EQ_RET(0, items[3].arrangement.details.beats_per_bar); + PK_TEST_ASSERT_EQ_RET(PKE_AT_KEY_INDEX_C, items[0].arrangement.details.chord_chart_key); + PK_TEST_ASSERT_EQ_RET(PKE_AT_KEY_INDEX_NONE, items[1].arrangement.details.chord_chart_key); + PK_TEST_ASSERT_EQ_RET(PKE_AT_KEY_INDEX_G, items[2].arrangement.details.chord_chart_key); + PK_TEST_ASSERT_EQ_RET(PKE_AT_KEY_INDEX_A, items[3].arrangement.details.chord_chart_key); + PK_TEST_ASSERT_EQ_RET(0, items[0].arrangement.details.sequence.next); + PK_TEST_ASSERT_EQ_RET(0, items[1].arrangement.details.sequence.next); + PK_TEST_ASSERT_EQ_RET(11, items[2].arrangement.details.sequence.next); + PK_TEST_ASSERT_EQ_RET(0, items[3].arrangement.details.sequence.next); + for (unsigned int i = 0; i < items[2].arrangement.details.sequence.next; ++i) { + PK_TEST_ASSERT_NEQ_RET(PKE_AT_SECTION_TYPE_INDEX_NONE, items[2].arrangement.details.sequence[i]); + } + + PK_TEST_ASSERT_EQ_RET(PKE_AT_KEY_INDEX_G, items[0].key.details.key); + PK_TEST_ASSERT_EQ_RET(PKE_AT_KEY_INDEX_G, items[1].key.details.key); + PK_TEST_ASSERT_EQ_RET(PKE_AT_KEY_INDEX_G, items[2].key.details.key); + PK_TEST_ASSERT_EQ_RET(PKE_AT_KEY_INDEX_D, items[3].key.details.key); + + return 0; +} + +struct pk_test_group *pke_at_test_get_data_parser() { + + static const unsigned char n_tests = 3; + static pk_test tests[n_tests] = { + { + .title = "parse_test_001", + .func = parse_test_001, + .expected_result = 0, + }, + { + .title = "parse_test_002", + .func = parse_test_002, + .expected_result = 0, + }, + { + .title = "parse_test_003", + .func = parse_test_003, + .expected_result = 0, + }, + }; + + static pk_test_group g{}; + g.title = "parse-tests"; + g.group_setup = nullptr; + g.group_teardown = nullptr; + g.test_setup = parse_test_init; + g.test_teardown = parse_test_teardown; + g.tests = tests; + g.n_tests = n_tests; + + return &g; +} diff --git a/tests/pke-at-test-data-parser.h b/tests/pke-at-test-data-parser.h new file mode 100644 index 0000000..b2321ff --- /dev/null +++ b/tests/pke-at-test-data-parser.h @@ -0,0 +1,8 @@ +#ifndef PKE_AT_PKE_AT_TEST_DATA_PARSER_H +#define PKE_AT_PKE_AT_TEST_DATA_PARSER_H + +#include <pke/pk.h> + +struct pk_test_group *pke_at_test_get_data_parser(); + +#endif /* PKE_AT_PKE_AT_TEST_DATA_PARSER_H */ diff --git a/tests/pke-at-test-main.cpp b/tests/pke-at-test-main.cpp index 367bbf4..dba3d0f 100644 --- a/tests/pke-at-test-main.cpp +++ b/tests/pke-at-test-main.cpp @@ -1,5 +1,6 @@ -#include "./pke-at-test-dummy.h" +#include "pke-at-test-dummy.h" +#include "pke-at-test-data-parser.h" #include <pke/pk.h> @@ -9,10 +10,11 @@ int main(int argc, char *argv[]) (void)argv; pk_test_group_get *fns[] = { - pke_at_test_get_dummy + pke_at_test_get_dummy, + pke_at_test_get_data_parser, }; - pk_test_run_test_groups(fns, 1); + pk_test_run_test_groups(fns, 2); return 0; } |
