Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(386)

Side by Side Diff: pkg/analyzer2dart/test/identifier_semantics_test.dart

Issue 898113002: Add sharedfrontend package (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Update status. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 'package:analyzer/analyzer.dart'; 5 import 'package:analyzer/analyzer.dart';
6 import 'package:analyzer/file_system/file_system.dart'; 6 import 'package:analyzer/file_system/file_system.dart';
7 import 'package:analyzer/file_system/memory_file_system.dart'; 7 import 'package:analyzer/file_system/memory_file_system.dart';
8 import 'package:analyzer/src/generated/element.dart'; 8 import 'package:analyzer/src/generated/element.dart';
9 import 'package:analyzer/src/generated/engine.dart'; 9 import 'package:analyzer/src/generated/engine.dart';
10 import 'package:analyzer/src/generated/sdk.dart'; 10 import 'package:analyzer/src/generated/sdk.dart';
11 import 'package:analyzer/src/generated/source.dart'; 11 import 'package:analyzer/src/generated/source.dart';
12 import 'package:analyzer/src/generated/source_io.dart'; 12 import 'package:analyzer/src/generated/source_io.dart';
13 import 'package:analyzer2dart/src/identifier_semantics.dart'; 13 import 'package:analyzer2dart/src/identifier_semantics.dart';
14 import 'package:unittest/unittest.dart'; 14 import 'package:unittest/unittest.dart';
15 import 'package:sharedfrontend/src/access_semantics.dart';
15 16
16 import 'mock_sdk.dart'; 17 import 'mock_sdk.dart';
17 18
18 main() { 19 main() {
19 test('Call function defined at top level', () { 20 test('Call function defined at top level', () {
20 Helper helper = new Helper(''' 21 Helper helper = new Helper('''
21 g() {} 22 g() {}
22 23
23 f() { 24 f() {
24 g(); 25 g();
(...skipping 2264 matching lines...) Expand 10 before | Expand all | Expand 10 after
2289 int count = 0; 2290 int count = 0;
2290 visitor.onAccess = (AstNode node, AccessSemantics semantics) { 2291 visitor.onAccess = (AstNode node, AccessSemantics semantics) {
2291 count++; 2292 count++;
2292 expect(node.toSource(), equals(expectedSource)); 2293 expect(node.toSource(), equals(expectedSource));
2293 expect(semantics.kind, equals(AccessKind.DYNAMIC)); 2294 expect(semantics.kind, equals(AccessKind.DYNAMIC));
2294 if (expectedTarget == null) { 2295 if (expectedTarget == null) {
2295 expect(semantics.target, isNull); 2296 expect(semantics.target, isNull);
2296 } else { 2297 } else {
2297 expect(semantics.target.toSource(), equals(expectedTarget)); 2298 expect(semantics.target.toSource(), equals(expectedTarget));
2298 } 2299 }
2299 expect(semantics.identifier.name, equals(expectedName)); 2300 expect(semantics.name, equals(expectedName));
2300 expect(semantics.element, isNull); 2301 expect(semantics.element, isNull);
2301 expect(semantics.classElement, isNull); 2302 expect(semantics.classElement, isNull);
2302 expect(semantics.isRead, equals(isRead)); 2303 expect(semantics.isRead, equals(isRead));
2303 expect(semantics.isWrite, equals(isWrite)); 2304 expect(semantics.isWrite, equals(isWrite));
2304 expect(semantics.isInvoke, equals(isInvoke)); 2305 expect(semantics.isInvoke, equals(isInvoke));
2305 }; 2306 };
2306 libraryElement.unit.accept(visitor); 2307 libraryElement.unit.accept(visitor);
2307 expect(count, equals(1)); 2308 expect(count, equals(1));
2308 } 2309 }
2309 2310
2310 /** 2311 /**
2311 * Verify that the node represented by [expectedSource] is classified as 2312 * Verify that the node represented by [expectedSource] is classified as
2312 * a local function invocation. 2313 * a local function invocation.
2313 */ 2314 */
2314 void checkLocalFunction(String expectedSource, String expectedName, 2315 void checkLocalFunction(String expectedSource, String expectedName,
2315 {bool isRead: false, bool isWrite: false, bool isInvoke: false}) { 2316 {bool isRead: false, bool isWrite: false, bool isInvoke: false}) {
2316 TestVisitor visitor = new TestVisitor(); 2317 TestVisitor visitor = new TestVisitor();
2317 int count = 0; 2318 int count = 0;
2318 visitor.onAccess = (AstNode node, AccessSemantics semantics) { 2319 visitor.onAccess = (AstNode node, AccessSemantics semantics) {
2319 count++; 2320 count++;
2320 expect(node.toSource(), equals(expectedSource)); 2321 expect(node.toSource(), equals(expectedSource));
2321 expect(semantics.kind, equals(AccessKind.LOCAL_FUNCTION)); 2322 expect(semantics.kind, equals(AccessKind.LOCAL_FUNCTION));
2322 expect(semantics.identifier.name, equals(expectedName)); 2323 expect(semantics.name, equals(expectedName));
2323 expect(semantics.element.displayName, equals(expectedName)); 2324 expect(displayName(semantics.element), equals(expectedName));
2324 expect(semantics.classElement, isNull); 2325 expect(semantics.classElement, isNull);
2325 expect(semantics.target, isNull); 2326 expect(semantics.target, isNull);
2326 expect(semantics.isRead, equals(isRead)); 2327 expect(semantics.isRead, equals(isRead));
2327 expect(semantics.isWrite, equals(isWrite)); 2328 expect(semantics.isWrite, equals(isWrite));
2328 expect(semantics.isInvoke, equals(isInvoke)); 2329 expect(semantics.isInvoke, equals(isInvoke));
2329 }; 2330 };
2330 libraryElement.unit.accept(visitor); 2331 libraryElement.unit.accept(visitor);
2331 expect(count, equals(1)); 2332 expect(count, equals(1));
2332 } 2333 }
2333 2334
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
2383 */ 2384 */
2384 void checkStaticField(String expectedSource, String expectedClass, 2385 void checkStaticField(String expectedSource, String expectedClass,
2385 String expectedName, {bool isRead: false, bool isWrite: false, bool isInvo ke: 2386 String expectedName, {bool isRead: false, bool isWrite: false, bool isInvo ke:
2386 false}) { 2387 false}) {
2387 TestVisitor visitor = new TestVisitor(); 2388 TestVisitor visitor = new TestVisitor();
2388 int count = 0; 2389 int count = 0;
2389 visitor.onAccess = (Expression node, AccessSemantics semantics) { 2390 visitor.onAccess = (Expression node, AccessSemantics semantics) {
2390 count++; 2391 count++;
2391 expect(node.toSource(), equals(expectedSource)); 2392 expect(node.toSource(), equals(expectedSource));
2392 expect(semantics.kind, equals(AccessKind.STATIC_FIELD)); 2393 expect(semantics.kind, equals(AccessKind.STATIC_FIELD));
2393 expect(semantics.identifier.name, equals(expectedName)); 2394 expect(semantics.name, equals(expectedName));
2394 expect(semantics.element.displayName, equals(expectedName)); 2395 expect(displayName(semantics.element), equals(expectedName));
2395 if (expectedClass == null) { 2396 if (expectedClass == null) {
2396 expect(semantics.classElement, isNull); 2397 expect(semantics.classElement, isNull);
2397 } else { 2398 } else {
2398 expect(semantics.classElement, isNotNull); 2399 expect(semantics.classElement, isNotNull);
2399 expect(semantics.classElement.displayName, equals(expectedClass)); 2400 expect(displayName(semantics.classElement), equals(expectedClass));
2400 } 2401 }
2401 expect(semantics.target, isNull); 2402 expect(semantics.target, isNull);
2402 expect(semantics.isRead, equals(isRead)); 2403 expect(semantics.isRead, equals(isRead));
2403 expect(semantics.isWrite, equals(isWrite)); 2404 expect(semantics.isWrite, equals(isWrite));
2404 expect(semantics.isInvoke, equals(isInvoke)); 2405 expect(semantics.isInvoke, equals(isInvoke));
2405 }; 2406 };
2406 libraryElement.unit.accept(visitor); 2407 libraryElement.unit.accept(visitor);
2407 expect(count, equals(1)); 2408 expect(count, equals(1));
2408 } 2409 }
2409 2410
2410 /** 2411 /**
2411 * Verify that the node represented by [expectedSource] is classified as 2412 * Verify that the node represented by [expectedSource] is classified as
2412 * a static method. 2413 * a static method.
2413 */ 2414 */
2414 void checkStaticMethod(String expectedSource, String expectedClass, 2415 void checkStaticMethod(String expectedSource, String expectedClass,
2415 String expectedName, bool defined, {bool isRead: false, bool isWrite: fals e, 2416 String expectedName, bool defined, {bool isRead: false, bool isWrite: fals e,
2416 bool isInvoke: false}) { 2417 bool isInvoke: false}) {
2417 TestVisitor visitor = new TestVisitor(); 2418 TestVisitor visitor = new TestVisitor();
2418 int count = 0; 2419 int count = 0;
2419 visitor.onAccess = (AstNode node, AccessSemantics semantics) { 2420 visitor.onAccess = (AstNode node, AccessSemantics semantics) {
2420 count++; 2421 count++;
2421 expect(node.toSource(), equals(expectedSource)); 2422 expect(node.toSource(), equals(expectedSource));
2422 expect(semantics.kind, equals(AccessKind.STATIC_METHOD)); 2423 expect(semantics.kind, equals(AccessKind.STATIC_METHOD));
2423 expect(semantics.identifier.name, equals(expectedName)); 2424 expect(semantics.name, equals(expectedName));
2424 if (expectedClass == null) { 2425 if (expectedClass == null) {
2425 expect(semantics.classElement, isNull); 2426 expect(semantics.classElement, isNull);
2426 if (defined) { 2427 if (defined) {
2427 expect(semantics.element, new isInstanceOf<FunctionElement>()); 2428 expect(semantics.element, new isInstanceOf<FunctionElement>());
2428 } 2429 }
2429 } else { 2430 } else {
2430 expect(semantics.classElement, isNotNull); 2431 expect(semantics.classElement, isNotNull);
2431 expect(semantics.classElement.displayName, equals(expectedClass)); 2432 expect(displayName(semantics.classElement), equals(expectedClass));
2432 if (defined) { 2433 if (defined) {
2433 expect(semantics.element, new isInstanceOf<MethodElement>()); 2434 expect(semantics.element, new isInstanceOf<MethodElement>());
2434 } 2435 }
2435 } 2436 }
2436 if (defined) { 2437 if (defined) {
2437 expect(semantics.element.displayName, equals(expectedName)); 2438 expect(displayName(semantics.element), equals(expectedName));
2438 } else { 2439 } else {
2439 expect(semantics.element, isNull); 2440 expect(semantics.element, isNull);
2440 } 2441 }
2441 expect(semantics.target, isNull); 2442 expect(semantics.target, isNull);
2442 expect(semantics.isRead, equals(isRead)); 2443 expect(semantics.isRead, equals(isRead));
2443 expect(semantics.isWrite, equals(isWrite)); 2444 expect(semantics.isWrite, equals(isWrite));
2444 expect(semantics.isInvoke, equals(isInvoke)); 2445 expect(semantics.isInvoke, equals(isInvoke));
2445 }; 2446 };
2446 libraryElement.unit.accept(visitor); 2447 libraryElement.unit.accept(visitor);
2447 expect(count, equals(1)); 2448 expect(count, equals(1));
2448 } 2449 }
2449 2450
2450 /** 2451 /**
2451 * Verify that the node represented by [expectedSource] is classified as 2452 * Verify that the node represented by [expectedSource] is classified as
2452 * a static property access. 2453 * a static property access.
2453 */ 2454 */
2454 void checkStaticProperty(String expectedSource, String expectedClass, 2455 void checkStaticProperty(String expectedSource, String expectedClass,
2455 String expectedName, bool defined, {bool isRead: false, bool isWrite: fals e, 2456 String expectedName, bool defined, {bool isRead: false, bool isWrite: fals e,
2456 bool isInvoke: false}) { 2457 bool isInvoke: false}) {
2457 TestVisitor visitor = new TestVisitor(); 2458 TestVisitor visitor = new TestVisitor();
2458 int count = 0; 2459 int count = 0;
2459 visitor.onAccess = (Expression node, AccessSemantics semantics) { 2460 visitor.onAccess = (Expression node, AccessSemantics semantics) {
2460 count++; 2461 count++;
2461 expect(node.toSource(), equals(expectedSource)); 2462 expect(node.toSource(), equals(expectedSource));
2462 expect(semantics.kind, equals(AccessKind.STATIC_PROPERTY)); 2463 expect(semantics.kind, equals(AccessKind.STATIC_PROPERTY));
2463 expect(semantics.identifier.name, equals(expectedName)); 2464 expect(semantics.name, equals(expectedName));
2464 if (expectedClass == null) { 2465 if (expectedClass == null) {
2465 expect(semantics.classElement, isNull); 2466 expect(semantics.classElement, isNull);
2466 } else { 2467 } else {
2467 expect(semantics.classElement, isNotNull); 2468 expect(semantics.classElement, isNotNull);
2468 expect(semantics.classElement.displayName, equals(expectedClass)); 2469 expect(displayName(semantics.classElement), equals(expectedClass));
2469 } 2470 }
2470 if (defined) { 2471 if (defined) {
2471 expect(semantics.element.displayName, equals(expectedName)); 2472 expect(displayName(semantics.element), equals(expectedName));
2472 } else { 2473 } else {
2473 expect(semantics.element, isNull); 2474 expect(semantics.element, isNull);
2474 } 2475 }
2475 expect(semantics.target, isNull); 2476 expect(semantics.target, isNull);
2476 expect(semantics.isRead, equals(isRead)); 2477 expect(semantics.isRead, equals(isRead));
2477 expect(semantics.isWrite, equals(isWrite)); 2478 expect(semantics.isWrite, equals(isWrite));
2478 expect(semantics.isInvoke, equals(isInvoke)); 2479 expect(semantics.isInvoke, equals(isInvoke));
2479 }; 2480 };
2480 libraryElement.unit.accept(visitor); 2481 libraryElement.unit.accept(visitor);
2481 expect(count, equals(1)); 2482 expect(count, equals(1));
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
2527 } 2528 }
2528 2529
2529 @override 2530 @override
2530 visitSimpleIdentifier(SimpleIdentifier node) { 2531 visitSimpleIdentifier(SimpleIdentifier node) {
2531 AccessSemantics semantics = node.accept(ACCESS_SEMANTICS_VISITOR); 2532 AccessSemantics semantics = node.accept(ACCESS_SEMANTICS_VISITOR);
2532 if (semantics != null) { 2533 if (semantics != null) {
2533 onAccess(node, semantics); 2534 onAccess(node, semantics);
2534 } 2535 }
2535 } 2536 }
2536 } 2537 }
2538
2539 // TODO(johnniwinther): Remove this when the semantics of element names have
2540 // been resolved.
2541 /// Helper methods for accessing the [displayName] method without warning.
2542 String displayName(element) => element.displayName;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698