blob: 397c29eee5c8a61491557463a10e2b9fb80d1825 [file] [log] [blame]
// Copyright (c) 2016, 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.
/**
* @assertion Match matchAsPrefix(String string, [int start = 0])
* Match this pattern against the start of string.
*
* If start is provided, it must be an integer in the range 0 .. string.length.
* In that case, this patten is tested against the string at the start position.
* That is, a Match is returned if the pattern can match a part of the string
* starting from position start. Returns null if the pattern doesn't match.
* @description Checks that the returned Match is correctly initialized.
* @author sgrekhov@unipro.ru
*/
import "../../../Utils/expect.dart";
main() {
check("AE", "AEKFCD", false, true, [0, 2, "AE"]);
check("(a|cd)+|ef", "AEKFCD", false, true, [0, 1, "A"]);
check(".+: gr(a|e)y", "color: grey", false, false, [0, 11, "color: grey"]);
check("((a)|(ab))((c)|(bc))", "abc", false, false, [0, 3, "abc"]);
check(r"^(a+)\1*,\1+$", "aaaaaaaaa,aaaaaa", false, false,
[0, 16, "aaaaaaaaa,aaaaaa"]);
check(r"^(a+?)\1*,\1+$", "aaaaaa,aaaaaaaaa", false, false,
[0, 16, "aaaaaa,aaaaaaaaa"]);
check("(z)((a+)?(b+)?(c))*", "zaacbbbcac", false, false,
[0, 10, "zaacbbbcac"]);
}
void check(String pattern, String str, bool multiLine, bool ignoreCase,
List groupData) {
RegExp re = new RegExp(
pattern, multiLine: multiLine, caseSensitive: !ignoreCase);
Expect.isNotNull(re.matchAsPrefix(str));
Match fm = re.matchAsPrefix(str) as Match;
Expect.equals(str, fm.input);
Expect.equals(pattern, (fm.pattern as RegExp).pattern);
if(groupData != null) {
Expect.equals(groupData.length, 3);
Expect.equals(groupData[0], fm.start);
Expect.equals(groupData[1], fm.end);
Expect.equals(groupData[2], fm.group(0));
}
}