// Copyright (c) 2012, 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:path/path.dart' as path;
import 'package:path/src/utils.dart';
import 'package:test/test.dart';

import 'utils.dart';

void main() {
  final context = path.Context(
    style: path.Style.windows,
    current: r'C:\root\path',
  );

  test('separator', () {
    expect(context.separator, '\\');
  });

  test('extension', () {
    expect(context.extension(''), '');
    expect(context.extension('.'), '');
    expect(context.extension('..'), '');
    expect(context.extension('a/..'), '');
    expect(context.extension('foo.dart'), '.dart');
    expect(context.extension('foo.dart.js'), '.js');
    expect(context.extension('foo bargule fisk.dart.js'), '.js');
    expect(context.extension(r'a.b\c'), '');
    expect(context.extension('a.b/c.d'), '.d');
    expect(context.extension(r'~\.bashrc'), '');
    expect(context.extension(r'a.b/c'), r'');
    expect(context.extension(r'foo.dart\'), '.dart');
    expect(context.extension(r'foo.dart\\'), '.dart');
    expect(context.extension('a.b/..', 2), '');
    expect(context.extension('foo.bar.dart.js', 2), '.dart.js');
    expect(context.extension(r'foo.bar.dart.js', 3), '.bar.dart.js');
    expect(context.extension(r'foo.bar.dart.js', 10), '.bar.dart.js');
    expect(context.extension('a.b/c.d', 2), '.d');
    expect(() => context.extension(r'foo.bar.dart.js', 0), throwsRangeError);
    expect(() => context.extension(r'foo.bar.dart.js', -1), throwsRangeError);
  });

  test('rootPrefix', () {
    expect(context.rootPrefix(''), '');
    expect(context.rootPrefix('a'), '');
    expect(context.rootPrefix(r'a\b'), '');
    expect(context.rootPrefix(r'C:\a\c'), r'C:\');
    expect(context.rootPrefix(r'C:\'), r'C:\');
    expect(context.rootPrefix('C:/'), 'C:/');
    expect(context.rootPrefix(r'\\server\share\a\b'), r'\\server\share');
    expect(context.rootPrefix(r'\\server\share'), r'\\server\share');
    expect(context.rootPrefix(r'\\server\'), r'\\server\');
    expect(context.rootPrefix(r'\\server'), r'\\server');
    expect(context.rootPrefix(r'\a\b'), r'\');
    expect(context.rootPrefix(r'/a/b'), r'/');
    expect(context.rootPrefix(r'\'), r'\');
    expect(context.rootPrefix(r'/'), r'/');
  });

  test('dirname', () {
    expect(context.dirname(r''), '.');
    expect(context.dirname(r'a'), '.');
    expect(context.dirname(r'a\b'), 'a');
    expect(context.dirname(r'a\b\c'), r'a\b');
    expect(context.dirname(r'a\b.c'), 'a');
    expect(context.dirname(r'a\'), '.');
    expect(context.dirname('a/'), '.');
    expect(context.dirname(r'a\.'), 'a');
    expect(context.dirname(r'a\b/c'), r'a\b');
    expect(context.dirname(r'C:\a'), r'C:\');
    expect(context.dirname(r'C:\\\a'), r'C:\');
    expect(context.dirname(r'C:\'), r'C:\');
    expect(context.dirname(r'C:\\\'), r'C:\');
    expect(context.dirname(r'a\b\'), r'a');
    expect(context.dirname(r'a/b\c'), 'a/b');
    expect(context.dirname(r'a\\'), r'.');
    expect(context.dirname(r'a\b\\'), 'a');
    expect(context.dirname(r'a\\b'), 'a');
    expect(context.dirname(r'foo bar\gule fisk'), 'foo bar');
    expect(context.dirname(r'\\server\share'), r'\\server\share');
    expect(context.dirname(r'\\server\share\dir'), r'\\server\share');
    expect(context.dirname(r'\a'), r'\');
    expect(context.dirname(r'/a'), r'/');
    expect(context.dirname(r'\'), r'\');
    expect(context.dirname(r'/'), r'/');
  });

  test('basename', () {
    expect(context.basename(r''), '');
    expect(context.basename(r'.'), '.');
    expect(context.basename(r'..'), '..');
    expect(context.basename(r'.hest'), '.hest');
    expect(context.basename(r'a'), 'a');
    expect(context.basename(r'a\b'), 'b');
    expect(context.basename(r'a\b\c'), 'c');
    expect(context.basename(r'a\b.c'), 'b.c');
    expect(context.basename(r'a\'), 'a');
    expect(context.basename(r'a/'), 'a');
    expect(context.basename(r'a\.'), '.');
    expect(context.basename(r'a\b/c'), r'c');
    expect(context.basename(r'C:\a'), 'a');
    expect(context.basename(r'C:\'), r'C:\');
    expect(context.basename(r'a\b\'), 'b');
    expect(context.basename(r'a/b\c'), 'c');
    expect(context.basename(r'a\\'), 'a');
    expect(context.basename(r'a\b\\'), 'b');
    expect(context.basename(r'a\\b'), 'b');
    expect(context.basename(r'a\\b'), 'b');
    expect(context.basename(r'a\fisk hest.ma pa'), 'fisk hest.ma pa');
    expect(context.basename(r'\\server\share'), r'\\server\share');
    expect(context.basename(r'\\server\share\dir'), r'dir');
    expect(context.basename(r'\a'), r'a');
    expect(context.basename(r'/a'), r'a');
    expect(context.basename(r'\'), r'\');
    expect(context.basename(r'/'), r'/');
  });

  test('basenameWithoutExtension', () {
    expect(context.basenameWithoutExtension(''), '');
    expect(context.basenameWithoutExtension('.'), '.');
    expect(context.basenameWithoutExtension('..'), '..');
    expect(context.basenameWithoutExtension('.hest'), '.hest');
    expect(context.basenameWithoutExtension('a'), 'a');
    expect(context.basenameWithoutExtension(r'a\b'), 'b');
    expect(context.basenameWithoutExtension(r'a\b\c'), 'c');
    expect(context.basenameWithoutExtension(r'a\b.c'), 'b');
    expect(context.basenameWithoutExtension(r'a\'), 'a');
    expect(context.basenameWithoutExtension(r'a\.'), '.');
    expect(context.basenameWithoutExtension(r'a\b/c'), r'c');
    expect(context.basenameWithoutExtension(r'a\.bashrc'), '.bashrc');
    expect(context.basenameWithoutExtension(r'a\b\c.d.e'), 'c.d');
    expect(context.basenameWithoutExtension(r'a\\'), 'a');
    expect(context.basenameWithoutExtension(r'a\b\\'), 'b');
    expect(context.basenameWithoutExtension(r'a\\b'), 'b');
    expect(context.basenameWithoutExtension(r'a\b.c\'), 'b');
    expect(context.basenameWithoutExtension(r'a\b.c\\'), 'b');
    expect(context.basenameWithoutExtension(r'C:\f h.ma pa.f s'), 'f h.ma pa');
  });

  test('isAbsolute', () {
    expect(context.isAbsolute(''), false);
    expect(context.isAbsolute('.'), false);
    expect(context.isAbsolute('..'), false);
    expect(context.isAbsolute('a'), false);
    expect(context.isAbsolute(r'a\b'), false);
    expect(context.isAbsolute(r'\a\b'), true);
    expect(context.isAbsolute(r'\'), true);
    expect(context.isAbsolute(r'/a/b'), true);
    expect(context.isAbsolute(r'/'), true);
    expect(context.isAbsolute('~'), false);
    expect(context.isAbsolute('.'), false);
    expect(context.isAbsolute(r'..\a'), false);
    expect(context.isAbsolute(r'a:/a\b'), true);
    expect(context.isAbsolute(r'D:/a/b'), true);
    expect(context.isAbsolute(r'c:\'), true);
    expect(context.isAbsolute(r'B:\'), true);
    expect(context.isAbsolute(r'c:\a'), true);
    expect(context.isAbsolute(r'C:\a'), true);
    expect(context.isAbsolute(r'\\server\share'), true);
    expect(context.isAbsolute(r'\\server\share\path'), true);
  });

  test('isRelative', () {
    expect(context.isRelative(''), true);
    expect(context.isRelative('.'), true);
    expect(context.isRelative('..'), true);
    expect(context.isRelative('a'), true);
    expect(context.isRelative(r'a\b'), true);
    expect(context.isRelative(r'\a\b'), false);
    expect(context.isRelative(r'\'), false);
    expect(context.isRelative(r'/a/b'), false);
    expect(context.isRelative(r'/'), false);
    expect(context.isRelative('~'), true);
    expect(context.isRelative('.'), true);
    expect(context.isRelative(r'..\a'), true);
    expect(context.isRelative(r'a:/a\b'), false);
    expect(context.isRelative(r'D:/a/b'), false);
    expect(context.isRelative(r'c:\'), false);
    expect(context.isRelative(r'B:\'), false);
    expect(context.isRelative(r'c:\a'), false);
    expect(context.isRelative(r'C:\a'), false);
    expect(context.isRelative(r'\\server\share'), false);
    expect(context.isRelative(r'\\server\share\path'), false);
  });

  test('isRootRelative', () {
    expect(context.isRootRelative(''), false);
    expect(context.isRootRelative('.'), false);
    expect(context.isRootRelative('..'), false);
    expect(context.isRootRelative('a'), false);
    expect(context.isRootRelative(r'a\b'), false);
    expect(context.isRootRelative(r'\a\b'), true);
    expect(context.isRootRelative(r'\'), true);
    expect(context.isRootRelative(r'/a/b'), true);
    expect(context.isRootRelative(r'/'), true);
    expect(context.isRootRelative('~'), false);
    expect(context.isRootRelative('.'), false);
    expect(context.isRootRelative(r'..\a'), false);
    expect(context.isRootRelative(r'a:/a\b'), false);
    expect(context.isRootRelative(r'D:/a/b'), false);
    expect(context.isRootRelative(r'c:\'), false);
    expect(context.isRootRelative(r'B:\'), false);
    expect(context.isRootRelative(r'c:\a'), false);
    expect(context.isRootRelative(r'C:\a'), false);
    expect(context.isRootRelative(r'\\server\share'), false);
    expect(context.isRootRelative(r'\\server\share\path'), false);
  });

  group('join', () {
    test('allows up to sixteen parts', () {
      expect(context.join('a'), 'a');
      expect(context.join('a', 'b'), r'a\b');
      expect(context.join('a', 'b', 'c'), r'a\b\c');
      expect(context.join('a', 'b', 'c', 'd'), r'a\b\c\d');
      expect(context.join('a', 'b', 'c', 'd', 'e'), r'a\b\c\d\e');
      expect(context.join('a', 'b', 'c', 'd', 'e', 'f'), r'a\b\c\d\e\f');
      expect(context.join('a', 'b', 'c', 'd', 'e', 'f', 'g'), r'a\b\c\d\e\f\g');
      expect(
        context.join('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'),
        r'a\b\c\d\e\f\g\h',
      );
      expect(
        context.join('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'),
        r'a\b\c\d\e\f\g\h\i',
      );
      expect(
        context.join('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'),
        r'a\b\c\d\e\f\g\h\i\j',
      );
      expect(
        context.join('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'),
        r'a\b\c\d\e\f\g\h\i\j\k',
      );
      expect(
        context.join(
          'a',
          'b',
          'c',
          'd',
          'e',
          'f',
          'g',
          'h',
          'i',
          'j',
          'k',
          'l',
        ),
        r'a\b\c\d\e\f\g\h\i\j\k\l',
      );
      expect(
        context.join(
          'a',
          'b',
          'c',
          'd',
          'e',
          'f',
          'g',
          'h',
          'i',
          'j',
          'k',
          'l',
          'm',
        ),
        r'a\b\c\d\e\f\g\h\i\j\k\l\m',
      );
      expect(
        context.join(
          'a',
          'b',
          'c',
          'd',
          'e',
          'f',
          'g',
          'h',
          'i',
          'j',
          'k',
          'l',
          'm',
          'n',
        ),
        r'a\b\c\d\e\f\g\h\i\j\k\l\m\n',
      );
      expect(
        context.join(
          'a',
          'b',
          'c',
          'd',
          'e',
          'f',
          'g',
          'h',
          'i',
          'j',
          'k',
          'l',
          'm',
          'n',
          'o',
        ),
        r'a\b\c\d\e\f\g\h\i\j\k\l\m\n\o',
      );
      expect(
        context.join(
          'a',
          'b',
          'c',
          'd',
          'e',
          'f',
          'g',
          'h',
          'i',
          'j',
          'k',
          'l',
          'm',
          'n',
          'o',
          'p',
        ),
        r'a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p',
      );
    });

    test('does not add separator if a part ends or begins in one', () {
      expect(context.join(r'a\', 'b', r'c\', 'd'), r'a\b\c\d');
      expect(context.join('a/', 'b'), r'a/b');
    });

    test('ignores parts before an absolute path', () {
      expect(context.join('a', r'\b', r'\c', 'd'), r'\c\d');
      expect(context.join('a', '/b', '/c', 'd'), r'/c\d');
      expect(context.join('a', r'c:\b', 'c', 'd'), r'c:\b\c\d');
      expect(context.join('a', r'\\b\c', r'\\d\e', 'f'), r'\\d\e\f');
      expect(context.join('a', r'c:\b', r'\c', 'd'), r'c:\c\d');
      expect(context.join('a', r'\\b\c\d', r'\e', 'f'), r'\\b\c\e\f');
    });

    test('ignores trailing nulls', () {
      expect(context.join('a', null), equals('a'));
      expect(context.join('a', 'b', 'c', null, null), equals(r'a\b\c'));
    });

    test('ignores empty strings', () {
      expect(context.join(''), '');
      expect(context.join('', ''), '');
      expect(context.join('', 'a'), 'a');
      expect(context.join('a', '', 'b', '', '', '', 'c'), r'a\b\c');
      expect(context.join('a', 'b', ''), r'a\b');
    });

    test('disallows intermediate nulls', () {
      expect(() => context.join('a', null, 'b'), throwsArgumentError);
    });

    test('join does not modify internal ., .., or trailing separators', () {
      expect(context.join('a/', 'b/c/'), 'a/b/c/');
      expect(
        context.join(r'a\b\./c\..\\', r'd\..\.\..\\e\f\\'),
        r'a\b\./c\..\\d\..\.\..\\e\f\\',
      );
      expect(context.join(r'a\b', r'c\..\..\..\..'), r'a\b\c\..\..\..\..');
      expect(context.join(r'a', 'b${context.separator}'), r'a\b\');
    });
  });

  group('joinAll', () {
    test('allows more than sixteen parts', () {
      expect(
        context.joinAll([
          'a',
          'b',
          'c',
          'd',
          'e',
          'f',
          'g',
          'h',
          'i',
          'j',
          'k',
          'l',
          'm',
          'n',
          'o',
          'p',
          'q',
        ]),
        r'a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q',
      );
    });

    test('does not add separator if a part ends or begins in one', () {
      expect(context.joinAll([r'a\', 'b', r'c\', 'd']), r'a\b\c\d');
      expect(context.joinAll(['a/', 'b']), r'a/b');
    });

    test('ignores parts before an absolute path', () {
      expect(context.joinAll(['a', r'\b', r'\c', 'd']), r'\c\d');
      expect(context.joinAll(['a', '/b', '/c', 'd']), r'/c\d');
      expect(context.joinAll(['a', r'c:\b', 'c', 'd']), r'c:\b\c\d');
      expect(context.joinAll(['a', r'\\b\c', r'\\d\e', 'f']), r'\\d\e\f');
      expect(context.joinAll(['a', r'c:\b', r'\c', 'd']), r'c:\c\d');
      expect(context.joinAll(['a', r'\\b\c\d', r'\e', 'f']), r'\\b\c\e\f');
    });
  });

  group('split', () {
    test('simple cases', () {
      expect(context.split(''), <String>[]);
      expect(context.split('.'), ['.']);
      expect(context.split('..'), ['..']);
      expect(context.split('foo'), equals(['foo']));
      expect(context.split(r'foo\bar.txt'), equals(['foo', 'bar.txt']));
      expect(context.split(r'foo\bar/baz'), equals(['foo', 'bar', 'baz']));
      expect(
        context.split(r'foo\..\bar\.\baz'),
        equals(['foo', '..', 'bar', '.', 'baz']),
      );
      expect(context.split(r'foo\\bar\\\baz'), equals(['foo', 'bar', 'baz']));
      expect(context.split(r'foo\/\baz'), equals(['foo', 'baz']));
      expect(context.split('.'), equals(['.']));
      expect(context.split(''), equals([]));
      expect(context.split('foo/'), equals(['foo']));
      expect(context.split(r'C:\'), equals([r'C:\']));
    });

    test('includes the root for absolute paths', () {
      expect(
        context.split(r'C:\foo\bar\baz'),
        equals([r'C:\', 'foo', 'bar', 'baz']),
      );
      expect(context.split(r'C:\\'), equals([r'C:\']));

      expect(
        context.split(r'\\server\share\foo\bar\baz'),
        equals([r'\\server\share', 'foo', 'bar', 'baz']),
      );
      expect(context.split(r'\\server\share'), equals([r'\\server\share']));

      expect(
        context.split(r'\foo\bar\baz'),
        equals([r'\', 'foo', 'bar', 'baz']),
      );
      expect(context.split(r'\'), equals([r'\']));
    });
  });

  group('normalize', () {
    test('simple cases', () {
      expect(context.normalize(''), '.');
      expect(context.normalize('.'), '.');
      expect(context.normalize('..'), '..');
      expect(context.normalize('a'), 'a');
      expect(context.normalize('/a/b'), r'\a\b');
      expect(context.normalize(r'\'), r'\');
      expect(context.normalize(r'\a\b'), r'\a\b');
      expect(context.normalize('/'), r'\');
      expect(context.normalize('C:/'), r'C:\');
      expect(context.normalize(r'C:\'), r'C:\');
      expect(context.normalize(r'\\server\share'), r'\\server\share');
      expect(
        context.normalize('a\\.\\\xc5\u0bf8-;\u{1f085}\u{00}\\c\\d\\..\\'),
        'a\\\xc5\u0bf8-;\u{1f085}\u{00}\x5cc',
      );
    });

    test('collapses redundant separators', () {
      expect(context.normalize(r'a\b\c'), r'a\b\c');
      expect(context.normalize(r'a\\b\\\c\\\\d'), r'a\b\c\d');
    });

    test('eliminates "." parts', () {
      expect(context.normalize(r'.\'), '.');
      expect(context.normalize(r'c:\.'), r'c:\');
      expect(context.normalize(r'c:\foo\.'), r'c:\foo');
      expect(context.normalize(r'B:\.\'), r'B:\');
      expect(context.normalize(r'\\server\share\.'), r'\\server\share');
      expect(context.normalize(r'.\.'), '.');
      expect(context.normalize(r'a\.\b'), r'a\b');
      expect(context.normalize(r'a\.b\c'), r'a\.b\c');
      expect(context.normalize(r'a\./.\b\.\c'), r'a\b\c');
      expect(context.normalize(r'.\./a'), 'a');
      expect(context.normalize(r'a/.\.'), 'a');
      expect(context.normalize(r'\.'), r'\');
      expect(context.normalize('/.'), r'\');
    });

    test('eliminates ".." parts', () {
      expect(context.normalize('..'), '..');
      expect(context.normalize(r'..\'), '..');
      expect(context.normalize(r'..\..\..'), r'..\..\..');
      expect(context.normalize(r'../..\..\'), r'..\..\..');
      expect(context.normalize(r'\\server\share\..'), r'\\server\share');
      expect(
        context.normalize(r'\\server\share\..\../..\a'),
        r'\\server\share\a',
      );
      expect(context.normalize(r'c:\..'), r'c:\');
      expect(context.normalize(r'c:\foo\..'), r'c:\');
      expect(context.normalize(r'A:/..\..\..'), r'A:\');
      expect(context.normalize(r'b:\..\..\..\a'), r'b:\a');
      expect(context.normalize(r'b:\r\..\..\..\a\c\.\..'), r'b:\a');
      expect(context.normalize(r'a\..'), '.');
      expect(context.normalize(r'..\a'), r'..\a');
      expect(context.normalize(r'c:\..\a'), r'c:\a');
      expect(context.normalize(r'\..\a'), r'\a');
      expect(context.normalize(r'a\b\..'), 'a');
      expect(context.normalize(r'..\a\b\..'), r'..\a');
      expect(context.normalize(r'a\..\b'), 'b');
      expect(context.normalize(r'a\.\..\b'), 'b');
      expect(context.normalize(r'a\b\c\..\..\d\e\..'), r'a\d');
      expect(context.normalize(r'a\b\..\..\..\..\c'), r'..\..\c');
      expect(context.normalize(r'a/b/c/../../..d/./.e/f././'), r'a\..d\.e\f.');
    });

    test('removes trailing separators', () {
      expect(context.normalize(r'.\'), '.');
      expect(context.normalize(r'.\\'), '.');
      expect(context.normalize(r'a/'), 'a');
      expect(context.normalize(r'a\b\'), r'a\b');
      expect(context.normalize(r'a\b\\\'), r'a\b');
    });

    test('normalizes separators', () {
      expect(context.normalize(r'a/b\c'), r'a\b\c');
    });

    test('when canonicalizing', () {
      expect(context.canonicalize('.'), r'c:\root\path');
      expect(context.canonicalize('foo/bar'), r'c:\root\path\foo\bar');
      expect(context.canonicalize('FoO'), r'c:\root\path\foo');
      expect(context.canonicalize('/foo'), r'c:\foo');
      expect(context.canonicalize('D:/foo'), r'd:\foo');
    });
  });

  group('relative', () {
    group('from absolute root', () {
      test('given absolute path in root', () {
        expect(context.relative(r'C:\'), r'..\..');
        expect(context.relative(r'C:\root'), '..');
        expect(context.relative(r'\root'), '..');
        expect(context.relative(r'C:\root\path'), '.');
        expect(context.relative(r'\root\path'), '.');
        expect(context.relative(r'C:\root\path\a'), 'a');
        expect(context.relative(r'\root\path\a'), 'a');
        expect(context.relative(r'C:\root\path\a\b.txt'), r'a\b.txt');
        expect(context.relative(r'C:\root\a\b.txt'), r'..\a\b.txt');
        expect(context.relative(r'C:/'), r'..\..');
        expect(context.relative(r'C:/root'), '..');
        expect(context.relative(r'c:\'), r'..\..');
        expect(context.relative(r'c:\root'), '..');
      });

      test('given absolute path outside of root', () {
        expect(context.relative(r'C:\a\b'), r'..\..\a\b');
        expect(context.relative(r'\a\b'), r'..\..\a\b');
        expect(context.relative(r'C:\root\path\a'), 'a');
        expect(context.relative(r'C:\root\path\a\b.txt'), r'a\b.txt');
        expect(context.relative(r'C:\root\a\b.txt'), r'..\a\b.txt');
        expect(context.relative(r'C:/a/b'), r'..\..\a\b');
        expect(context.relative(r'C:/root/path/a'), 'a');
        expect(context.relative(r'c:\a\b'), r'..\..\a\b');
        expect(context.relative(r'c:\root\path\a'), 'a');
      });

      test('given absolute path on different drive', () {
        expect(context.relative(r'D:\a\b'), r'D:\a\b');
      });

      test('given relative path', () {
        // The path is considered relative to the root, so it basically just
        // normalizes.
        expect(context.relative(''), '.');
        expect(context.relative('.'), '.');
        expect(context.relative('a'), 'a');
        expect(context.relative(r'a\b.txt'), r'a\b.txt');
        expect(context.relative(r'..\a\b.txt'), r'..\a\b.txt');
        expect(context.relative(r'a\.\b\..\c.txt'), r'a\c.txt');
      });

      test('is case-insensitive', () {
        expect(context.relative(r'c:\'), r'..\..');
        expect(context.relative(r'c:\RoOt'), r'..');
        expect(context.relative(r'c:\rOoT\pAtH\a'), r'a');
      });

      // Regression
      test('from root-only path', () {
        expect(context.relative(r'C:\', from: r'C:\'), '.');
        expect(context.relative(r'C:\root\path', from: r'C:\'), r'root\path');
      });
    });

    group('from relative root', () {
      final r = path.Context(style: path.Style.windows, current: r'foo\bar');

      test('given absolute path', () {
        expect(r.relative(r'C:\'), equals(r'C:\'));
        expect(r.relative(r'C:\a\b'), equals(r'C:\a\b'));
        expect(r.relative(r'\'), equals(r'\'));
        expect(r.relative(r'\a\b'), equals(r'\a\b'));
      });

      test('given relative path', () {
        // The path is considered relative to the root, so it basically just
        // normalizes.
        expect(r.relative(''), '.');
        expect(r.relative('.'), '.');
        expect(r.relative('..'), '..');
        expect(r.relative('a'), 'a');
        expect(r.relative(r'a\b.txt'), r'a\b.txt');
        expect(r.relative(r'..\a/b.txt'), r'..\a\b.txt');
        expect(r.relative(r'a\./b\../c.txt'), r'a\c.txt');
      });
    });

    group('from root-relative root', () {
      final r = path.Context(style: path.Style.windows, current: r'\foo\bar');

      test('given absolute path', () {
        expect(r.relative(r'C:\'), equals(r'C:\'));
        expect(r.relative(r'C:\a\b'), equals(r'C:\a\b'));
        expect(r.relative(r'\'), equals(r'..\..'));
        expect(r.relative(r'\a\b'), equals(r'..\..\a\b'));
        expect(r.relative('/'), equals(r'..\..'));
        expect(r.relative('/a/b'), equals(r'..\..\a\b'));
      });

      test('given relative path', () {
        // The path is considered relative to the root, so it basically just
        // normalizes.
        expect(r.relative(''), '.');
        expect(r.relative('.'), '.');
        expect(r.relative('..'), '..');
        expect(r.relative('a'), 'a');
        expect(r.relative(r'a\b.txt'), r'a\b.txt');
        expect(r.relative(r'..\a/b.txt'), r'..\a\b.txt');
        expect(r.relative(r'a\./b\../c.txt'), r'a\c.txt');
      });
    });

    test('from a root with extension', () {
      final r = path.Context(style: path.Style.windows, current: r'C:\dir.ext');
      expect(r.relative(r'C:\dir.ext\file'), 'file');
    });

    test('with a root parameter', () {
      expect(
        context.relative(r'C:\foo\bar\baz', from: r'C:\foo\bar'),
        equals('baz'),
      );
      expect(
        context.relative('..', from: r'C:\foo\bar'),
        equals(r'..\..\root'),
      );
      expect(context.relative('..', from: r'D:\foo\bar'), equals(r'C:\root'));
      expect(
        context.relative(r'C:\foo\bar\baz', from: r'foo\bar'),
        equals(r'..\..\..\..\foo\bar\baz'),
      );
      expect(context.relative('..', from: r'foo\bar'), equals(r'..\..\..'));
    });

    test('with a root parameter and a relative root', () {
      final r = path.Context(
        style: path.Style.windows,
        current: r'relative\root',
      );
      expect(r.relative(r'C:\foo\bar\baz', from: r'C:\foo\bar'), equals('baz'));
      expect(() => r.relative('..', from: r'C:\foo\bar'), throwsPathException);
      expect(
        r.relative(r'C:\foo\bar\baz', from: r'foo\bar'),
        equals(r'C:\foo\bar\baz'),
      );
      expect(r.relative('..', from: r'foo\bar'), equals(r'..\..\..'));
    });

    test('given absolute with different root prefix', () {
      expect(context.relative(r'D:\a\b'), r'D:\a\b');
      expect(context.relative(r'\\server\share\a\b'), r'\\server\share\a\b');
    });

    test('from a . root', () {
      final r = path.Context(style: path.Style.windows, current: '.');
      expect(r.relative(r'C:\foo\bar\baz'), equals(r'C:\foo\bar\baz'));
      expect(r.relative(r'foo\bar\baz'), equals(r'foo\bar\baz'));
      expect(r.relative(r'\foo\bar\baz'), equals(r'\foo\bar\baz'));
    });
  });

  group('isWithin', () {
    test('simple cases', () {
      expect(context.isWithin(r'foo\bar', r'foo\bar'), isFalse);
      expect(context.isWithin(r'foo\bar', r'foo\bar\baz'), isTrue);
      expect(context.isWithin(r'foo\bar', r'foo\baz'), isFalse);
      expect(context.isWithin(r'foo\bar', r'..\path\foo\bar\baz'), isTrue);
      expect(context.isWithin(r'C:\', r'C:\foo\bar'), isTrue);
      expect(context.isWithin(r'C:\', r'D:\foo\bar'), isFalse);
      expect(context.isWithin(r'C:\', r'\foo\bar'), isTrue);
      expect(context.isWithin(r'C:\foo', r'\foo\bar'), isTrue);
      expect(context.isWithin(r'C:\foo', r'\bar\baz'), isFalse);
      expect(context.isWithin(r'baz', r'C:\root\path\baz\bang'), isTrue);
      expect(context.isWithin(r'baz', r'C:\root\path\bang\baz'), isFalse);
    });

    test('complex cases', () {
      expect(context.isWithin(r'foo\.\bar', r'foo\bar\baz'), isTrue);
      expect(context.isWithin(r'foo\\bar', r'foo\bar\baz'), isTrue);
      expect(context.isWithin(r'foo\qux\..\bar', r'foo\bar\baz'), isTrue);
      expect(context.isWithin(r'foo\bar', r'foo\bar\baz\..\..'), isFalse);
      expect(context.isWithin(r'foo\bar', r'foo\bar\\\'), isFalse);
      expect(context.isWithin(r'foo\.bar', r'foo\.bar\baz'), isTrue);
      expect(context.isWithin(r'foo\.\bar', r'foo\.bar\baz'), isFalse);
      expect(context.isWithin(r'foo\..bar', r'foo\..bar\baz'), isTrue);
      expect(context.isWithin(r'foo\bar', r'foo\bar\baz\..'), isFalse);
      expect(context.isWithin(r'foo\bar', r'foo\bar\baz\..\qux'), isTrue);
      expect(context.isWithin(r'C:\', 'C:/foo'), isTrue);
      expect(context.isWithin(r'C:\', r'D:\foo'), isFalse);
      expect(context.isWithin(r'C:\', r'\\foo\bar'), isFalse);
    });

    test('with root-relative paths', () {
      expect(context.isWithin(r'\foo', r'C:\foo\bar'), isTrue);
      expect(context.isWithin(r'C:\foo', r'\foo\bar'), isTrue);
      expect(context.isWithin(r'\root', r'foo\bar'), isTrue);
      expect(context.isWithin(r'foo', r'\root\path\foo\bar'), isTrue);
      expect(context.isWithin(r'\foo', r'\foo\bar'), isTrue);
    });

    test('from a relative root', () {
      final r = path.Context(style: path.Style.windows, current: r'foo\bar');
      expect(r.isWithin('.', r'a\b\c'), isTrue);
      expect(r.isWithin('.', r'..\a\b\c'), isFalse);
      expect(r.isWithin('.', r'..\..\a\foo\b\c'), isFalse);
      expect(r.isWithin(r'C:\', r'C:\baz\bang'), isTrue);
      expect(r.isWithin('.', r'C:\baz\bang'), isFalse);
    });

    test('is case-insensitive', () {
      expect(context.isWithin(r'FoO', r'fOo\bar'), isTrue);
      expect(context.isWithin(r'C:\', r'c:\foo'), isTrue);
      expect(context.isWithin(r'fOo\qux\..\BaR', r'FoO\bAr\baz'), isTrue);
    });
  });

  group('equals and hash', () {
    test('simple cases', () {
      expectEquals(context, r'foo\bar', r'foo\bar');
      expectNotEquals(context, r'foo\bar', r'foo\bar\baz');
      expectNotEquals(context, r'foo\bar', r'foo');
      expectNotEquals(context, r'foo\bar', r'foo\baz');
      expectEquals(context, r'foo\bar', r'..\path\foo\bar');
      expectEquals(context, r'D:\', r'D:\');
      expectEquals(context, r'C:\', r'..\..');
      expectEquals(context, r'baz', r'C:\root\path\baz');
    });

    test('complex cases', () {
      expectEquals(context, r'foo\.\bar', r'foo\bar');
      expectEquals(context, r'foo\\bar', r'foo\bar');
      expectEquals(context, r'foo\qux\..\bar', r'foo\bar');
      expectNotEquals(context, r'foo\qux\..\bar', r'foo\qux');
      expectNotEquals(context, r'foo\bar', r'foo\bar\baz\..\..');
      expectEquals(context, r'foo\bar', r'foo\bar\\\');
      expectEquals(context, r'foo\.bar', r'foo\.bar');
      expectNotEquals(context, r'foo\.\bar', r'foo\.bar');
      expectEquals(context, r'foo\..bar', r'foo\..bar');
      expectNotEquals(context, r'foo\..\bar', r'foo\..bar');
      expectEquals(context, r'foo\bar', r'foo\bar\baz\..');
      expectEquals(context, r'FoO\bAr', r'foo\bar');
      expectEquals(context, r'foo/\bar', r'foo\/bar');
      expectEquals(context, r'c:\', r'C:\');
      expectEquals(context, r'C:\root', r'..');
    });

    test('with root-relative paths', () {
      expectEquals(context, r'\foo', r'C:\foo');
      expectNotEquals(context, r'\foo', 'http://google.com/foo');
      expectEquals(context, r'C:\root\path\foo\bar', r'foo\bar');
    });

    test('from a relative root', () {
      final r = path.Context(style: path.Style.windows, current: r'foo\bar');
      expectEquals(r, r'a\b', r'a\b');
      expectNotEquals(r, '.', r'foo\bar');
      expectNotEquals(r, '.', r'..\a\b');
      expectEquals(r, '.', r'..\bar');
      expectEquals(r, r'C:\baz\bang', r'C:\baz\bang');
      expectNotEquals(r, r'baz\bang', r'C:\baz\bang');
    });
  });

  group('absolute', () {
    test('allows up to fifteen parts', () {
      expect(context.absolute('a'), r'C:\root\path\a');
      expect(context.absolute('a', 'b'), r'C:\root\path\a\b');
      expect(context.absolute('a', 'b', 'c'), r'C:\root\path\a\b\c');
      expect(context.absolute('a', 'b', 'c', 'd'), r'C:\root\path\a\b\c\d');
      expect(
        context.absolute('a', 'b', 'c', 'd', 'e'),
        r'C:\root\path\a\b\c\d\e',
      );
      expect(
        context.absolute('a', 'b', 'c', 'd', 'e', 'f'),
        r'C:\root\path\a\b\c\d\e\f',
      );
      expect(
        context.absolute('a', 'b', 'c', 'd', 'e', 'f', 'g'),
        r'C:\root\path\a\b\c\d\e\f\g',
      );
      expect(
        context.absolute('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'),
        r'C:\root\path\a\b\c\d\e\f\g\h',
      );
      expect(
        context.absolute('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'),
        r'C:\root\path\a\b\c\d\e\f\g\h\i',
      );
      expect(
        context.absolute('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'),
        r'C:\root\path\a\b\c\d\e\f\g\h\i\j',
      );
      expect(
        context.absolute('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'),
        r'C:\root\path\a\b\c\d\e\f\g\h\i\j\k',
      );
      expect(
        context.absolute(
          'a',
          'b',
          'c',
          'd',
          'e',
          'f',
          'g',
          'h',
          'i',
          'j',
          'k',
          'l',
        ),
        r'C:\root\path\a\b\c\d\e\f\g\h\i\j\k\l',
      );
      expect(
        context.absolute(
          'a',
          'b',
          'c',
          'd',
          'e',
          'f',
          'g',
          'h',
          'i',
          'j',
          'k',
          'l',
          'm',
        ),
        r'C:\root\path\a\b\c\d\e\f\g\h\i\j\k\l\m',
      );
      expect(
        context.absolute(
          'a',
          'b',
          'c',
          'd',
          'e',
          'f',
          'g',
          'h',
          'i',
          'j',
          'k',
          'l',
          'm',
          'n',
        ),
        r'C:\root\path\a\b\c\d\e\f\g\h\i\j\k\l\m\n',
      );
      expect(
        context.absolute(
          'a',
          'b',
          'c',
          'd',
          'e',
          'f',
          'g',
          'h',
          'i',
          'j',
          'k',
          'l',
          'm',
          'n',
          'o',
        ),
        r'C:\root\path\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o',
      );
    });

    test('does not add separator if a part ends in one', () {
      expect(context.absolute(r'a\', 'b', r'c\', 'd'), r'C:\root\path\a\b\c\d');
      expect(context.absolute('a/', 'b'), r'C:\root\path\a/b');
    });

    test('ignores parts before an absolute path', () {
      expect(context.absolute('a', '/b', '/c', 'd'), r'C:\c\d');
      expect(context.absolute('a', r'\b', r'\c', 'd'), r'C:\c\d');
      expect(context.absolute('a', r'c:\b', 'c', 'd'), r'c:\b\c\d');
      expect(context.absolute('a', r'\\b\c', r'\\d\e', 'f'), r'\\d\e\f');
    });
  });

  test('withoutExtension', () {
    expect(context.withoutExtension(''), '');
    expect(context.withoutExtension('a'), 'a');
    expect(context.withoutExtension('.a'), '.a');
    expect(context.withoutExtension('a.b'), 'a');
    expect(context.withoutExtension(r'a\b.c'), r'a\b');
    expect(context.withoutExtension(r'a\b.c.d'), r'a\b.c');
    expect(context.withoutExtension(r'a\'), r'a\');
    expect(context.withoutExtension(r'a\b\'), r'a\b\');
    expect(context.withoutExtension(r'a\.'), r'a\.');
    expect(context.withoutExtension(r'a\.b'), r'a\.b');
    expect(context.withoutExtension(r'a.b\c'), r'a.b\c');
    expect(context.withoutExtension(r'a/b.c/d'), r'a/b.c/d');
    expect(context.withoutExtension(r'a\b/c'), r'a\b/c');
    expect(context.withoutExtension(r'a\b/c.d'), r'a\b/c');
    expect(context.withoutExtension(r'a.b/c'), r'a.b/c');
    expect(context.withoutExtension(r'a\b.c\'), r'a\b\');
  });

  test('setExtension', () {
    expect(context.setExtension('', '.x'), '.x');
    expect(context.setExtension('a', '.x'), 'a.x');
    expect(context.setExtension('.a', '.x'), '.a.x');
    expect(context.setExtension('a.b', '.x'), 'a.x');
    expect(context.setExtension(r'a\b.c', '.x'), r'a\b.x');
    expect(context.setExtension(r'a\b.c.d', '.x'), r'a\b.c.x');
    expect(context.setExtension(r'a\', '.x'), r'a\.x');
    expect(context.setExtension(r'a\b\', '.x'), r'a\b\.x');
    expect(context.setExtension(r'a\.', '.x'), r'a\..x');
    expect(context.setExtension(r'a\.b', '.x'), r'a\.b.x');
    expect(context.setExtension(r'a.b\c', '.x'), r'a.b\c.x');
    expect(context.setExtension(r'a/b.c/d', '.x'), r'a/b.c/d.x');
    expect(context.setExtension(r'a\b/c', '.x'), r'a\b/c.x');
    expect(context.setExtension(r'a\b/c.d', '.x'), r'a\b/c.x');
    expect(context.setExtension(r'a.b/c', '.x'), r'a.b/c.x');
    expect(context.setExtension(r'a\b.c\', '.x'), r'a\b\.x');
  });

  group('fromUri', () {
    test('with a URI', () {
      expect(
        context.fromUri(Uri.parse('file:///C:/path/to/foo')),
        r'C:\path\to\foo',
      );
      expect(
        context.fromUri(Uri.parse('file:///C%3A/path/to/foo')),
        r'C:\path\to\foo',
      );
      expect(
        context.fromUri(Uri.parse('file://server/share/path/to/foo')),
        r'\\server\share\path\to\foo',
      );
      expect(context.fromUri(Uri.parse('file:///C:/')), r'C:\');
      expect(context.fromUri(Uri.parse('file:///C%3A/')), r'C:\');
      expect(
        context.fromUri(Uri.parse('file://server/share')),
        r'\\server\share',
      );
      expect(context.fromUri(Uri.parse('foo/bar')), r'foo\bar');
      expect(context.fromUri(Uri.parse('/C:/path/to/foo')), r'C:\path\to\foo');
      expect(
        context.fromUri(Uri.parse('///C:/path/to/foo')),
        r'C:\path\to\foo',
      );
      expect(
        context.fromUri(Uri.parse('//server/share/path/to/foo')),
        r'\\server\share\path\to\foo',
      );
      expect(
        context.fromUri(Uri.parse('file:///C:/path/to/foo%23bar')),
        r'C:\path\to\foo#bar',
      );
      expect(
        context.fromUri(Uri.parse('file:///C%3A/path/to/foo%23bar')),
        r'C:\path\to\foo#bar',
      );
      expect(
        context.fromUri(Uri.parse('file://server/share/path/to/foo%23bar')),
        r'\\server\share\path\to\foo#bar',
      );
      expect(
        context.fromUri(Uri.parse('_%7B_%7D_%60_%5E_%20_%22_%25_')),
        r'_{_}_`_^_ _"_%_',
      );
      expect(context.fromUri(Uri.parse('/foo')), r'\foo');
      expect(
        () => context.fromUri(Uri.parse('https://dart.dev')),
        throwsArgumentError,
      );
    });

    test('with a string', () {
      expect(context.fromUri('file:///C:/path/to/foo'), r'C:\path\to\foo');
      expect(context.fromUri('file:///C%3A/path/to/foo'), r'C:\path\to\foo');
    });
  });

  test('toUri', () {
    expect(
      context.toUri(r'C:\path\to\foo'),
      Uri.parse('file:///C:/path/to/foo'),
    );
    expect(
      context.toUri(r'C:\path\to\foo\'),
      Uri.parse('file:///C:/path/to/foo/'),
    );
    expect(context.toUri(r'path\to\foo\'), Uri.parse('path/to/foo/'));
    expect(context.toUri(r'C:\'), Uri.parse('file:///C:/'));
    expect(context.toUri(r'\\server\share'), Uri.parse('file://server/share'));
    expect(
      context.toUri(r'\\server\share\'),
      Uri.parse('file://server/share/'),
    );
    expect(context.toUri(r'foo\bar'), Uri.parse('foo/bar'));
    expect(
      context.toUri(r'C:\path\to\foo#bar'),
      Uri.parse('file:///C:/path/to/foo%23bar'),
    );
    expect(
      context.toUri(r'\\server\share\path\to\foo#bar'),
      Uri.parse('file://server/share/path/to/foo%23bar'),
    );
    expect(
      context.toUri(r'C:\_{_}_`_^_ _"_%_'),
      Uri.parse('file:///C:/_%7B_%7D_%60_%5E_%20_%22_%25_'),
    );
    expect(
      context.toUri(r'_{_}_`_^_ _"_%_'),
      Uri.parse('_%7B_%7D_%60_%5E_%20_%22_%25_'),
    );
    expect(context.toUri(''), Uri.parse(''));
  });

  group('prettyUri', () {
    test('with a file: URI', () {
      expect(context.prettyUri('file:///C:/root/path/a/b'), r'a\b');
      expect(context.prettyUri('file:///C:/root/path/a/../b'), r'b');
      expect(
        context.prettyUri('file:///C:/other/path/a/b'),
        r'C:\other\path\a\b',
      );
      expect(
        context.prettyUri('file:///D:/root/path/a/b'),
        r'D:\root\path\a\b',
      );
      expect(context.prettyUri('file:///C:/root/other'), r'..\other');
    });

    test('with a file: URI with encoded colons', () {
      expect(context.prettyUri('file:///C%3A/root/path/a/b'), r'a\b');
      expect(context.prettyUri('file:///C%3A/root/path/a/../b'), r'b');
      expect(
        context.prettyUri('file:///C%3A/other/path/a/b'),
        r'C:\other\path\a\b',
      );
      expect(
        context.prettyUri('file:///D%3A/root/path/a/b'),
        r'D:\root\path\a\b',
      );
      expect(context.prettyUri('file:///C%3A/root/other'), r'..\other');
    });

    test('with an http: URI', () {
      expect(context.prettyUri('https://dart.dev/a/b'), 'https://dart.dev/a/b');
    });

    test('with a relative URI', () {
      expect(context.prettyUri('a/b'), r'a\b');
    });

    test('with a root-relative URI', () {
      expect(context.prettyUri('/D:/a/b'), r'D:\a\b');
    });

    test('with a Uri object', () {
      expect(context.prettyUri(Uri.parse('a/b')), r'a\b');
    });
  });

  test('driveLetterEnd', () {
    expect(driveLetterEnd('', 0), 0);
    expect(driveLetterEnd('foo.dart', 0), 0);
    expect(driveLetterEnd('@', 0), 0);

    expect(driveLetterEnd('c:', 0), 2);

    // colons
    expect(driveLetterEnd('c:/', 0), 3);
    expect(driveLetterEnd('c:/a', 0), 3);

    // escaped colons lowercase
    expect(driveLetterEnd('c%3a/', 0), 5);
    expect(driveLetterEnd('c%3a/a', 0), 5);

    // escaped colons uppercase
    expect(driveLetterEnd('c%3A/', 0), 5);
    expect(driveLetterEnd('c%3A/a', 0), 5);

    // non-drive letter
    expect(driveLetterEnd('ab:/c', 0), 0);
    expect(driveLetterEnd('ab%3a/c', 0), 0);
    expect(driveLetterEnd('ab%3A/c', 0), 0);
  });
}
