Files
Nate Bosch 2ffdc54d24 Handle exported extensions in dill library builder
- Add a modular test to demonstrate the bug.
- Handle `Extension` nodes in `finalizeExports`.

Change-Id: Ie16f0c97059d24a122150a607e26fba258d80cfb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/120926
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Nate Bosch <nbosch@google.com>
2019-10-09 18:48:54 +00:00

59 lines
1.9 KiB
Dart

// Copyright (c) 2019, 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:expect/expect.dart';
import 'def2.dart';
main() {
testExplicitAccess(new Class(42));
testImplicitAccess(new Class(87));
testStaticAccess();
testExplicitGenericAccess(new GenericClass<String>('foo'), 'bar');
testImplicitGenericAccess(new GenericClass<String>('baz'), 'boz');
}
testExplicitAccess(Class c) {
Expect.equals(c.field, Extension(c).method());
Expect.equals(c.field, Extension(c).property);
Expect.equals(123, Extension(c).property = 123);
var f = Extension(c).method;
Expect.equals(c.field, f());
}
testImplicitAccess(Class c) {
Expect.equals(c.field, c.method());
Expect.equals(42, c.methodWithOptionals());
Expect.equals(123, c.methodWithOptionals(123));
Expect.equals(c.field, c.property);
Expect.equals(123, c.property = 123);
var f = c.method;
Expect.equals(c.field, f());
var f2 = c.methodWithOptionals;
Expect.equals(42, f2());
Expect.equals(87, f2(87));
}
testStaticAccess() {
Expect.equals(Extension.staticField, Extension.staticMethod());
Expect.equals(Extension.staticField, Extension.staticProperty);
Expect.equals(123, Extension.staticProperty = 123);
}
testExplicitGenericAccess<T>(GenericClass<T> c, T value) {
Expect.equals(c.field, GenericExtension<T>(c).method());
Expect.equals(c.field, GenericExtension<T>(c).property);
Expect.equals(value, GenericExtension<T>(c).property = value);
var f = GenericExtension<T>(c).method;
Expect.equals(c.field, f());
}
testImplicitGenericAccess<T>(GenericClass<T> c, T value) {
Expect.equals(c.field, c.method());
Expect.equals(c.field, c.property);
Expect.equals(value, c.property = value);
var f = c.method;
Expect.equals(c.field, f());
}