dart-sdk/tests/html/custom_elements_23127_test.dart
sra@google.com e360f87504 Fix order of parameters in intercepted generative constructor body.
When the receiver parameter is inserted at the front of the parameter list, some parameters may have already been inserted and others will be inserted later.
If none have already been inserted, then the subsequent parameters were being inserted in front of the receiver parameter. This is fixed by marking the receiver as the lastAddedParameter if it is the only one. This did not seem to affect 'this', presumably because the position of 'this' is immaterial since it is always removed from the JS function parameters.

R=sigmund@google.com

Review URL: https://codereview.chromium.org//1066303002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45048 260f80e4-7a28-3924-810f-c04153c831b5
2015-04-10 03:18:05 +00:00

127 lines
2.5 KiB
Dart

// 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:unittest/html_individual_config.dart';
import 'package:unittest/unittest.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;
C1.created() : super.created();
action() => z = 3;
}
class C1T extends B1T {
int z;
C1T.created() : super.created();
action() => z = 3;
}
class C2 extends B2 {
int z;
C2.created() : super.created(20);
action() => z = 3;
}
class C2T extends B2T {
int z;
C2T.created() : super.created(20);
action() => z = 3;
}
var callTwice;
main() {
useHtmlIndividualConfiguration();
setUp(() => customElementsReady);
callTwice = (f) { f(); return f(); };
group('baseline', () {
test('C1', () {
document.register('x-c1', C1);
C1 e = document.createElement('x-c1');
expect(e.z, 3);
});
});
group('c1t', () {
test('C1T', () {
document.register('x-c1t', C1T);
C1T e = document.createElement('x-c1t');
expect(e.z, 3);
expect(e.qq, true);
});
});
group('c2', () {
test('C2', () {
document.register('x-c2', C2);
C2 e = document.createElement('x-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');
expect(e.z, 3);
expect(e.qq, [true, 88, 22, 4, 3]);
});
});
}