Skip to content

Commit 6f053fc

Browse files
committed
chore(dartanalyzer): run dartanalyzer before tests
1 parent e93118b commit 6f053fc

27 files changed

+158
-322
lines changed

.gitignore

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
.idea
2-
packages
3-
node_modules
42
.project
3+
node_modules
4+
packages
55
docs
66
test_out
77
gen
8+
tmp

analyze.sh

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/sh
2+
3+
# OS-specific Dartium path defaults
4+
case $( uname -s ) in
5+
Darwin)
6+
DART_SDK=/Applications/dart/dart-sdk
7+
esac
8+
9+
10+
11+
OUT=tmp/all.dart
12+
mkdir -p tmp
13+
14+
echo // generated file > $OUT
15+
16+
for FILE in $(ls lib/angular.dart perf/*_perf.dart test/*_spec.dart test/*/*_spec.dart)
17+
do
18+
echo import \'../$FILE\'\; >> $OUT
19+
done
20+
21+
./generate.sh && $DART_SDK/bin/dartanalyzer $OUT

generate.sh

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
#!/bin/sh
22

3-
cp test/parser/generated_functions.dart gen/generated_functions.dart
3+
mkdir -p gen
4+
5+
cat test/parser/generated_functions.dart | sed -e 's/_template;/_generated;/' | grep -v REMOVE > gen/generated_functions.dart
46
dart bin/parser_generator_for_spec.dart >> gen/generated_functions.dart
57

6-
cp test/parser/generated_getter_setter.dart gen/generated_getter_setter.dart
8+
cat test/parser/generated_getter_setter.dart | sed -e 's/_template;/_generated;/' | grep -v REMOVE > gen/generated_getter_setter.dart
79
dart bin/parser_generator_for_spec.dart getter_setter >> gen/generated_getter_setter.dart

karma-parser-generator/preprocessor.js

+3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ var generateParser = function(logger) {
1212

1313
exec('dart --checked bin/parser_generator_for_spec.dart', function(err, stdout, stderr) {
1414
if (err) throw err;
15+
data = data.toString();
16+
data = data.replace(/^.* \/\/ REMOVE$/m, '');
17+
data = data.replace(/_template;/, '_generated;');
1518
done(data + '\n\n' + stdout);
1619
});
1720
});

karma-parser-getter-setter/preprocessor.js

+3
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ var generateParser = function(logger) {
1414
'dart --checked bin/parser_generator_for_spec.dart getter-setter',
1515
function(err, stdout, stderr) {
1616
if (err) throw err;
17+
data = data.toString();
18+
data = data.replace(/^.* \/\/ REMOVE$/m, '');
19+
data = data.replace(/_template;/, '_generated;');
1720
done(data + '\n\n' + stdout);
1821
});
1922
});

lib/mock/http_backend.dart

+62-3
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,75 @@ class MockHttpData {
1515
* Mock implementation of the [HttpRequest] object returned from the HttpBackend.
1616
*/
1717
class MockHttpRequest implements HttpRequest {
18-
int status;
19-
String response;
18+
final bool supportsCrossOrigin = false;
19+
final bool supportsLoadEndEvent = false;
20+
final bool supportsOverrideMimeType = false;
21+
final bool supportsProgressEvent = false;
22+
final Events on = null;
23+
24+
final Stream<ProgressEvent> onAbort = null;
25+
final Stream<ProgressEvent> onError = null;
26+
final Stream<ProgressEvent> onLoad = null;
27+
final Stream<ProgressEvent> onLoadEnd = null;
28+
final Stream<ProgressEvent> onLoadStart = null;
29+
final Stream<ProgressEvent> onProgress = null;
30+
final Stream<ProgressEvent> onReadyStateChange = null;
31+
32+
final Stream<ProgressEvent> onTimeout = null;
33+
final int readyState = 0;
34+
35+
final responseText = null;
36+
final responseXml = null;
37+
final String statusText = null;
38+
final HttpRequestUpload upload = null;
39+
40+
String responseType = null;
41+
int timeout = 0;
42+
bool withCredentials;
43+
44+
final int status;
45+
final response;
2046

2147
MockHttpRequest(int this.status, String this.response);
48+
49+
void abort() {}
50+
bool dispatchEvent(Event event) => false;
51+
String getAllResponseHeaders() => null;
52+
String getResponseHeader(String header) => null;
53+
54+
void open(String method, String url, {bool async, String user, String password}) {}
55+
void overrideMimeType(String override) {}
56+
void send([data]) {}
57+
void setRequestHeader(String header, String value) {}
58+
void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) {}
59+
void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) {}
2260
}
2361

2462
class MockHttpRequestProgressEvent implements HttpRequestProgressEvent {
25-
MockHttpRequest currentTarget;
63+
final bool bubbles = false;
64+
final bool cancelable = false;
65+
final DataTransfer clipboardData = null;
66+
final EventTarget currentTarget;
67+
final bool defaultPrevented = false;
68+
final int eventPhase = 0;
69+
final bool lengthComputable = false;
70+
final int loaded = 0;
71+
final List<Node> path = null;
72+
final int position = 0;
73+
final Type runtimeType = null;
74+
final EventTarget target = null;
75+
final int timeStamp = 0;
76+
final int total = 0;
77+
final int totalSize = 0;
78+
final String type = null;
79+
80+
bool cancelBubble = false;
2681

2782
MockHttpRequestProgressEvent(MockHttpRequest this.currentTarget);
83+
84+
void preventDefault() {}
85+
void stopImmediatePropagation() {}
86+
void stopPropagation() {}
2887
}
2988

3089

lib/parser/parser_library.dart

+1
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ part 'static_parser.dart';
1414
// The parser you are looking for is DynamicParser
1515
abstract class Parser {
1616
call(String text) {}
17+
primaryFromToken(Token token, parserError);
1718
}

lib/parser/static_parser.dart

+4
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,8 @@ class StaticParser implements Parser {
2323
}
2424
return _functions[exp];
2525
}
26+
27+
primaryFromToken(Token token, parserError) {
28+
throw 'Not Implemented';
29+
}
2630
}

lib/scope.dart

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ library angular.core.service.scope;
22

33
import 'dart:mirrors';
44
import 'dart:json';
5+
import 'package:meta/meta.dart';
56
import 'package:perf_api/perf_api.dart';
67

78
import 'exception_handler.dart';
@@ -46,6 +47,7 @@ class ScopeDigestTTL {
4647
* to keep references to the model so that they are available for
4748
* data-binding.
4849
*/
50+
@proxy
4951
class Scope implements Map {
5052
String $id;
5153
Scope $parent;

lib/tools/parser_generator/generator.dart

+3
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ class ParserGenerator {
77
DynamicParser _parser;
88
NestedPrinter _p;
99
List<String> _expressions;
10+
Map<String, boolean> _printedFunctions = {};
1011
GetterSetterGenerator _getters;
1112

1213
ParserGenerator(DynamicParser this._parser, NestedPrinter this._p,
@@ -40,6 +41,8 @@ class ParserGenerator {
4041
Code VALUE_CODE = new Code("value");
4142

4243
_printFunction(String exp) {
44+
if (_printedFunctions.containsKey(exp)) return;
45+
_printedFunctions[exp] = true;
4346
Code codeExpression = safeCode(exp);
4447

4548
_p('\'${escape(exp)}\': new Expression(');

perf/inovoke_perf.dart

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
library angular.perf.invoke;
2+
13
import '_perf.dart';
24
import 'dart:async';
35

pubspec.yaml

+6-5
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ name: angular
22
description: Angular for dart.
33

44
dependencies:
5-
unittest: any
5+
analyzer_experimental: any
66
browser: any
7-
js: any
87
di: any
9-
perf_api: any
10-
intl: any
118
html5lib: any
12-
analyzer_experimental: any
9+
intl: any
10+
js: any
11+
meta: any
12+
perf_api: any
13+
unittest: any

run-test.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ if [ ! -e "$KARMA_PATH" ]; then
2727
npm install
2828
fi
2929

30-
node "$KARMA_PATH" start karma.conf \
30+
./analyze.sh && node "$KARMA_PATH" start karma.conf \
3131
--reporters=junit,dots --port=8765 --runner-port=8766 \
3232
--browsers=ChromeCanary --single-run --no-colors --no-color
3333

test/angular_spec.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ main() {
77
describe('angular.dart unittests', () {
88
it('should run in checked moded only', () {
99
expect(() {
10-
String s = 6;
10+
dynamic v = 6;
11+
String s = v;
1112
}).toThrow();
1213
});
1314
});

test/cache_spec.dart

-154
Original file line numberDiff line numberDiff line change
@@ -67,158 +67,4 @@ main() => describe('CacheFactory', () {
6767

6868

6969
});
70-
71-
72-
xdescribe('LRU cache', () {
73-
74-
it('should create cache with defined capacity', inject(() {
75-
cache = $cacheFactory('cache1', {'capacity': 5});
76-
expect(cache.info().size).toBe(0);
77-
78-
for (var i=0; i<5; i++) {
79-
cache.put('id' + i, i);
80-
}
81-
82-
expect(cache.info().size).toBe(5);
83-
84-
cache.put('id5', 5);
85-
expect(cache.info().size).toBe(5);
86-
cache.put('id6', 6);
87-
expect(cache.info().size).toBe(5);
88-
}));
89-
90-
91-
describe('eviction', () {
92-
93-
beforeEach(inject(() {
94-
cache = $cacheFactory('cache1', {'capacity': 2});
95-
96-
cache.put('id0', 0);
97-
cache.put('id1', 1);
98-
}));
99-
100-
101-
it('should kick out the first entry on put', inject(() {
102-
cache.put('id2', 2);
103-
expect(cache.get('id0')).toBeNull();
104-
expect(cache.get('id1')).toBe(1);
105-
expect(cache.get('id2')).toBe(2);
106-
}));
107-
108-
109-
it('should refresh an entry via get', inject(() {
110-
cache.get('id0');
111-
cache.put('id2', 2);
112-
expect(cache.get('id0')).toBe(0);
113-
expect(cache.get('id1')).toBeNull();
114-
expect(cache.get('id2')).toBe(2);
115-
}));
116-
117-
118-
it('should refresh an entry via put', inject(() {
119-
cache.put('id0', '00');
120-
cache.put('id2', 2);
121-
expect(cache.get('id0')).toBe('00');
122-
expect(cache.get('id1')).toBeNull();
123-
expect(cache.get('id2')).toBe(2);
124-
}));
125-
126-
127-
it('should not purge an entry if another one was removed', inject(() {
128-
cache.remove('id1');
129-
cache.put('id2', 2);
130-
expect(cache.get('id0')).toBe(0);
131-
expect(cache.get('id1')).toBeNull();
132-
expect(cache.get('id2')).toBe(2);
133-
}));
134-
135-
136-
it('should purge the next entry if the stalest one was removed', inject(() {
137-
cache.remove('id0');
138-
cache.put('id2', 2);
139-
cache.put('id3', 3);
140-
expect(cache.get('id0')).toBeNull();
141-
expect(cache.get('id1')).toBeNull();
142-
expect(cache.get('id2')).toBe(2);
143-
expect(cache.get('id3')).toBe(3);
144-
}));
145-
146-
147-
it('should correctly recreate the linked list if all cache entries were removed', inject(() {
148-
cache.remove('id0');
149-
cache.remove('id1');
150-
cache.put('id2', 2);
151-
cache.put('id3', 3);
152-
cache.put('id4', 4);
153-
expect(cache.get('id0')).toBeNull();
154-
expect(cache.get('id1')).toBeNull();
155-
expect(cache.get('id2')).toBeNull();
156-
expect(cache.get('id3')).toBe(3);
157-
expect(cache.get('id4')).toBe(4);
158-
}));
159-
160-
161-
it('should blow away the entire cache via removeAll and start evicting when full', inject(() {
162-
cache.put('id0', 0);
163-
cache.put('id1', 1);
164-
cache.removeAll();
165-
166-
cache.put('id2', 2);
167-
cache.put('id3', 3);
168-
cache.put('id4', 4);
169-
170-
expect(cache.info().size).toBe(2);
171-
expect(cache.get('id0')).toBeNull();
172-
expect(cache.get('id1')).toBeNull();
173-
expect(cache.get('id2')).toBeNull();
174-
expect(cache.get('id3')).toBe(3);
175-
expect(cache.get('id4')).toBe(4);
176-
}));
177-
178-
179-
it('should correctly refresh and evict items if operations are chained', inject(() {
180-
cache = $cacheFactory('cache2', {'capacity': 3});
181-
182-
cache.put('id0', 0); //0
183-
cache.put('id1', 1); //1,0
184-
cache.put('id2', 2); //2,1,0
185-
cache.get('id0'); //0,2,1
186-
cache.put('id3', 3); //3,0,2
187-
cache.put('id0', 9); //0,3,2
188-
cache.put('id4', 4); //4,0,3
189-
190-
expect(cache.get('id3')).toBe(3);
191-
expect(cache.get('id0')).toBe(9);
192-
expect(cache.get('id4')).toBe(4);
193-
194-
cache.remove('id0'); //4,3
195-
cache.remove('id3'); //4
196-
cache.put('id5', 5); //5,4
197-
cache.put('id6', 6); //6,5,4
198-
cache.get('id4'); //4,6,5
199-
cache.put('id7', 7); //7,4,6
200-
201-
expect(cache.get('id0')).toBeNull();
202-
expect(cache.get('id1')).toBeNull();
203-
expect(cache.get('id2')).toBeNull();
204-
expect(cache.get('id3')).toBeNull();
205-
expect(cache.get('id4')).toBe(4);
206-
expect(cache.get('id5')).toBeNull();
207-
expect(cache.get('id6')).toBe(6);
208-
expect(cache.get('id7')).toBe(7);
209-
210-
cache.removeAll();
211-
cache.put('id0', 0); //0
212-
cache.put('id1', 1); //1,0
213-
cache.put('id2', 2); //2,1,0
214-
cache.put('id3', 3); //3,2,1
215-
216-
expect(cache.info().size).toBe(3);
217-
expect(cache.get('id0')).toBeNull();
218-
expect(cache.get('id1')).toBe(1);
219-
expect(cache.get('id2')).toBe(2);
220-
expect(cache.get('id3')).toBe(3);
221-
}));
222-
});
223-
});
22470
});

0 commit comments

Comments
 (0)