blob: b8d7cdfbc6109f34b3ec438fd22f02065bc6de69 [file] [log] [blame]
// Copyright (c) 2017, 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 'package:linter/src/utils.dart';
import 'package:test/test.dart';
void main() {
group('isDartFileName', () {
testEach(['foo.dart'], isDartFileName, isTrue);
testEach(
[
'foo.d', 'foo',
// Analysis server cares about case.
'baz.DART',
],
isDartFileName,
isFalse,
);
});
group('isValidPackageName', () {
testEach(['foo', '_foo', '__foo', 'async'], isValidPackageName, isTrue);
testEach(
[
'break', // reserved word
'fOO',
'foo_',
'foo_Bar',
'fooBar',
'Foo',
'_',
'__',
'1',
],
isValidPackageName,
isFalse,
);
});
group('camel case', () {
group('upper', () {
var good = [
'_FooBar',
'FooBar',
'_Foo',
'Foo',
'F',
'FB',
'F1',
'FooBar1',
'\$Foo',
'Bar\$',
'Foo\$Generated',
'Foo\$Generated\$Bar',
];
testEach(good, isCamelCase, isTrue);
var bad = ['fooBar', 'foo', 'f', '_f', 'F_B'];
testEach(bad, isCamelCase, isFalse);
});
});
group('library prefixes', () {
const good = [
'foo_bar',
'foo',
'foo_bar_baz',
'p',
'p1',
'p21',
'p1ll0',
'_foo',
// Ensure multiple underscores don't cause issues (#940).
'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa__aa',
'abc_def_ghi_jkl_mnomnomno_abcabcabc__defdefdefdef__ghighighighi',
'abc_____def____ghi_jkl__mnomnomno_abcabcabc__defdefdefdef___ghighighighi',
r'$foo',
'__foo',
r'$_foo',
r'$__foo',
];
testEach(good, isValidLibraryPrefix, isTrue);
const bad = [
'JSON',
'JS',
'Math',
'jsUtils',
'foo_Bar',
'F_B',
'1',
'1b',
r'foo$',
r'f$oo',
r'$$foo',
r'$_$foo',
r'_$foo',
'__',
'_',
'_1',
];
testEach(bad, isValidLibraryPrefix, isFalse);
});
group('isLowerCaseUnderScoreWithDots', () {
var good = [
'bwu_server.shared.datastore.some_file',
'foo_bar.baz',
'foo_bar',
'foo.bar',
'foo_bar_baz',
'foo',
'foo_',
'foo.bar_baz.bang',
//See: https://github.com/flutter/flutter/pull/1996
'pointycastle.impl.ec_domain_parameters.gostr3410_2001_cryptopro_a',
'a.b',
'a.b.c',
'p2.src.acme',
//https://github.com/dart-lang/linter/issues/1803
'_',
'_f',
'__f',
'___f',
'_file.dart',
];
testEach(good, isLowerCaseUnderScoreWithDots, isTrue);
var bad = ['Foo', 'fooBar.', '.foo_Bar', '_.', '.', 'F_B', 'JS', 'JSON'];
testEach(bad, isLowerCaseUnderScoreWithDots, isFalse);
});
group('lowerCamelCase', () {
var good = [
'fooBar',
'foo',
'f',
'f1',
'_f',
'_foo',
'_',
'F',
'__x',
'___x',
'\$foo',
'bar\$',
'foo\$Generated',
'foo\$Generated\$Bar',
'foo_',
];
testEach(good, isLowerCamelCase, isTrue);
var bad = ['Foo', 'foo_bar', '_X'];
testEach(bad, isLowerCamelCase, isFalse);
});
group('isUpperCase', () {
var caps = List<int>.generate(26, (i) => 'A'.codeUnitAt(0) + i);
testEach(caps, isUpperCase, isTrue);
var bad = ['a', '1', 'z'].map((c) => c.codeUnitAt(0));
testEach(bad, isUpperCase, isFalse);
});
}
void testEach<T>(Iterable<T> values, bool Function(T s) f, Matcher m) {
for (var s in values) {
test('"$s"', () => expect(f(s), m));
}
}