#+feature dynamic-literals #+private package mustache import "core:os" import "core:log" import "core:testing" import "core:encoding/json" data_struct :: union { map[string]data_struct, []data_struct, string, bool, } test_struct :: struct { overview: string, tests: []struct{ name, desc, template, expected: string, data: data_struct } } @(test) spec_test :: proc(t: ^testing.T){ test_files := []string { "./spec/specs/sections.json", "./spec/specs/interpolation.json", "./spec/specs/inverted.json", "./spec/specs/comments.json", /* "./spec/specs/partials.json", "./spec/specs/delimiters.json", */ } for i in test_files { data, err:=os.read_entire_file_from_filename_or_err(i) defer delete(data) if err != nil { testing.expectf(t, false, "%v", err) } test: test_struct json.unmarshal(data, &test, allocator=context.temp_allocator) failed := 0 for j in test.tests { ret := mustache(j.template, j.data) defer delete(ret) if ret!=j.expected { log.warnf( "[%s:%s]: %s", i, j.name, j.desc ) failed += 1 } } log.infof( "[%s] Passed: (%d/%d)", i, len(test.tests)-failed, len(test.tests) ) } }