47 params->jobcode = test->
jobcode;
56 if(g_strcmp0(result, test_case->expected_result))
59 printf(
" [FAIL] input: '%s', result: '%s', expected: '%s'\n", test_case->input, result, test_case->expected_result);
62 printf(
" [OK] input: '%s', result: '%s'\n", test_case->input, result);
67 return *n_failed > 0 ? 1 : 0;
71 "abcdef12345abcdef",
"ABCDEF12345ABCDEF", 23,
73 {
"$(FILE_NAME)",
"abcdef12345abcdef"},
74 {
"foo-$(FILE_NAME)-bar",
"foo-abcdef12345abcdef-bar"},
75 {
"äöü-$(FILE_NAME)-äöü",
"äöü-abcdef12345abcdef-äöü"},
76 {
"$(FILE_NAME).$(SEQUENCE)",
"abcdef12345abcdef.0023"},
77 {
"$(NONEXISTANT)",
""},
78 {
"foo-$(NONEXISTANT)-bar",
"foo--bar"},
85 "abcdef12345abcdef",
"ABCDEF12345ABCDEF", 23,
87 {
"$(NONEXISTANT-invälid)",
"invälid"},
88 {
"$(FILE_NAME-invälid)",
"abcdef12345abcdef"},
90 {
"$(NONEXISTANT+exißts)",
""},
91 {
"$(FILE_NAME+exißts)",
"exißts"},
93 {
"$(NONEXISTANT:0)",
""},
94 {
"$(FILE_NAME:0)",
"abcdef12345abcdef"},
95 {
"$(FILE_NAME:5)",
"f12345abcdef"},
96 {
"$(FILE_NAME:42)",
""},
97 {
"$(FILE_NAME:-5)",
"bcdef"},
98 {
"$(FILE_NAME:-42)",
"abcdef12345abcdef"},
99 {
"$(FILE_NAME:0:5)",
"abcde"},
100 {
"$(FILE_NAME:5:3)",
"f12"},
101 {
"$(FILE_NAME:5:42)",
"f12345abcdef"},
102 {
"$(FILE_NAME:-5:3)",
"bcd"},
103 {
"$(FILE_NAME:-7:-2)",
"5abcd"},
104 {
"$(FILE_NAME:)",
"abcdef12345abcdef"},
105 {
"$(FILE_NAME:5:)",
""},
107 {
"$(NONEXISTANT#abc)",
""},
108 {
"$(FILE_NAME#abc)",
"def12345abcdef"},
109 {
"$(FILE_NAME#def)",
"abcdef12345abcdef"},
111 {
"$(NONEXISTANT%abc)",
""},
112 {
"$(FILE_NAME%abc)",
"abcdef12345abcdef"},
113 {
"$(FILE_NAME%def)",
"abcdef12345abc"},
115 {
"$(NONEXISTANT/abc/def)",
""},
116 {
"$(FILE_NAME/abc/foobar)",
"foobardef12345abcdef"},
117 {
"$(FILE_NAME/def/foobar)",
"abcfoobar12345abcdef"},
118 {
"$(FILE_NAME//abc/foobar)",
"foobardef12345foobardef"},
119 {
"$(FILE_NAME//def/foobar)",
"abcfoobar12345abcfoobar"},
120 {
"$(FILE_NAME/#abc/foobar)",
"foobardef12345abcdef"},
121 {
"$(FILE_NAME/#def/foobar)",
"abcdef12345abcdef"},
122 {
"$(FILE_NAME/%abc/foobar)",
"abcdef12345abcdef"},
123 {
"$(FILE_NAME/%def/foobar)",
"abcdef12345abcfoobar"},
125 {
"$(NONEXISTANT^)",
""},
126 {
"$(NONEXISTANT^^)",
""},
127 {
"$(FILE_NAME^)",
"Abcdef12345abcdef"},
128 {
"$(FILE_NAME^^)",
"ABCDEF12345ABCDEF"},
130 {
"$(NONEXISTANT,)",
""},
131 {
"$(NONEXISTANT,,)",
""},
132 {
"$(JOBCODE,)",
"aBCDEF12345ABCDEF"},
133 {
"$(JOBCODE,,)",
"abcdef12345abcdef"},
140 "abcdef12345abcdef",
"ABCDEF12345ABCDEF", 23,
142 {
"x$(TITLE-$(FILE_NAME))y",
"xabcdef12345abcdefy"},
143 {
"x$(TITLE-a-$(FILE_NAME)-b)y",
"xa-abcdef12345abcdef-by"},
144 {
"x$(SEQUENCE-$(FILE_NAME))y",
"x0023y"},
145 {
"x$(FILE_NAME/12345/$(SEQUENCE))y",
"xabcdef0023abcdefy"},
146 {
"x$(FILE_NAME/12345/.$(SEQUENCE).)y",
"xabcdef.0023.abcdefy"},
153 "abcdef12345abcdef",
"ABCDEF12345ABCDEF", 23,
155 {
"$(NONEXISTANT",
"$(NONEXISTANT"},
156 {
"x(NONEXISTANT23",
"x(NONEXISTANT23"},
157 {
"$(FILE_NAME",
"$(FILE_NAME"},
158 {
"x$(FILE_NAME",
"x$(FILE_NAME"},
159 {
"x$(TITLE-$(FILE_NAME)",
"x$(TITLE-abcdef12345abcdef"},
166 "/home/test/Images/IMG_0123.CR2",
"/home/test/", 23,
168 {
"foobarbaz",
"foobarbaz"},
169 {
"foo/bar/baz",
"foo/bar/baz"},
170 {
"foo\\bar\\baz",
"foobarbaz"},
171 {
"foo\\\\bar\\\\baz",
"foo\\bar\\baz"},
172 {
"foo\\$(bar",
"foo$(bar"},
173 {
"foo$\\(bar",
"foo$(bar"},
174 {
"foo\\$\\(bar",
"foo$(bar"},
175 {
"foo\\$(bar$(SEQUENCE)baz",
"foo$(bar0023baz"},
176 {
"foo$(bar$(SEQUENCE)baz",
"foo$(bar0023baz"},
177 {
"$(FILE_FOLDER)/ansel_exported/img_$(SEQUENCE)",
"/home/test/Images/ansel_exported/img_0023"},
178 {
"$(FILE_FOLDER)/ansel_exported/$(FILE_NAME)",
"/home/test/Images/ansel_exported/IMG_0123"},
185 "/home/test/Images/0023/IMG_0123.CR2",
"/home/test", 23,
187 {
"$(FILE_FOLDER#$(JOBCODE))",
"/Images/0023"},
188 {
"$(FILE_FOLDER#$(JOBCODE)/Images)",
"/0023"},
190 {
"$(FILE_FOLDER%$(SEQUENCE))",
"/home/test/Images/"},
191 {
"$(FILE_FOLDER%/$(SEQUENCE))",
"/home/test/Images"},
193 {
"$(FILE_FOLDER/test/$(SEQUENCE))",
"/home/0023/Images/0023"},
194 {
"$(FILE_FOLDER/test/$(SEQUENCE)-$(SEQUENCE))",
"/home/0023-0023/Images/0023"},
195 {
"$(FILE_FOLDER/test/$(SEQUENCE//0/o))",
"/home/oo23/Images/0023"},
196 {
"$(FILE_FOLDER/$(SEQUENCE)/XXX)",
"/home/test/Images/XXX"},
197 {
"$(FILE_FOLDER/$(JOBCODE)\\///media/)",
"/media/Images/0023"},
198 {
"$(FILE_FOLDER/\\/home\\/test\\///media/exports/)/ansel_exported/img_$(SEQUENCE)",
"/media/exports/Images/0023/ansel_exported/img_0023"},
200 {
"$(FILE_FOLDER/",
"$(FILE_FOLDER/"},
201 {
"$(FILE_FOLDER/home",
"$(FILE_FOLDER/home"},
202 {
"$(FILE_FOLDER/home/media",
"$(FILE_FOLDER/home/media"},
203 {
"$(FILE_FOLDER/home/media)",
"/media/test/Images/0023"},
212 int n_failed = 0, n_tests = 0;\
214 printf("running test '" #t "'\n");\
215 n_test_functions_failed += run_test(&t, &n_tests, &n_failed);\
216 n_tests_overall += n_tests;\
217 n_failed_overall += n_failed;\
218 printf("%d / %d tests failed\n\n", n_failed, n_tests);\
221int main(
int argc,
char* argv[])
223 char *argv_override[] = {
"ansel-test-variables",
"--library",
":memory:",
"--conf",
"write_sidecar_files=FALSE", NULL};
224 int argc_override =
sizeof(argv_override) /
sizeof(*argv_override) - 1;
229 int n_tests_overall = 0, n_failed_overall = 0, n_test_functions = 0, n_test_functions_failed = 0;
243 printf(
"%d / %d tests failed (%d / %d)\n",
246 n_test_functions_failed,
int dt_init(int argc, char *argv[], const gboolean init_gui, const gboolean load_data)
char * dt_variables_expand(dt_variables_params_t *params, gchar *source, gboolean iterate)
void dt_variables_params_destroy(dt_variables_params_t *params)
void dt_variables_params_init(dt_variables_params_t **params)
static const test_t test_recursive_substitutions
static const test_t test_variables
static const test_t test_real_paths
static const test_t test_simple_substitutions
int run_test(const test_t *test, int *n_tests, int *n_failed)
static const test_t test_escapes
static const test_t test_broken_variables