// Copyright (c) 2015, 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.
@TestOn('vm')
library web_components.test.build.test_compatibility_test;

import 'package:transformer_test/utils.dart';
import 'package:web_components/build/test_compatibility.dart';
import 'package:test/test.dart';

var start = new RewriteXDartTestToScript(null);
var end = new RewriteScriptToXDartTest(null);

main() {
  testPhases('can rewrite x-dart-test link tags to script tags', [[start]], {
    'a|test/index.html': '''
        <!DOCTYPE html>
        <html>
          <head>
            <link rel="x-dart-test" href="foo.dart">
          </head>
          <body></body>
        </html>''',
  }, {
    'a|test/index.html': '''
        <!DOCTYPE html>
        <html>
          <head>
            <script type="application/dart" src="foo.dart" $testAttribute="">
            </script>
          </head>
          <body></body>
        </html>''',
  }, messages: [], formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);

  testPhases('can rewrite script tags to x-dart-test link tags', [[end]], {
    'a|test/index.html': '''
        <!DOCTYPE html>
        <html>
          <head>
            <script type="application/dart" src="foo.dart" $testAttribute="">
            </script>
          </head>
          <body></body>
        </html>''',
  }, {
    'a|test/index.html': '''
        <!DOCTYPE html>
        <html>
          <head>
            <link rel="x-dart-test" href="foo.dart">
          </head>
          <body></body>
        </html>''',
  }, messages: [], formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);

  testPhases('restores original application at the end', [[start], [end]], {
    'a|test/index.html': '''
        <!DOCTYPE html>
        <html>
          <head>
            <link rel="x-dart-test" href="foo.dart">
          </head>
          <body></body>
        </html>''',
  }, {
    'a|test/index.html': '''
        <!DOCTYPE html>
        <html>
          <head>
            <link rel="x-dart-test" href="foo.dart">
          </head>
          <body></body>
        </html>''',
  }, messages: [], formatter: StringFormatter.noNewlinesOrSurroundingWhitespace);
}
