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

Side by Side Diff: pkg/analysis_server/test/index/store/codec_test.dart

Issue 365193004: Move Index and IndexStore implementations into Engine. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 5 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
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library test.index.store.codec;
6
7 import 'package:analysis_server/src/index/store/codec.dart';
8 import 'package:analyzer/src/generated/element.dart';
9 import 'package:analyzer/src/generated/engine.dart';
10 import 'package:analyzer/src/generated/index.dart';
11 import 'package:typed_mock/typed_mock.dart';
12 import 'package:unittest/unittest.dart';
13
14 import '../../reflective_tests.dart';
15 import 'typed_mocks.dart';
16
17
18 main() {
19 groupSep = ' | ';
20 group('ContextCodec', () {
21 runReflectiveTests(_ContextCodecTest);
22 });
23 group('ElementCodec', () {
24 runReflectiveTests(_ElementCodecTest);
25 });
26 group('RelationshipCodec', () {
27 runReflectiveTests(_RelationshipCodecTest);
28 });
29 group('StringCodec', () {
30 runReflectiveTests(_StringCodecTest);
31 });
32 }
33
34
35 @ReflectiveTestCase()
36 class _ContextCodecTest {
37 ContextCodec codec = new ContextCodec();
38
39 void test_encode_decode() {
40 AnalysisContext contextA = new MockAnalysisContext('contextA');
41 AnalysisContext contextB = new MockAnalysisContext('contextB');
42 int idA = codec.encode(contextA);
43 int idB = codec.encode(contextB);
44 expect(idA, codec.encode(contextA));
45 expect(idB, codec.encode(contextB));
46 expect(codec.decode(idA), contextA);
47 expect(codec.decode(idB), contextB);
48 }
49
50 void test_remove() {
51 // encode
52 {
53 AnalysisContext context = new MockAnalysisContext('context');
54 // encode
55 int id = codec.encode(context);
56 expect(id, 0);
57 expect(codec.decode(id), context);
58 // remove
59 codec.remove(context);
60 expect(codec.decode(id), isNull);
61 }
62 // encode again
63 {
64 AnalysisContext context = new MockAnalysisContext('context');
65 // encode
66 int id = codec.encode(context);
67 expect(id, 1);
68 expect(codec.decode(id), context);
69 }
70 }
71 }
72
73
74 @ReflectiveTestCase()
75 class _ElementCodecTest {
76 ElementCodec codec;
77 AnalysisContext context = new MockAnalysisContext('context');
78 StringCodec stringCodec = new StringCodec();
79
80 void setUp() {
81 codec = new ElementCodec(stringCodec);
82 }
83
84 void test_localLocalVariable() {
85 {
86 Element element = new MockElement();
87 ElementLocation location = new ElementLocationImpl.con3(['main', 'foo@1',
88 'bar@2']);
89 when(context.getElement(location)).thenReturn(element);
90 when(element.location).thenReturn(location);
91 int id = codec.encode(element);
92 expect(codec.decode(context, id), element);
93 }
94 {
95 Element element = new MockElement();
96 ElementLocation location = new ElementLocationImpl.con3(['main', 'foo@10',
97 'bar@20']);
98 when(context.getElement(location)).thenReturn(element);
99 when(element.location).thenReturn(location);
100 int id = codec.encode(element);
101 expect(codec.decode(context, id), element);
102 }
103 // check strings, "foo" as a single string, no "foo@1" or "foo@10"
104 expect(stringCodec.nameToIndex, hasLength(3));
105 expect(stringCodec.nameToIndex, containsPair('main', 0));
106 expect(stringCodec.nameToIndex, containsPair('foo', 1));
107 expect(stringCodec.nameToIndex, containsPair('bar', 2));
108 }
109
110 void test_localVariable() {
111 {
112 Element element = new MockElement();
113 ElementLocation location = new ElementLocationImpl.con3(['main',
114 'foo@42']);
115 when(context.getElement(location)).thenReturn(element);
116 when(element.location).thenReturn(location);
117 int id = codec.encode(element);
118 expect(codec.decode(context, id), element);
119 }
120 {
121 Element element = new MockElement();
122 ElementLocation location = new ElementLocationImpl.con3(['main',
123 'foo@4200']);
124 when(context.getElement(location)).thenReturn(element);
125 when(element.location).thenReturn(location);
126 int id = codec.encode(element);
127 expect(codec.decode(context, id), element);
128 }
129 // check strings, "foo" as a single string, no "foo@42" or "foo@4200"
130 expect(stringCodec.nameToIndex, hasLength(2));
131 expect(stringCodec.nameToIndex, containsPair('main', 0));
132 expect(stringCodec.nameToIndex, containsPair('foo', 1));
133 }
134
135 void test_notLocal() {
136 Element element = new MockElement();
137 ElementLocation location = new ElementLocationImpl.con3(['foo', 'bar']);
138 when(element.location).thenReturn(location);
139 when(context.getElement(location)).thenReturn(element);
140 int id = codec.encode(element);
141 expect(codec.encode(element), id);
142 expect(codec.decode(context, id), element);
143 // check strings
144 expect(stringCodec.nameToIndex, hasLength(2));
145 expect(stringCodec.nameToIndex, containsPair('foo', 0));
146 expect(stringCodec.nameToIndex, containsPair('bar', 1));
147 }
148 }
149
150
151 @ReflectiveTestCase()
152 class _RelationshipCodecTest {
153 RelationshipCodec codec;
154 StringCodec stringCodec = new StringCodec();
155
156 void setUp() {
157 codec = new RelationshipCodec(stringCodec);
158 }
159
160 void test_all() {
161 Relationship relationship = Relationship.getRelationship('my-relationship');
162 int id = codec.encode(relationship);
163 expect(codec.decode(id), relationship);
164 }
165 }
166
167
168 @ReflectiveTestCase()
169 class _StringCodecTest {
170 StringCodec codec = new StringCodec();
171
172 void test_all() {
173 int idA = codec.encode('aaa');
174 int idB = codec.encode('bbb');
175 expect(codec.decode(idA), 'aaa');
176 expect(codec.decode(idB), 'bbb');
177 }
178 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698