// 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(''), []);
      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), null);
    expect(driveLetterEnd('foo.dart', 0), null);
    expect(driveLetterEnd('@', 0), null);

    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), null);
    expect(driveLetterEnd('ab%3a/c', 0), null);
    expect(driveLetterEnd('ab%3A/c', 0), null);
  });
}
