// 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:test/test.dart';
import 'package:front_end/src/fasta/util/relativize.dart';

void main() {
  test('test relativeUri', () {
    void c(String expected, String base, String path, bool isWindows) {
      if (isWindows == null) {
        c(expected, base, path, true);
        c(expected, base, path, false);
        return;
      }

      test(Uri base, Uri uri) {
        String r = relativizeUri(base, uri, isWindows);
        Uri resolved = base.resolve(r);
        expect(resolved.scheme.toLowerCase(), uri.scheme.toLowerCase());
        if (isWindows) {
          expect(resolved.path.toLowerCase(), uri.path.toLowerCase());
        } else {
          expect(resolved.path, uri.path);
        }
        expect(r, expected);
      }

      test(Uri.parse('file:$base'), Uri.parse('file:$path'));

      test(Uri.parse('FILE:$base'), Uri.parse('FILE:$path'));

      test(Uri.parse('file:$base'), Uri.parse('FILE:$path'));

      test(Uri.parse('FILE:$base'), Uri.parse('file:$path'));
    }

    c('bar', '/', '/bar', null);
    c('bar', '/foo', '/bar', null);
    c('/bar', '/foo/', '/bar', null);

    c('bar', '///c:/', '///c:/bar', true);
    c('bar', '///c:/foo', '///c:/bar', true);
    c('/c:/bar', '///c:/foo/', '///c:/bar', true);

    c('BAR', '///c:/', '///c:/BAR', true);
    c('BAR', '///c:/foo', '///c:/BAR', true);
    c('/c:/BAR', '///c:/foo/', '///c:/BAR', true);

    c(
        '../sdk/lib/_internal/compiler/implementation/dart2js.dart',
        '///C:/Users/person/dart_checkout_for_stuff/dart/ReleaseIA32/dart.exe',
        '///c:/Users/person/dart_checkout_for_stuff/dart/sdk/lib/_internal/compiler/'
            'implementation/dart2js.dart',
        true);

    c('/Users/person/file.dart', '/users/person/', '/Users/person/file.dart',
        false);

    c('file.dart', '/Users/person/', '/Users/person/file.dart', null);

    c('../person/file.dart', '/Users/other/', '/Users/person/file.dart', false);

    c('/Users/person/file.dart', '/Users/other/', '/Users/person/file.dart',
        true);

    c('out.js.map', '/Users/person/out.js', '/Users/person/out.js.map', null);

    c('../person/out.js.map', '/Users/other/out.js', '/Users/person/out.js.map',
        false);

    c('/Users/person/out.js.map', '/Users/other/out.js',
        '/Users/person/out.js.map', true);

    c('out.js', '/Users/person/out.js.map', '/Users/person/out.js', null);

    c('../person/out.js', '/Users/other/out.js.map', '/Users/person/out.js',
        false);

    c('/Users/person/out.js', '/Users/other/out.js.map', '/Users/person/out.js',
        true);

    c('out.js', '/out.js.map', '/out.js', null);
  });
}
