| // Copyright (c) 2019, 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. | 
 |  | 
 | import 'spell_checking_utils.dart'; | 
 |  | 
 | void main() { | 
 |   expectSplit("Hello world", false, ["Hello", "world"], [0, 6]); | 
 |   expectSplit("Hello  world", false, ["Hello", "world"], [0, 7]); | 
 |   expectSplit("Hello\nworld", false, ["Hello", "world"], [0, 6]); | 
 |   expectSplit("Hello 'world'", false, ["Hello", "world"], [0, 7]); | 
 |   expectSplit("It's fun", false, ["It's", "fun"], [0, 5]); | 
 |   expectSplit("It's 'fun'", false, ["It's", "fun"], [0, 6]); | 
 |   expectSplit("exit-code", false, ["exit", "code"], [0, 5]); | 
 |   expectSplit("fatal=warning", false, ["fatal", "warning"], [0, 6]); | 
 |   expectSplit("vm|none", false, ["vm", "none"], [0, 3]); | 
 |   expectSplit("vm/none", false, ["vm", "none"], [0, 3]); | 
 |   expectSplit("vm,none", false, ["vm", "none"], [0, 3]); | 
 |   expectSplit("One or more word(s)", false, ["One", "or", "more", "word(s)"], | 
 |       [0, 4, 7, 12]); | 
 |   expectSplit("One or more words)", false, ["One", "or", "more", "words"], | 
 |       [0, 4, 7, 12]); | 
 |   expectSplit( | 
 |       "It's 'fun' times 100", false, ["It's", "fun", "times"], [0, 6, 11]); | 
 |  | 
 |   expectSplit("splitCamelCase", false, ["splitCamelCase"], [0]); | 
 |   expectSplit("splitCamelCase", true, ["split", "Camel", "Case"], [0, 5, 10]); | 
 |   expectSplit("logicalAnd_end", true, ["logical", "And", "end"], [0, 7, 11]); | 
 |   expectSplit("TheCNNAlso", true, ["The", "CNN", "Also"], [0, 3, 6]); | 
 |   expectSplit("LOGICAL_OR_PRECEDENCE", true, ["LOGICAL", "OR", "PRECEDENCE"], | 
 |       [0, 8, 11]); | 
 |  | 
 |   expectSplit("ThisIsTheCNN", true, ["This", "Is", "The", "CNN"], [0, 4, 6, 9]); | 
 |  | 
 |   // Special-case "A". | 
 |   expectSplit("notAConstant", true, ["not", "A", "Constant"], [0, 3, 4]); | 
 |   expectSplit("notAC", true, ["not", "A", "C"], [0, 3, 4]); | 
 |   expectSplit("split_etc", false, ["split_etc"], [0]); | 
 |   expectSplit("split_etc", true, ["split", "etc"], [0, 6]); | 
 |   expectSplit("split:etc", false, ["split:etc"], [0]); | 
 |   expectSplit("split:etc", true, ["split", "etc"], [0, 6]); | 
 |  | 
 |   expectSplit("vm.none", false, ["vm.none"], [0]); | 
 |   expectSplit("vm.none", true, ["vm", "none"], [0, 3]); | 
 |  | 
 |   expectSplit( | 
 |       "ActualData(foo, bar)", false, ["ActualData(foo", "bar"], [0, 16]); | 
 |   expectSplit("ActualData(foo, bar)", true, ["Actual", "Data", "foo", "bar"], | 
 |       [0, 6, 11, 16]); | 
 |  | 
 |   expectSplit("List<int>", false, ["List<int"], [0]); | 
 |   expectSplit("List<int>", true, ["List", "int"], [0, 5]); | 
 |  | 
 |   expectSplit("Platform.environment['TERM']", false, | 
 |       ["Platform.environment['TERM"], [0]); | 
 |   expectSplit("Platform.environment['TERM']", true, | 
 |       ["Platform", "environment", "TERM"], [0, 9, 22]); | 
 |  | 
 |   expectSplit("DART2JS_PLATFORM", false, ["DART2JS_PLATFORM"], [0]); | 
 |   expectSplit("DART2JS_PLATFORM", true, ["DART", "JS", "PLATFORM"], [0, 5, 8]); | 
 |  | 
 |   expectSplit("Foo\\n", false, ["Foo\\n"], [0]); | 
 |   expectSplit("Foo\\n", true, ["Foo"], [0]); | 
 |  | 
 |   expectSplit("foo({bar})", false, ["foo({bar"], [0]); | 
 |   expectSplit("foo({bar})", true, ["foo", "bar"], [0, 5]); | 
 |  | 
 |   expectSplit("foo@bar", false, ["foo@bar"], [0]); | 
 |   expectSplit("foo@bar", true, ["foo", "bar"], [0, 4]); | 
 |  | 
 |   expectSplit("foo#bar", false, ["foo#bar"], [0]); | 
 |   expectSplit("foo#bar", true, ["foo", "bar"], [0, 4]); | 
 |  | 
 |   expectSplit("foo&bar", false, ["foo&bar"], [0]); | 
 |   expectSplit("foo&bar", true, ["foo", "bar"], [0, 4]); | 
 |  | 
 |   expectSplit("foo?bar", false, ["foo?bar"], [0]); | 
 |   expectSplit("foo?bar", true, ["foo", "bar"], [0, 4]); | 
 |  | 
 |   expectSplit("foo%bar", false, ["foo%bar"], [0]); | 
 |   expectSplit("foo%bar", true, ["foo", "bar"], [0, 4]); | 
 |  | 
 |   expectSplit("foo42bar", false, ["foo42bar"], [0]); | 
 |   expectSplit("foo42bar", true, ["foo", "bar"], [0, 5]); | 
 |  | 
 |   expectSplit('foo"bar', false, ['foo"bar'], [0]); | 
 |   expectSplit('foo"bar', true, ["foo", "bar"], [0, 4]); | 
 |  | 
 |   expectAlternative( | 
 |       "explicitley", ["explicitly"], {"foo", "explicitly", "bar"}); | 
 |   expectAlternative("explicitlqqqqy", null, {"foo", "explicitly", "bar"}); | 
 |  | 
 |   print("OK"); | 
 | } | 
 |  | 
 | void expectSplit(String s, bool splitAsCode, List<String> expectedWords, | 
 |     List<int> expectedOffsets) { | 
 |   List<int> actualOffsets = <int>[]; | 
 |   List<String> actualWords = | 
 |       splitStringIntoWords(s, actualOffsets, splitAsCode: splitAsCode); | 
 |   compareLists(actualWords, expectedWords); | 
 |   compareLists(actualOffsets, expectedOffsets); | 
 | } | 
 |  | 
 | void compareLists(List<dynamic>? actual, List<dynamic>? expected) { | 
 |   if (actual == null && expected == null) return; | 
 |   if (actual == null) throw "Got null, expected $expected"; | 
 |   if (expected == null) throw "Expected null, got $actual"; | 
 |   if (actual.length != expected.length) { | 
 |     throw "Not the same ($actual vs $expected)"; | 
 |   } | 
 |   for (int i = 0; i < actual.length; i++) { | 
 |     if (actual[i] != expected[i]) { | 
 |       throw "Not the same ($actual vs $expected)"; | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | void expectAlternative( | 
 |     String word, List<String>? expected, Set<String> dictionary) { | 
 |   List<String>? alternatives = findAlternatives(word, [dictionary]); | 
 |   compareLists(alternatives, expected); | 
 | } |