Index: pkg/mustache/test/mustache_spec_test.dart |
diff --git a/pkg/mustache/test/mustache_spec_test.dart b/pkg/mustache/test/mustache_spec_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f6fc573099bfffd4a6130f782d57e68a3ba50ee9 |
--- /dev/null |
+++ b/pkg/mustache/test/mustache_spec_test.dart |
@@ -0,0 +1,83 @@ |
+import 'dart:async'; |
+import 'dart:io'; |
+import 'package:mustache/mustache.dart' as mustache; |
+import 'dart:convert'; |
+ |
+var verbose = false; |
+var testName = null; |
+var fileName = null; //'test/spec/sections.json'; |
+ |
+main(List<String> args) { |
+ if (!args.isEmpty) { |
+ for (var arg in args) { |
+ if (arg == '--verbose' || arg == '-v') { |
+ verbose = true; |
+ } else if (arg.startsWith('-')) { |
+ print('Unknown argument: $arg'); |
+ print('Usage: dart test/mustache_spec_test.dart [--verbose] [test name]'); |
+ return; |
+ } else { |
+ testName = arg; |
+ verbose = true; |
+ } |
+ } |
+ } |
+ |
+ var specs = new Directory('test/spec') |
+ .listSync() |
+ .where((f) => f is File |
+ && f.path.endsWith('.json') |
+ && (fileName == null || f.path == fileName)); |
+ |
+ Future.forEach(specs, |
+ (file) => file |
+ .readAsString() |
+ .then((s) => JSON.decode(s)) |
+ .then((spec) { |
+ print('Specification: ${file.path}'); |
+ spec['tests'].forEach((map) => runTest( |
+ map['name'], |
+ map['desc'], |
+ map['data'], |
+ map['template'], |
+ map['expected'])); |
+ print(''); |
+ })); |
+} |
+ |
+runTest(String name, String desc, Map data, String template, String expected) { |
+ if (testName != null && name != testName) |
+ return; |
+ |
+ var output; |
+ var exception; |
+ var trace; |
+ try { |
+ output = mustache.parse(template, lenient: true).renderString(data, lenient: true); |
+ } catch (ex, stacktrace) { |
+ exception = ex; |
+ trace = stacktrace; |
+ } |
+ |
+// if (output != null) |
+// output = output.replaceAll('\n', '\\n'); |
+ |
+// if (expected != null) |
+// expected = expected.replaceAll('\n', '\\n'); |
+ |
+ var passed = output == expected; |
+ var result = passed ? 'Pass' : 'Fail'; |
+ print(' $result $name'); |
+ if (verbose && !passed) { |
+ print(desc); |
+ print(' Template: $template'); |
+ print(' Data: ${JSON.encode(data)}'); |
+ print(' Expected: $expected'); |
+ print(' Output: $output'); |
+ if (exception != null) print(' Exception: $exception'); |
+ if (trace != null) print(trace); |
+ print(''); |
+ print(''); |
+ } |
+} |
+ |