| // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| library json_unicode_tests; | |
| import 'unicode_tests.dart'; | |
| const _quote = 0x22; // " | |
| const _colon = 0x3a; // : | |
| const _comma = 0x2c; // , | |
| const _braceOpen = 0x7b; // { | |
| const _braceClose = 0x7d; // } | |
| const _bracketOpen = 0x5b; // [ | |
| const _bracketClose = 0x5d; // ] | |
| _expandUnicodeTests() { | |
| return UNICODE_TESTS.expand((test) { | |
| // The unicode test will be a string (possibly) containing unicode | |
| // characters. It also contains the empty string. | |
| // It must not contain a double-quote '"'. | |
| assert(!test.contains('"')); | |
| var bytes = test[0]; | |
| var string = test[1]; | |
| // expanded will hold all tests that are generated from the unicode test. | |
| var expanded = []; | |
| // Put the string into quotes. | |
| // For example: 'abcd' -> '"abcd"'. | |
| var inQuotesBytes = <int>[]; | |
| inQuotesBytes.add(_quote); | |
| inQuotesBytes.addAll(bytes); | |
| inQuotesBytes.add(_quote); | |
| expanded.add([inQuotesBytes, string]); | |
| // Put the quoted string into a triple nested list. | |
| // For example: 'abcd' -> '[[["abcd"]]]'. | |
| var listExpected = [ | |
| [ | |
| [string], | |
| ], | |
| ]; | |
| var inListBytes = <int>[]; | |
| inListBytes.addAll([_bracketOpen, _bracketOpen, _bracketOpen]); | |
| inListBytes.addAll(inQuotesBytes); | |
| inListBytes.addAll([_bracketClose, _bracketClose, _bracketClose]); | |
| expanded.add([inListBytes, listExpected]); | |
| // Put the quoted string into a triple nested list and duplicate that | |
| // list three times. | |
| // For example: 'abcd' -> '[[[["abcd"]]],[[["abcd"]]],[[["abcd"]]]]'. | |
| var listLongerExpected = [listExpected, listExpected, listExpected]; | |
| var listLongerBytes = <int>[]; | |
| listLongerBytes.add(_bracketOpen); | |
| listLongerBytes.addAll(inListBytes); | |
| listLongerBytes.add(_comma); | |
| listLongerBytes.addAll(inListBytes); | |
| listLongerBytes.add(_comma); | |
| listLongerBytes.addAll(inListBytes); | |
| listLongerBytes.add(_bracketClose); | |
| expanded.add([listLongerBytes, listLongerExpected]); | |
| // Put the previous strings/lists into a map. | |
| // For example: | |
| // 'abcd' -> '{"abcd":[[[["abcd"]]],[[["abcd"]]],[[["abcd"]]]]}'. | |
| var mapExpected = new Map(); | |
| mapExpected[string] = listLongerExpected; | |
| var mapBytes = <int>[]; | |
| mapBytes.add(_braceOpen); | |
| mapBytes.addAll(inQuotesBytes); | |
| mapBytes.add(_colon); | |
| mapBytes.addAll(listLongerBytes); | |
| mapBytes.add(_braceClose); | |
| expanded.add([mapBytes, mapExpected]); | |
| return expanded; | |
| }).toList(); | |
| } | |
| final JSON_UNICODE_TESTS = _expandUnicodeTests(); |