// 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();