| // 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. |
| |
| // Regression test for http://dartbug.com/23127 |
| // Tests super calls to a custom element upgrade constructor with various |
| // combinations of parameters and type arguments. |
| |
| library custom_elements_23127_test; |
| |
| import 'dart:async'; |
| import 'dart:html'; |
| import 'package:async_helper/async_minitest.dart'; |
| import 'utils.dart'; |
| |
| abstract class B1 extends HtmlElement { |
| void action(); |
| |
| B1.created() : super.created() { |
| action(); |
| } |
| } |
| |
| abstract class B1T<T> extends HtmlElement { |
| void action(); |
| var qq = false; |
| B1T.created() : super.created() { |
| action(); |
| qq = this is T; |
| } |
| } |
| |
| abstract class B2 extends HtmlElement { |
| void action(); |
| var qq; |
| B2.created([a = 1, b = 2, c = 3]) |
| : qq = callTwice(() => ++a * ++b), // [a] and [b] are boxed. |
| super.created() { |
| action(); |
| qq = [qq, a, b, c]; |
| } |
| } |
| |
| abstract class B2T<T> extends HtmlElement { |
| void action(); |
| var qq; |
| B2T.created([a = 1, b = 2, c = 3]) |
| : qq = callTwice(() => ++a * ++b), |
| super.created() { |
| action(); |
| qq = [this is T, qq, a, b, c]; |
| } |
| } |
| |
| class C1 extends B1 { |
| int z = 0; |
| C1.created() : super.created(); |
| action() { |
| z = 3; |
| } |
| } |
| |
| class C1T extends B1T { |
| int z = 0; |
| C1T.created() : super.created(); |
| action() { |
| z = 3; |
| } |
| } |
| |
| class C2 extends B2 { |
| int z = 0; |
| C2.created() : super.created(20); |
| action() { |
| z = 3; |
| } |
| } |
| |
| class C2T extends B2T { |
| int z = 0; |
| C2T.created() : super.created(20); |
| action() { |
| z = 3; |
| } |
| } |
| |
| var callTwice; |
| |
| main() async { |
| await customElementsReady; |
| |
| callTwice = (f) { |
| f(); |
| return f(); |
| }; |
| |
| group('baseline', () { |
| test('C1', () { |
| document.register('x-c1', C1); |
| C1 e = document.createElement('x-c1') as C1; |
| expect(e.z, 3); |
| }); |
| }); |
| |
| group('c1t', () { |
| test('C1T', () { |
| document.register('x-c1t', C1T); |
| C1T e = document.createElement('x-c1t') as C1T; |
| expect(e.z, 3); |
| expect(e.qq, true); |
| }); |
| }); |
| |
| group('c2', () { |
| test('C2', () { |
| document.register('x-c2', C2); |
| C2 e = document.createElement('x-c2') as C2; |
| expect(e.z, 3); |
| expect(e.qq, [88, 22, 4, 3]); |
| }); |
| }); |
| |
| group('c2t', () { |
| test('C2T', () { |
| document.register('x-c2t', C2T); |
| C2T e = document.createElement('x-c2t') as C2T; |
| expect(e.z, 3); |
| expect(e.qq, [true, 88, 22, 4, 3]); |
| }); |
| }); |
| } |