Skip to content

Function "extension" does not work properly when the basename path starts with dot (.) and has multiple levels. #723

Open
@ArturAssisComp

Description

@ArturAssisComp

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));
      });
    }
  });
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions