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

Unified Diff: pkg/analysis_server/test/computer/element_test.dart

Issue 356563006: Element.fromEngine() constructor. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/test/computer/element_test.dart
diff --git a/pkg/analysis_server/test/computer/element_test.dart b/pkg/analysis_server/test/computer/element_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..16dde4e65144811f9d41148e05e06b361260d7aa
--- /dev/null
+++ b/pkg/analysis_server/test/computer/element_test.dart
@@ -0,0 +1,257 @@
+// Copyright (c) 2014, 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.
+
+library test.computer.element;
+
+import 'package:analysis_server/src/computer/element.dart';
+import 'package:analysis_server/src/constants.dart';
+import 'package:analyzer/src/generated/element.dart' as engine;
+import 'package:analyzer/src/generated/utilities_dart.dart' as engine;
+import 'package:typed_mock/typed_mock.dart';
+import 'package:unittest/unittest.dart';
+
+import '../index/store/typed_mocks.dart';
+import '../reflective_tests.dart';
+
+
+main() {
+ groupSep = ' | ';
+ group('Element', () {
+ runReflectiveTests(_ElementTest);
+ });
+ group('ElementKind', () {
+ test('toString', test_ElementKind_toString);
+ test('valueOf', test_ElementKind_valueOf);
+ test('valueOfEngine', test_ElementKind_valueOfEngine);
+ });
+}
+
+
+void test_ElementKind_toString() {
+ expect(ElementKind.CLASS.toString(), 'CLASS');
+ expect(ElementKind.COMPILATION_UNIT.toString(), 'COMPILATION_UNIT');
+}
+
+
+void test_ElementKind_valueOf() {
+ expect(ElementKind.valueOf('CLASS'), ElementKind.CLASS);
Brian Wilkerson 2014/06/25 13:50:08 Wouldn't this be better as expect(ElementKind.val
scheglov 2014/06/25 17:20:46 Done.
+ expect(ElementKind.valueOf('CLASS_TYPE_ALIAS'), ElementKind.CLASS_TYPE_ALIAS);
+ expect(ElementKind.valueOf('COMPILATION_UNIT'), ElementKind.COMPILATION_UNIT);
+ expect(ElementKind.valueOf('CONSTRUCTOR'), ElementKind.CONSTRUCTOR);
+ expect(ElementKind.valueOf('FIELD'), ElementKind.FIELD);
+ expect(ElementKind.valueOf('FUNCTION'), ElementKind.FUNCTION);
+ expect(ElementKind.valueOf('FUNCTION_TYPE_ALIAS'),
+ ElementKind.FUNCTION_TYPE_ALIAS);
+ expect(ElementKind.valueOf('GETTER'), ElementKind.GETTER);
+ expect(ElementKind.valueOf('LIBRARY'), ElementKind.LIBRARY);
+ expect(ElementKind.valueOf('METHOD'), ElementKind.METHOD);
+ expect(ElementKind.valueOf('SETTER'), ElementKind.SETTER);
+ expect(ElementKind.valueOf('TOP_LEVEL_VARIABLE'),
+ ElementKind.TOP_LEVEL_VARIABLE);
+ expect(ElementKind.valueOf('UNIT_TEST_CASE'), ElementKind.UNIT_TEST_CASE);
+ expect(ElementKind.valueOf('UNIT_TEST_GROUP'), ElementKind.UNIT_TEST_GROUP);
+ expect(ElementKind.valueOf('UNKNOWN'), ElementKind.UNKNOWN);
+ expect(ElementKind.valueOf('CLASS'), ElementKind.CLASS);
Brian Wilkerson 2014/06/25 13:50:08 Duplicate.
scheglov 2014/06/25 17:20:46 Done.
+ expect(() {
+ ElementKind.valueOf('no-such-kind');
+ }, throws);
+}
+
+
+void test_ElementKind_valueOfEngine() {
+ expect(ElementKind.valueOfEngine(engine.ElementKind.CLASS),
+ ElementKind.CLASS);
+ expect(ElementKind.valueOfEngine(engine.ElementKind.COMPILATION_UNIT),
+ ElementKind.COMPILATION_UNIT);
+ expect(ElementKind.valueOfEngine(engine.ElementKind.CONSTRUCTOR),
+ ElementKind.CONSTRUCTOR);
+ expect(ElementKind.valueOfEngine(engine.ElementKind.FIELD),
+ ElementKind.FIELD);
+ expect(ElementKind.valueOfEngine(engine.ElementKind.FUNCTION),
+ ElementKind.FUNCTION);
+ expect(ElementKind.valueOfEngine(engine.ElementKind.FUNCTION_TYPE_ALIAS),
+ ElementKind.FUNCTION_TYPE_ALIAS);
+ expect(ElementKind.valueOfEngine(engine.ElementKind.GETTER),
+ ElementKind.GETTER);
+ expect(ElementKind.valueOfEngine(engine.ElementKind.LIBRARY),
+ ElementKind.LIBRARY);
+ expect(ElementKind.valueOfEngine(engine.ElementKind.METHOD),
+ ElementKind.METHOD);
+ expect(ElementKind.valueOfEngine(engine.ElementKind.SETTER),
+ ElementKind.SETTER);
+ expect(ElementKind.valueOfEngine(engine.ElementKind.TOP_LEVEL_VARIABLE),
+ ElementKind.TOP_LEVEL_VARIABLE);
+ expect(ElementKind.valueOfEngine(engine.ElementKind.ANGULAR_COMPONENT),
+ ElementKind.UNKNOWN);
+}
+
+
+@ReflectiveTestCase()
+class _ElementTest {
+ void test_fromElement_CLASS() {
+ engine.ClassElement engineElement = new MockClassElement();
Brian Wilkerson 2014/06/25 13:50:08 Given how light-weight elements are, why not just
scheglov 2014/06/25 17:20:47 Yes, I'd like to. But ElementFactory is not a part
+ when(engineElement.kind).thenReturn(engine.ElementKind.CLASS);
+ when(engineElement.nameOffset).thenReturn(1);
+ when(engineElement.displayName).thenReturn('MyClass');
+ when(engineElement.isAbstract).thenReturn(true);
+ when(engineElement.isDeprecated).thenReturn(true);
+ when(engineElement.isPrivate).thenReturn(true);
+ // create notification Element
+ Element element = new Element.fromEngine(engineElement);
+ expect(element.kind, ElementKind.CLASS);
+ expect(element.name, 'MyClass');
+ expect(element.offset, 1);
+ expect(element.length, 'MyClass'.length);
+ expect(element.flags, Element.FLAG_ABSTRACT | Element.FLAG_DEPRECATED |
+ Element.FLAG_PRIVATE);
+ }
+
+ void test_fromElement_CONSTRUCTOR() {
+ engine.ConstructorElement engineElement = new MockConstructorElement();
+ when(engineElement.kind).thenReturn(engine.ElementKind.CONSTRUCTOR);
+ when(engineElement.nameOffset).thenReturn(1);
+ when(engineElement.displayName).thenReturn('myConstructor');
+ when(engineElement.isConst).thenReturn(true);
+ when(engineElement.isDeprecated).thenReturn(false);
+ when(engineElement.isPrivate).thenReturn(false);
+ when(engineElement.isStatic).thenReturn(false);
+ when(engineElement.parameters).thenReturn([]);
+ {
+ engine.ParameterElement a = new MockParameterElement('int a');
+ engine.ParameterElement b = new MockParameterElement('String b');
+ when(b.kind).thenReturn(engine.ParameterKind.POSITIONAL);
+ when(engineElement.parameters).thenReturn([a, b]);
+ }
+ {
+ engine.DartType returnType = new MockDartType('Map<int, String>');
+ when(engineElement.returnType).thenReturn(returnType);
+ }
+ // create notification Element
+ Element element = new Element.fromEngine(engineElement);
+ expect(element.kind, ElementKind.CONSTRUCTOR);
+ expect(element.name, 'myConstructor');
+ expect(element.offset, 1);
+ expect(element.length, 'myConstructor'.length);
+ expect(element.parameters, '(int a, [String b])');
+ expect(element.returnType, 'Map<int, String>');
+ expect(element.flags, Element.FLAG_CONST);
+ }
+
+ void test_fromElement_FIELD() {
+ engine.FieldElement engineElement = new MockFieldElement();
+ when(engineElement.kind).thenReturn(engine.ElementKind.FIELD);
+ when(engineElement.nameOffset).thenReturn(1);
+ when(engineElement.displayName).thenReturn('myField');
+ when(engineElement.isConst).thenReturn(true);
+ when(engineElement.isFinal).thenReturn(true);
+ when(engineElement.isDeprecated).thenReturn(false);
+ when(engineElement.isPrivate).thenReturn(false);
+ when(engineElement.isStatic).thenReturn(true);
+ // create notification Element
+ Element element = new Element.fromEngine(engineElement);
+ expect(element.kind, ElementKind.FIELD);
+ expect(element.name, 'myField');
+ expect(element.offset, 1);
+ expect(element.length, 'myField'.length);
+ expect(element.parameters, isNull);
+ expect(element.returnType, isNull);
+ expect(element.flags, Element.FLAG_CONST | Element.FLAG_FINAL | Element.FLAG_STATIC);
+ }
+
+ void test_fromElement_GETTER() {
+ engine.PropertyAccessorElement engineElement = new MockPropertyAccessorElement();
+ when(engineElement.kind).thenReturn(engine.ElementKind.GETTER);
+ when(engineElement.nameOffset).thenReturn(1);
+ when(engineElement.displayName).thenReturn('myGetter');
+ when(engineElement.isAbstract).thenReturn(false);
+ when(engineElement.isDeprecated).thenReturn(true);
+ when(engineElement.isPrivate).thenReturn(false);
+ when(engineElement.isStatic).thenReturn(false);
+ when(engineElement.parameters).thenReturn([]);
+ {
+ engine.DartType returnType = new MockDartType('String');
+ when(engineElement.returnType).thenReturn(returnType);
+ }
+ // create notification Element
+ Element element = new Element.fromEngine(engineElement);
+ expect(element.kind, ElementKind.GETTER);
+ expect(element.name, 'myGetter');
+ expect(element.offset, 1);
+ expect(element.length, 'myGetter'.length);
+ expect(element.parameters, '()');
+ expect(element.returnType, 'String');
+ expect(element.flags, Element.FLAG_DEPRECATED);
+ }
+
+ void test_fromElement_METHOD() {
+ engine.MethodElement engineElement = new MockMethodElement();
+ when(engineElement.kind).thenReturn(engine.ElementKind.METHOD);
+ when(engineElement.nameOffset).thenReturn(1);
+ when(engineElement.displayName).thenReturn('myMethod');
+ when(engineElement.isAbstract).thenReturn(false);
+ when(engineElement.isDeprecated).thenReturn(false);
+ when(engineElement.isPrivate).thenReturn(false);
+ when(engineElement.isStatic).thenReturn(true);
+ {
+ engine.ParameterElement a = new MockParameterElement('int a');
+ engine.ParameterElement b = new MockParameterElement('String b');
+ when(b.kind).thenReturn(engine.ParameterKind.NAMED);
+ when(engineElement.parameters).thenReturn([a, b]);
+ }
+ {
+ engine.DartType returnType = new MockDartType('List<String>');
+ when(engineElement.returnType).thenReturn(returnType);
+ }
+ // create notification Element
+ Element element = new Element.fromEngine(engineElement);
+ expect(element.kind, ElementKind.METHOD);
+ expect(element.name, 'myMethod');
+ expect(element.offset, 1);
+ expect(element.length, 'myMethod'.length);
+ expect(element.parameters, '(int a, {String b})');
+ expect(element.returnType, 'List<String>');
+ expect(element.flags, Element.FLAG_STATIC);
+ }
+
+ void test_fromJson() {
+ var flags = Element.FLAG_DEPRECATED | Element.FLAG_PRIVATE |
+ Element.FLAG_STATIC;
+ var json = {
+ KIND: 'METHOD',
+ NAME: 'my name',
+ OFFSET: 1,
+ LENGTH: 2,
+ FLAGS: flags,
+ PARAMETERS: '(int a, String b)',
+ RETURN_TYPE: 'List<String>'
+ };
+ Element element = new Element.fromJson(json);
+ expect(element.kind, ElementKind.METHOD);
+ expect(element.name, 'my name');
+ expect(element.offset, 1);
+ expect(element.length, 2);
+ expect(element.flags, flags);
+ expect(element.isAbstract, isFalse);
+ expect(element.isConst, isFalse);
+ expect(element.isDeprecated, isTrue);
+ expect(element.isFinal, isFalse);
+ expect(element.isPrivate, isTrue);
+ expect(element.isStatic, isTrue);
+ }
+
+ void test_toJson() {
+ var json = {
+ KIND: 'METHOD',
+ NAME: 'my name',
+ OFFSET: 1,
+ LENGTH: 2,
+ FLAGS: Element.FLAG_DEPRECATED | Element.FLAG_PRIVATE |
+ Element.FLAG_STATIC,
+ PARAMETERS: '(int a, String b)',
+ RETURN_TYPE: 'List<String>'
+ };
+ Element element = new Element.fromJson(json);
+ expect(element.toJson(), equals(json));
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698