import 'dart:io';
import 'package:dev_compiler/src/compiler/shared_command.dart';
import 'package:test/test.dart';

main(List<String> args) {
  String currentDir;
  setUpAll(() {
    currentDir = Directory.current.path.replaceAll(r'\', r'/');
    if (!currentDir.startsWith(r'/')) currentDir = "/$currentDir";
  });

  group('sourcePathToUri', () {
    test('various URL schemes', () {
      expect(sourcePathToUri("dart:io").toString(), "dart:io");
      expect(sourcePathToUri("package:expect/minitest.dart").toString(),
          "package:expect/minitest.dart");
      expect(sourcePathToUri("foobar:whatnot").toString(), "foobar:whatnot");
    });

    test('full Windows path', () {
      expect(
          sourcePathToUri("C:\\full\\windows\\path.foo", windows: true)
              .toString(),
          "file:///C:/full/windows/path.foo");
      expect(
          sourcePathToUri("C:/full/windows/path.foo", windows: true).toString(),
          "file:///C:/full/windows/path.foo");
    });

    test('relative Windows path', () {
      expect(
          sourcePathToUri("partial\\windows\\path.foo", windows: true)
              .toString(),
          "file://$currentDir/partial/windows/path.foo");
    });

    test('full unix path', () {
      expect(
          sourcePathToUri("/full/path/to/foo.bar", windows: false).toString(),
          "file:///full/path/to/foo.bar");
    });

    test('relative unix path', () {
      expect(
          sourcePathToUri("partial/path/to/foo.bar", windows: false).toString(),
          "file://$currentDir/partial/path/to/foo.bar");
    });
  });

  group('sourcePathToRelativeUri', () {
    test('various URL schemes', () {
      expect(sourcePathToRelativeUri("dart:io").toString(), "dart:io");
      expect(sourcePathToRelativeUri("package:expect/minitest.dart").toString(),
          "package:expect/minitest.dart");
      expect(sourcePathToRelativeUri("foobar:whatnot").toString(),
          "foobar:whatnot");
    });

    test('full Windows path', () {
      expect(
          sourcePathToRelativeUri("C:\\full\\windows\\path.foo", windows: true)
              .toString(),
          "file:///C:/full/windows/path.foo");
      expect(
          sourcePathToRelativeUri("C:/full/windows/path.foo", windows: true)
              .toString(),
          "file:///C:/full/windows/path.foo");
    });

    test('relative Windows path', () {
      expect(
          sourcePathToRelativeUri("partial\\windows\\path.foo", windows: true)
              .toString(),
          "partial/windows/path.foo");
    });

    test('full unix path', () {
      expect(
          sourcePathToRelativeUri("/full/path/to/foo.bar", windows: false)
              .toString(),
          "file:///full/path/to/foo.bar");
    });

    test('relative unix path', () {
      expect(
          sourcePathToRelativeUri("partial/path/to/foo.bar", windows: false)
              .toString(),
          "partial/path/to/foo.bar");
    });
  });
}
