blob: 5f52ed54cbca26cd7f326cae8c05a5c6c1045c91 [file] [log] [blame]
// Copyright (c) 2013, 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.
library polymer.test.build.polyfill_injector_test;
import 'package:polymer/src/build/common.dart';
import 'package:polymer/src/build/polyfill_injector.dart';
import 'package:unittest/compact_vm_config.dart';
import 'package:unittest/unittest.dart';
import 'common.dart';
void main() {
useCompactVMConfiguration();
group('js', () => runTests());
group('dart', () => runTests(js: false));
}
void runTests({bool js: true}) {
var phases =
[[new PolyfillInjector(new TransformOptions(directlyIncludeJS: js))]];
var ext = js ? '.js' : '';
var type = js ? '' : 'type="application/dart" ';
var dartJsTag = js ? '' : DART_JS_TAG;
var async = js ? ' async=""' : '';
testPhases('no changes', phases, {
'a|web/test.html': '<!DOCTYPE html><html></html>',
}, {'a|web/test.html': '<!DOCTYPE html><html></html>',});
testPhases('no changes under lib ', phases, {
'a|lib/test.html': '<!DOCTYPE html><html><head></head><body>'
'<script type="application/dart" src="a.dart"></script>',
}, {
'a|lib/test.html': '<!DOCTYPE html><html><head></head><body>'
'<script type="application/dart" src="a.dart"></script>',
});
testPhases('with some script', phases, {
'a|web/test.html': '<!DOCTYPE html><html><head></head><body>'
'<script type="application/dart" src="a.dart"></script>',
}, {
'a|web/test.html': '<!DOCTYPE html><html><head>'
'$COMPATIBILITY_JS_TAGS'
'</head><body>'
'<script ${type}src="a.dart$ext"$async></script>'
'$dartJsTag'
'</body></html>',
});
testPhases('interop/shadow dom already present', phases, {
'a|web/test.html': '<!DOCTYPE html><html><head>'
'$COMPATIBILITY_JS_TAGS'
'</head><body>'
'<script type="application/dart" src="a.dart"></script>'
'$dartJsTag'
}, {
'a|web/test.html': '<!DOCTYPE html><html><head>'
'$COMPATIBILITY_JS_TAGS'
'</head><body>'
'<script ${type}src="a.dart$ext"$async></script>'
'$dartJsTag'
'</body></html>',
});
testPhases('dart_support.js after webcomponents.js, web_components present',
phases, {
'a|web/test.html': '<!DOCTYPE html><html><head>'
'$WEB_COMPONENTS_JS_TAG'
'</head><body>'
'<script type="application/dart" src="a.dart"></script>'
'$dartJsTag'
}, {
'a|web/test.html': '<!DOCTYPE html><html><head>'
'$COMPATIBILITY_JS_TAGS'
'</head><body>'
'<script ${type}src="a.dart$ext"$async></script>'
'$dartJsTag'
'</body></html>',
});
testPhases('dart_support.js after webcomponents.js, dart_support present',
phases, {
'a|web/test.html': '<!DOCTYPE html><html><head>'
'$DART_SUPPORT_TAG'
'</head><body>'
'<script type="application/dart" src="a.dart"></script>'
'$dartJsTag'
}, {
'a|web/test.html': '<!DOCTYPE html><html><head>'
'$COMPATIBILITY_JS_TAGS'
'</head><body>'
'<script ${type}src="a.dart$ext"$async></script>'
'$dartJsTag'
'</body></html>',
});
testPhases('polyfills after base tags', phases, {
'a|web/test.html': '<!DOCTYPE html><html><head>'
'<base href="/">'
'</head><body>'
'<script type="application/dart" src="a.dart"></script>'
'$dartJsTag'
}, {
'a|web/test.html': '<!DOCTYPE html><html><head>'
'<base href="/">'
'$COMPATIBILITY_JS_TAGS'
'</head><body>'
'<script ${type}src="a.dart$ext"$async></script>'
'$dartJsTag'
'</body></html>',
});
testPhases('platform.js -> webcomponents.js', phases, {
'a|web/test.html': '<!DOCTYPE html><html><head>'
'$PLATFORM_JS_TAG'
'</head><body>'
'<script type="application/dart" src="a.dart"></script>'
'$dartJsTag'
}, {
'a|web/test.html': '<!DOCTYPE html><html><head>'
'$COMPATIBILITY_JS_TAGS'
'</head><body>'
'<script ${type}src="a.dart$ext"$async></script>'
'$dartJsTag'
'</body></html>',
});
testPhases('in subfolder', phases, {
'a|web/sub/test.html': '<!DOCTYPE html><html><head></head><body>'
'<script type="application/dart" src="a.dart"></script>',
}, {
'a|web/sub/test.html': '<!DOCTYPE html><html><head>'
'${COMPATIBILITY_JS_TAGS.replaceAll('packages', '../packages')}'
'</head><body>'
'<script ${type}src="a.dart$ext"$async></script>'
'$dartJsTag'
'</body></html>',
});
var noWebComponentsPhases = [
[
new PolyfillInjector(new TransformOptions(
directlyIncludeJS: js, injectWebComponentsJs: false))
]
];
testPhases('with no webcomponents.js', noWebComponentsPhases, {
'a|web/test.html': '<!DOCTYPE html><html><head></head><body>'
'<script type="application/dart" src="a.dart"></script>',
}, {
'a|web/test.html': '<!DOCTYPE html><html><head>'
'$DART_SUPPORT_TAG'
'</head><body>'
'<script ${type}src="a.dart$ext"$async></script>'
'$dartJsTag'
'</body></html>',
});
}