| Index: tests/compiler/dart2js/private_test.dart
|
| diff --git a/tests/compiler/dart2js/private_test.dart b/tests/compiler/dart2js/private_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3390c9f2ae8336c7cd39aa82c164216c1ad35434
|
| --- /dev/null
|
| +++ b/tests/compiler/dart2js/private_test.dart
|
| @@ -0,0 +1,165 @@
|
| +// Copyright (c) 2012, 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 'mock_compiler.dart';
|
| +
|
| +import '../../../sdk/lib/_internal/compiler/implementation/source_file.dart';
|
| +import '../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart'
|
| + hide SourceString;
|
| +
|
| +const String PRIVATE_SOURCE_URI = 'src:private';
|
| +const String PRIVATE_SOURCE = '''
|
| +
|
| +var _privateVariable;
|
| +void _privateFunction() {}
|
| +
|
| +class _PrivateClass {
|
| + _PrivateClass();
|
| + _PrivateClass.publicConstructor();
|
| + _PrivateClass._privateConstructor();
|
| +
|
| + var _privateField;
|
| + get _privateGetter => null;
|
| + void set _privateSetter(var value) {}
|
| + void _privateMethod() {}
|
| +
|
| + var publicField;
|
| + get publicGetter => null;
|
| + void set publicSetter(var value) {}
|
| + void publicMethod() {}
|
| +}
|
| +
|
| +class PublicClass extends _PrivateClass {
|
| + PublicClass() : super();
|
| + PublicClass.publicConstructor() : super.publicConstructor();
|
| + PublicClass._privateConstructor() : super._privateConstructor();
|
| +
|
| + _PrivateClass get private => this;
|
| +}
|
| +''';
|
| +
|
| +
|
| +void analyze(String text, [expectedWarnings]) {
|
| + if (expectedWarnings == null) expectedWarnings = [];
|
| + if (expectedWarnings is !List) expectedWarnings = [expectedWarnings];
|
| +
|
| + MockCompiler compiler = new MockCompiler(analyzeOnly: true);
|
| + compiler.registerSource(Uri.parse(PRIVATE_SOURCE_URI), PRIVATE_SOURCE);
|
| + compiler.diagnosticHandler = (uri, int begin, int end, String message, kind) {
|
| + SourceFile sourceFile = compiler.sourceFiles[uri.toString()];
|
| + if (sourceFile != null) {
|
| + print(sourceFile.getLocationMessage(message, begin, end, true, (x) => x));
|
| + } else {
|
| + print(message);
|
| + }
|
| + };
|
| +
|
| + String source = '''
|
| + library public;
|
| +
|
| + import '$PRIVATE_SOURCE_URI';
|
| +
|
| + void main() {
|
| + PublicClass publicClass;
|
| + $text
|
| + }
|
| + ''';
|
| + Uri uri = Uri.parse('src:public');
|
| + compiler.registerSource(uri, source);
|
| + compiler.runCompiler(uri);
|
| + compareWarningKinds(text, expectedWarnings, compiler.warnings);
|
| +}
|
| +
|
| +void main() {
|
| + // Read from private variable.
|
| + analyze('var value = _privateVariable;', MessageKind.CANNOT_RESOLVE);
|
| + // Write to private variable.
|
| + analyze('_privateVariable = 0;', MessageKind.CANNOT_RESOLVE);
|
| + // Access private function.
|
| + analyze('var value = _privateFunction;', MessageKind.CANNOT_RESOLVE);
|
| + // Call private function.
|
| + analyze('_privateFunction();', MessageKind.CANNOT_RESOLVE);
|
| +
|
| + // Call unnamed (public) constructor on private class.
|
| + analyze('new _PrivateClass();', MessageKind.CANNOT_RESOLVE);
|
| + // Call public constructor on private class.
|
| + analyze('new _PrivateClass.publicConstructor();', MessageKind.CANNOT_RESOLVE);
|
| + // Call private constructor on private class.
|
| + analyze('new _PrivateClass._privateConstructor();',
|
| + MessageKind.CANNOT_RESOLVE);
|
| + // Call public getter of private type.
|
| + analyze('var value = publicClass.private;');
|
| + // Read from private field on private class.
|
| + analyze('var value = publicClass.private._privateField;',
|
| + MessageKind.PRIVATE_ACCESS);
|
| + // Write to private field on private class.
|
| + analyze('publicClass.private._privateField = 0;',
|
| + MessageKind.PRIVATE_ACCESS);
|
| + // Call private getter on private class.
|
| + analyze('var value = publicClass.private._privateGetter;',
|
| + MessageKind.PRIVATE_ACCESS);
|
| + // Call private setter on private class.
|
| + analyze('publicClass.private._privateSetter = 0;',
|
| + MessageKind.PRIVATE_ACCESS);
|
| + // Access private method on private class.
|
| + analyze('var value = publicClass.private._privateMethod;',
|
| + MessageKind.PRIVATE_ACCESS);
|
| + // Call private method on private class.
|
| + analyze('publicClass.private._privateMethod();',
|
| + MessageKind.PRIVATE_ACCESS);
|
| +
|
| + // Read from public field on private class.
|
| + analyze('var value = publicClass.private.publicField;');
|
| + // Write to public field on private class.
|
| + analyze('publicClass.private.publicField = 0;');
|
| + // Call public getter on private class.
|
| + analyze('var value = publicClass.private.publicGetter;');
|
| + // Call public setter on private class.
|
| + analyze('publicClass.private.publicSetter = 0;');
|
| + // Access public method on private class.
|
| + analyze('var value = publicClass.private.publicMethod;');
|
| + // Call public method on private class.
|
| + analyze('publicClass.private.publicMethod();');
|
| +
|
| + // Call unnamed (public) constructor on public class.
|
| + analyze('publicClass = new PublicClass();');
|
| + // Call public constructor on public class.
|
| + analyze('publicClass = new PublicClass.publicConstructor();');
|
| + // Call private constructor on public class.
|
| + analyze('publicClass = new PublicClass._privateConstructor();',
|
| + MessageKind.CANNOT_FIND_CONSTRUCTOR);
|
| + // Read from private field on public class.
|
| + analyze('var value = publicClass._privateField;',
|
| + MessageKind.PRIVATE_ACCESS);
|
| + // Write to private field on public class.
|
| + analyze('publicClass._privateField = 0;',
|
| + MessageKind.PRIVATE_ACCESS);
|
| + // Call private getter on public class.
|
| + analyze('var value = publicClass._privateGetter;',
|
| + MessageKind.PRIVATE_ACCESS);
|
| + // Call private setter on public class.
|
| + analyze('publicClass._privateSetter = 0;',
|
| + MessageKind.PRIVATE_ACCESS);
|
| + // Access private method on public class.
|
| + analyze('var value = publicClass._privateMethod;',
|
| + MessageKind.PRIVATE_ACCESS);
|
| + // Call private method on public class.
|
| + analyze('publicClass._privateMethod();',
|
| + MessageKind.PRIVATE_ACCESS);
|
| +
|
| + // Read from public field on public class.
|
| + analyze('var value = publicClass.publicField;');
|
| + // Write to public field on public class.
|
| + analyze('publicClass.publicField = 0;');
|
| + // Call public getter on public class.
|
| + analyze('var value = publicClass.publicGetter;');
|
| + // Call public setter on public class.
|
| + analyze('publicClass.publicSetter = 0;');
|
| + // Access public method on public class.
|
| + analyze('var value = publicClass.publicMethod;');
|
| + // Call public method on public class.
|
| + analyze('publicClass.publicMethod();');
|
| +}
|
| +
|
|
|