| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:async'; |
| 5 import "package:expect/expect.dart"; | 6 import "package:expect/expect.dart"; |
| 6 import "package:async_helper/async_helper.dart"; | 7 import "package:async_helper/async_helper.dart"; |
| 7 import 'mock_compiler.dart'; | 8 import 'mock_compiler.dart'; |
| 8 | 9 |
| 9 import 'package:compiler/src/io/source_file.dart'; | 10 import 'package:compiler/src/io/source_file.dart'; |
| 10 import 'package:compiler/src/dart2jslib.dart'; | 11 import 'package:compiler/src/dart2jslib.dart'; |
| 11 | 12 |
| 12 const String PRIVATE_SOURCE_URI = 'src:private'; | 13 const String PRIVATE_SOURCE_URI = 'src:private'; |
| 13 const String PRIVATE_SOURCE = ''' | 14 const String PRIVATE_SOURCE = ''' |
| 14 | 15 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 34 class PublicClass extends _PrivateClass { | 35 class PublicClass extends _PrivateClass { |
| 35 PublicClass() : super(); | 36 PublicClass() : super(); |
| 36 PublicClass.publicConstructor() : super.publicConstructor(); | 37 PublicClass.publicConstructor() : super.publicConstructor(); |
| 37 PublicClass._privateConstructor() : super._privateConstructor(); | 38 PublicClass._privateConstructor() : super._privateConstructor(); |
| 38 | 39 |
| 39 _PrivateClass get private => this; | 40 _PrivateClass get private => this; |
| 40 } | 41 } |
| 41 '''; | 42 '''; |
| 42 | 43 |
| 43 | 44 |
| 44 void analyze(String text, [expectedWarnings]) { | 45 analyze(String text, [expectedWarnings]) { |
| 45 if (expectedWarnings == null) expectedWarnings = []; | 46 return () { |
| 46 if (expectedWarnings is !List) expectedWarnings = [expectedWarnings]; | 47 if (expectedWarnings == null) expectedWarnings = []; |
| 48 if (expectedWarnings is !List) expectedWarnings = [expectedWarnings]; |
| 47 | 49 |
| 48 MockCompiler compiler = new MockCompiler.internal(analyzeOnly: true); | 50 MockCompiler compiler = new MockCompiler.internal(analyzeOnly: true); |
| 49 compiler.registerSource(Uri.parse(PRIVATE_SOURCE_URI), PRIVATE_SOURCE); | 51 compiler.registerSource(Uri.parse(PRIVATE_SOURCE_URI), PRIVATE_SOURCE); |
| 50 compiler.diagnosticHandler = (uri, int begin, int end, String message, kind) { | 52 compiler.diagnosticHandler = |
| 51 SourceFile sourceFile = compiler.sourceFiles[uri.toString()]; | 53 (uri, int begin, int end, String message, kind) { |
| 52 if (sourceFile != null) { | 54 SourceFile sourceFile = compiler.sourceFiles[uri.toString()]; |
| 53 print(sourceFile.getLocationMessage(message, begin, end)); | 55 if (sourceFile != null) { |
| 54 } else { | 56 print(sourceFile.getLocationMessage(message, begin, end)); |
| 55 print(message); | 57 } else { |
| 56 } | 58 print(message); |
| 59 } |
| 60 }; |
| 61 |
| 62 String source = ''' |
| 63 library public; |
| 64 |
| 65 import '$PRIVATE_SOURCE_URI'; |
| 66 |
| 67 void main() { |
| 68 PublicClass publicClass; |
| 69 $text |
| 70 } |
| 71 '''; |
| 72 Uri uri = Uri.parse('src:public'); |
| 73 compiler.registerSource(uri, source); |
| 74 return compiler.runCompiler(uri).then((_) { |
| 75 compareWarningKinds(text, expectedWarnings, compiler.warnings); |
| 76 }); |
| 57 }; | 77 }; |
| 58 | |
| 59 String source = ''' | |
| 60 library public; | |
| 61 | |
| 62 import '$PRIVATE_SOURCE_URI'; | |
| 63 | |
| 64 void main() { | |
| 65 PublicClass publicClass; | |
| 66 $text | |
| 67 } | |
| 68 '''; | |
| 69 Uri uri = Uri.parse('src:public'); | |
| 70 compiler.registerSource(uri, source); | |
| 71 asyncTest(() => compiler.runCompiler(uri).then((_) { | |
| 72 compareWarningKinds(text, expectedWarnings, compiler.warnings); | |
| 73 })); | |
| 74 } | 78 } |
| 75 | 79 |
| 76 void main() { | 80 void main() { |
| 77 // Read from private variable. | 81 asyncTest(() => Future.forEach([ |
| 78 analyze('var value = _privateVariable;', MessageKind.CANNOT_RESOLVE); | 82 // Read from private variable. |
| 79 // Write to private variable. | 83 analyze('var value = _privateVariable;', MessageKind.CANNOT_RESOLVE), |
| 80 analyze('_privateVariable = 0;', MessageKind.CANNOT_RESOLVE); | 84 // Write to private variable. |
| 81 // Access private function. | 85 analyze('_privateVariable = 0;', MessageKind.CANNOT_RESOLVE), |
| 82 analyze('var value = _privateFunction;', MessageKind.CANNOT_RESOLVE); | 86 // Access private function. |
| 83 // Call private function. | 87 analyze('var value = _privateFunction;', MessageKind.CANNOT_RESOLVE), |
| 84 analyze('_privateFunction();', MessageKind.CANNOT_RESOLVE); | 88 // Call private function. |
| 89 analyze('_privateFunction();', MessageKind.CANNOT_RESOLVE), |
| 85 | 90 |
| 86 // Call unnamed (public) constructor on private class. | 91 // Call unnamed (public) constructor on private class. |
| 87 analyze('new _PrivateClass();', MessageKind.CANNOT_RESOLVE); | 92 analyze('new _PrivateClass();', MessageKind.CANNOT_RESOLVE), |
| 88 // Call public constructor on private class. | 93 // Call public constructor on private class. |
| 89 analyze('new _PrivateClass.publicConstructor();', | 94 analyze('new _PrivateClass.publicConstructor();', |
| 90 MessageKind.CANNOT_RESOLVE); | 95 MessageKind.CANNOT_RESOLVE), |
| 91 // Call private constructor on private class. | 96 // Call private constructor on private class. |
| 92 analyze('new _PrivateClass._privateConstructor();', | 97 analyze('new _PrivateClass._privateConstructor();', |
| 93 MessageKind.CANNOT_RESOLVE); | 98 MessageKind.CANNOT_RESOLVE), |
| 94 // Call public getter of private type. | 99 // Call public getter of private type. |
| 95 analyze('var value = publicClass.private;'); | 100 analyze('var value = publicClass.private;'), |
| 96 // Read from private field on private class. | 101 // Read from private field on private class. |
| 97 analyze('var value = publicClass.private._privateField;', | 102 analyze('var value = publicClass.private._privateField;', |
| 98 MessageKind.PRIVATE_ACCESS); | 103 MessageKind.PRIVATE_ACCESS), |
| 99 // Write to private field on private class. | 104 // Write to private field on private class. |
| 100 analyze('publicClass.private._privateField = 0;', | 105 analyze('publicClass.private._privateField = 0;', |
| 101 MessageKind.PRIVATE_ACCESS); | 106 MessageKind.PRIVATE_ACCESS), |
| 102 // Call private getter on private class. | 107 // Call private getter on private class. |
| 103 analyze('var value = publicClass.private._privateGetter;', | 108 analyze('var value = publicClass.private._privateGetter;', |
| 104 MessageKind.PRIVATE_ACCESS); | 109 MessageKind.PRIVATE_ACCESS), |
| 105 // Call private setter on private class. | 110 // Call private setter on private class. |
| 106 analyze('publicClass.private._privateSetter = 0;', | 111 analyze('publicClass.private._privateSetter = 0;', |
| 107 MessageKind.PRIVATE_ACCESS); | 112 MessageKind.PRIVATE_ACCESS), |
| 108 // Access private method on private class. | 113 // Access private method on private class. |
| 109 analyze('var value = publicClass.private._privateMethod;', | 114 analyze('var value = publicClass.private._privateMethod;', |
| 110 MessageKind.PRIVATE_ACCESS); | 115 MessageKind.PRIVATE_ACCESS), |
| 111 // Call private method on private class. | 116 // Call private method on private class. |
| 112 analyze('publicClass.private._privateMethod();', | 117 analyze('publicClass.private._privateMethod();', |
| 113 MessageKind.PRIVATE_ACCESS); | 118 MessageKind.PRIVATE_ACCESS), |
| 114 | 119 |
| 115 // Read from public field on private class. | 120 // Read from public field on private class. |
| 116 analyze('var value = publicClass.private.publicField;'); | 121 analyze('var value = publicClass.private.publicField;'), |
| 117 // Write to public field on private class. | 122 // Write to public field on private class. |
| 118 analyze('publicClass.private.publicField = 0;'); | 123 analyze('publicClass.private.publicField = 0;'), |
| 119 // Call public getter on private class. | 124 // Call public getter on private class. |
| 120 analyze('var value = publicClass.private.publicGetter;'); | 125 analyze('var value = publicClass.private.publicGetter;'), |
| 121 // Call public setter on private class. | 126 // Call public setter on private class. |
| 122 analyze('publicClass.private.publicSetter = 0;'); | 127 analyze('publicClass.private.publicSetter = 0;'), |
| 123 // Access public method on private class. | 128 // Access public method on private class. |
| 124 analyze('var value = publicClass.private.publicMethod;'); | 129 analyze('var value = publicClass.private.publicMethod;'), |
| 125 // Call public method on private class. | 130 // Call public method on private class. |
| 126 analyze('publicClass.private.publicMethod();'); | 131 analyze('publicClass.private.publicMethod();'), |
| 127 | 132 |
| 128 // Call unnamed (public) constructor on public class. | 133 // Call unnamed (public) constructor on public class. |
| 129 analyze('publicClass = new PublicClass();'); | 134 analyze('publicClass = new PublicClass();'), |
| 130 // Call public constructor on public class. | 135 // Call public constructor on public class. |
| 131 analyze('publicClass = new PublicClass.publicConstructor();'); | 136 analyze('publicClass = new PublicClass.publicConstructor();'), |
| 132 // Call private constructor on public class. | 137 // Call private constructor on public class. |
| 133 analyze('publicClass = new PublicClass._privateConstructor();', | 138 analyze('publicClass = new PublicClass._privateConstructor();', |
| 134 MessageKind.PRIVATE_ACCESS); | 139 MessageKind.CANNOT_FIND_CONSTRUCTOR), |
| 135 // Read from private field on public class. | 140 // Read from private field on public class. |
| 136 analyze('var value = publicClass._privateField;', | 141 analyze('var value = publicClass._privateField;', |
| 137 MessageKind.PRIVATE_ACCESS); | 142 MessageKind.PRIVATE_ACCESS), |
| 138 // Write to private field on public class. | 143 // Write to private field on public class. |
| 139 analyze('publicClass._privateField = 0;', | 144 analyze('publicClass._privateField = 0;', |
| 140 MessageKind.PRIVATE_ACCESS); | 145 MessageKind.PRIVATE_ACCESS), |
| 141 // Call private getter on public class. | 146 // Call private getter on public class. |
| 142 analyze('var value = publicClass._privateGetter;', | 147 analyze('var value = publicClass._privateGetter;', |
| 143 MessageKind.PRIVATE_ACCESS); | 148 MessageKind.PRIVATE_ACCESS), |
| 144 // Call private setter on public class. | 149 // Call private setter on public class. |
| 145 analyze('publicClass._privateSetter = 0;', | 150 analyze('publicClass._privateSetter = 0;', |
| 146 MessageKind.PRIVATE_ACCESS); | 151 MessageKind.PRIVATE_ACCESS), |
| 147 // Access private method on public class. | 152 // Access private method on public class. |
| 148 analyze('var value = publicClass._privateMethod;', | 153 analyze('var value = publicClass._privateMethod;', |
| 149 MessageKind.PRIVATE_ACCESS); | 154 MessageKind.PRIVATE_ACCESS), |
| 150 // Call private method on public class. | 155 // Call private method on public class. |
| 151 analyze('publicClass._privateMethod();', | 156 analyze('publicClass._privateMethod();', |
| 152 MessageKind.PRIVATE_ACCESS); | 157 MessageKind.PRIVATE_ACCESS), |
| 153 | 158 |
| 154 // Read from public field on public class. | 159 // Read from public field on public class. |
| 155 analyze('var value = publicClass.publicField;'); | 160 analyze('var value = publicClass.publicField;'), |
| 156 // Write to public field on public class. | 161 // Write to public field on public class. |
| 157 analyze('publicClass.publicField = 0;'); | 162 analyze('publicClass.publicField = 0;'), |
| 158 // Call public getter on public class. | 163 // Call public getter on public class. |
| 159 analyze('var value = publicClass.publicGetter;'); | 164 analyze('var value = publicClass.publicGetter;'), |
| 160 // Call public setter on public class. | 165 // Call public setter on public class. |
| 161 analyze('publicClass.publicSetter = 0;'); | 166 analyze('publicClass.publicSetter = 0;'), |
| 162 // Access public method on public class. | 167 // Access public method on public class. |
| 163 analyze('var value = publicClass.publicMethod;'); | 168 analyze('var value = publicClass.publicMethod;'), |
| 164 // Call public method on public class. | 169 // Call public method on public class. |
| 165 analyze('publicClass.publicMethod();'); | 170 analyze('publicClass.publicMethod();'), |
| 171 ], (f) => f())); |
| 166 } | 172 } |
| 167 | 173 |
| OLD | NEW |