OLD | NEW |
| (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 } | |
OLD | NEW |