Open
Description
The function extension does not properly extract multiple levels of paths started with dot (.). The following examples does not work:
import 'package:path/path.dart' as p;
import 'package:test/test.dart';
void main() {
group('Function: extension', () {
final testCases = [
(input: '...txt', level: 3, expected: '..txt'),
(input: '.gitignore.exe.txt.abc', level: 4, expected: '.exe.txt.abc'),
(input: '.gitignore.exe.txt.abc', level: 40, expected: '.exe.txt.abc'),
(input: '/this/is/a/path.hello.there/./.', level: 1, expected: '.there'),
(input: '/this/is/a/path.hello.there/./.', level: 2, expected: '.hello.there'),
(input: '/this/is/a/path.hello.there/./.', level: 3, expected: '.hello.there'),
(input: '/this/is/a/.path.hello.there/./.', level: 10, expected: '.hello.there'),
];
for (final (input: input, level: level, expected: expected) in testCases) {
test('Should return "$expected" when the input is "$input" (lvl: $level)',
() {
expect(p.extension(input, level), equals(expected));
});
}
});
}
Extra: (the complete set of tests used):
import 'package:path/path.dart' as p;
import 'package:test/test.dart';
void main() {
group('Function: extension', () {
final testCases = [
(input: '', level: 1, expected: ''),
(input: 'abc', level: 1, expected: ''),
(input: 'c://anc/abc', level: 1, expected: ''),
(input: '.gitignore', level: 1, expected: ''),
(input: '/a/b/.gitignore', level: 1, expected: ''),
(input: '..txt', level: 1, expected: '.txt'),
(input: '...txt', level: 1, expected: '.txt'),
(input: '...txt', level: 2, expected: '..txt'),
(input: '...txt', level: 3, expected: '..txt'),
(input: 'foo.bar.dart.js', level: 1, expected: '.js'),
(input: 'foo.bar.dart.js', level: 2, expected: '.dart.js'),
(input: 'foo.bar.dart.js', level: 3, expected: '.bar.dart.js'),
(input: 'foo.bar.dart.js', level: 10, expected: '.bar.dart.js'),
(input: '.gitignore.exe.txt.abc', level: 1, expected: '.abc'),
(input: '.gitignore.exe.txt.abc', level: 2, expected: '.txt.abc'),
(input: '.gitignore.exe.txt.abc', level: 3, expected: '.exe.txt.abc'),
(input: '.gitignore.exe.txt.abc', level: 4, expected: '.exe.txt.abc'),
(input: '.gitignore.exe.txt.abc', level: 40, expected: '.exe.txt.abc'),
(input: 'gitignore.exe.txt.abc', level: 1, expected: '.abc'),
(input: 'gitignore.exe.txt.abc', level: 2, expected: '.txt.abc'),
(input: 'gitignore.exe.txt.abc', level: 3, expected: '.exe.txt.abc'),
(input: 'gitignore.exe.txt.abc', level: 4, expected: '.exe.txt.abc'),
(input: 'gitignore.exe.txt.abc', level: 40, expected: '.exe.txt.abc'),
(input: '/this/is/a/path.hello.there/./.', level: 1, expected: '.there'),
(input: '/this/is/a/path.hello.there/./.', level: 2, expected: '.hello.there'),
(input: '/this/is/a/path.hello.there/./.', level: 3, expected: '.hello.there'),
(input: '/this/is/a/.path.hello.there/./.', level: 10, expected: '.hello.there'),
];
for (final (input: input, level: level, expected: expected) in testCases) {
test('Should return "$expected" when the input is "$input" (lvl: $level)',
() {
expect(p.extension(input, level), equals(expected));
});
}
});
}