// 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 = []; 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([_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 = []; 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 = []; 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();