| // 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 _BRACE_OPEN = 0x7b; // { |
| const _BRACE_CLOSE = 0x7d; // } |
| const _BRACKET_OPEN = 0x5b; // [ |
| const _BRACKET_CLOSE = 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 = []; |
| 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 = []; |
| inListBytes.addAll([_BRACKET_OPEN, _BRACKET_OPEN, _BRACKET_OPEN]); |
| inListBytes.addAll(inQuotesBytes); |
| inListBytes.addAll([_BRACKET_CLOSE, _BRACKET_CLOSE, _BRACKET_CLOSE]); |
| 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 = []; |
| listLongerBytes.add(_BRACKET_OPEN); |
| listLongerBytes.addAll(inListBytes); |
| listLongerBytes.add(_COMMA); |
| listLongerBytes.addAll(inListBytes); |
| listLongerBytes.add(_COMMA); |
| listLongerBytes.addAll(inListBytes); |
| listLongerBytes.add(_BRACKET_CLOSE); |
| 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 = []; |
| mapBytes.add(_BRACE_OPEN); |
| mapBytes.addAll(inQuotesBytes); |
| mapBytes.add(_COLON); |
| mapBytes.addAll(listLongerBytes); |
| mapBytes.add(_BRACE_CLOSE); |
| expanded.add([mapBytes, mapExpected]); |
| |
| return expanded; |
| }).toList(); |
| } |
| |
| final JSON_UNICODE_TESTS = _expandUnicodeTests(); |