| 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 smoke.test.codegen.generator_test; | |
| 6 | |
| 7 import 'package:smoke/codegen/generator.dart'; | |
| 8 import 'package:unittest/unittest.dart'; | |
| 9 | |
| 10 import 'common.dart' show checkResults; | |
| 11 | |
| 12 main() { | |
| 13 test('getters', () { | |
| 14 var generator = new SmokeCodeGenerator(); | |
| 15 generator.addGetter('i'); | |
| 16 checkResults(generator, initCall: | |
| 17 'useGeneratedCode(new StaticConfiguration(\n' | |
| 18 ' checkedMode: false,\n' | |
| 19 ' getters: {\n' | |
| 20 ' #i: (o) => o.i,\n' | |
| 21 ' }));\n'); | |
| 22 | |
| 23 generator.addGetter('foo'); | |
| 24 checkResults(generator, initCall: | |
| 25 'useGeneratedCode(new StaticConfiguration(\n' | |
| 26 ' checkedMode: false,\n' | |
| 27 ' getters: {\n' | |
| 28 ' #foo: (o) => o.foo,\n' | |
| 29 ' #i: (o) => o.i,\n' | |
| 30 ' }));\n'); | |
| 31 }); | |
| 32 | |
| 33 test('setters', () { | |
| 34 var generator = new SmokeCodeGenerator(); | |
| 35 generator.addSetter('i'); | |
| 36 checkResults(generator, initCall: | |
| 37 'useGeneratedCode(new StaticConfiguration(\n' | |
| 38 ' checkedMode: false,\n' | |
| 39 ' setters: {\n' | |
| 40 ' #i: (o, v) { o.i = v; },\n' | |
| 41 ' }));\n'); | |
| 42 | |
| 43 generator.addSetter('foo'); | |
| 44 checkResults(generator, initCall: | |
| 45 'useGeneratedCode(new StaticConfiguration(\n' | |
| 46 ' checkedMode: false,\n' | |
| 47 ' setters: {\n' | |
| 48 ' #foo: (o, v) { o.foo = v; },\n' | |
| 49 ' #i: (o, v) { o.i = v; },\n' | |
| 50 ' }));\n'); | |
| 51 }); | |
| 52 | |
| 53 test('names/symbols', () { | |
| 54 var generator = new SmokeCodeGenerator(); | |
| 55 generator.addSymbol('i'); | |
| 56 generator.addSymbol('foo'); | |
| 57 generator.addSymbol('a.b.c'); | |
| 58 generator.addSymbol('a.b.[]'); | |
| 59 generator.addSymbol('[]'); | |
| 60 generator.addSymbol('+'); | |
| 61 checkResults(generator, initCall: | |
| 62 'useGeneratedCode(new StaticConfiguration(\n' | |
| 63 ' checkedMode: false,\n' | |
| 64 ' names: {\n' | |
| 65 ' const Symbol(\'+\'): r\'+\',\n' | |
| 66 ' const Symbol(\'[]\'): r\'[]\',\n' | |
| 67 ' const Symbol(\'a.b.[]\'): r\'a.b.[]\',\n' | |
| 68 ' #a.b.c: r\'a.b.c\',\n' | |
| 69 ' #foo: r\'foo\',\n' | |
| 70 ' #i: r\'i\',\n' | |
| 71 ' }));\n'); | |
| 72 }); | |
| 73 | |
| 74 group('invalid symbols', () { | |
| 75 var invalidError = | |
| 76 predicate((e) => e is StateError && '$e'.contains("invalid symbol")); | |
| 77 test('traling period', () { | |
| 78 var generator = new SmokeCodeGenerator(); | |
| 79 generator.addSymbol('a.'); | |
| 80 var sb = new StringBuffer(); | |
| 81 expect(() => generator.writeStaticConfiguration(sb), | |
| 82 throwsA(invalidError)); | |
| 83 }); | |
| 84 | |
| 85 test('operator in the middle', () { | |
| 86 var generator = new SmokeCodeGenerator(); | |
| 87 generator.addSymbol('a.[].b'); | |
| 88 var sb = new StringBuffer(); | |
| 89 expect(() => generator.writeStaticConfiguration(sb), | |
| 90 throwsA(invalidError)); | |
| 91 }); | |
| 92 }); | |
| 93 | |
| 94 test('getters, setters, and names', () { | |
| 95 var generator = new SmokeCodeGenerator(); | |
| 96 generator.addGetter('i'); | |
| 97 generator.addSetter('i'); | |
| 98 generator.addSetter('foo'); | |
| 99 generator.addSymbol('foo'); | |
| 100 checkResults(generator, initCall: | |
| 101 'useGeneratedCode(new StaticConfiguration(\n' | |
| 102 ' checkedMode: false,\n' | |
| 103 ' getters: {\n' | |
| 104 ' #i: (o) => o.i,\n' | |
| 105 ' },\n' | |
| 106 ' setters: {\n' | |
| 107 ' #foo: (o, v) { o.foo = v; },\n' | |
| 108 ' #i: (o, v) { o.i = v; },\n' | |
| 109 ' },\n' | |
| 110 ' names: {\n' | |
| 111 ' #foo: r\'foo\',\n' | |
| 112 ' }));\n'); | |
| 113 }); | |
| 114 | |
| 115 test('parents', () { | |
| 116 var generator = new SmokeCodeGenerator(); | |
| 117 generator.addParent(new TypeIdentifier('a.dart', 'A'), | |
| 118 new TypeIdentifier('b.dart', 'B')); | |
| 119 generator.addParent(new TypeIdentifier('a.dart', 'C'), | |
| 120 new TypeIdentifier('a.dart', 'A')); | |
| 121 checkResults(generator, | |
| 122 imports: [ | |
| 123 "import 'a.dart' as smoke_0;", | |
| 124 "import 'b.dart' as smoke_1;" | |
| 125 ], | |
| 126 initCall: | |
| 127 'useGeneratedCode(new StaticConfiguration(\n' | |
| 128 ' checkedMode: false,\n' | |
| 129 ' parents: {\n' | |
| 130 ' smoke_0.A: smoke_1.B,\n' | |
| 131 ' smoke_0.C: smoke_0.A,\n' | |
| 132 ' }));\n'); | |
| 133 }); | |
| 134 | |
| 135 test('declarations', () { | |
| 136 var generator = new SmokeCodeGenerator(); | |
| 137 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'foo', | |
| 138 new TypeIdentifier('dart:core', 'int'), isField: true, isFinal: true); | |
| 139 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'bar', | |
| 140 new TypeIdentifier('dart:core', 'Function'), isMethod: true, | |
| 141 annotations: [new ConstExpression.constructor(null, 'Annotation', | |
| 142 [new ConstExpression.string("hi")], const {})]); | |
| 143 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), '[]', | |
| 144 new TypeIdentifier('dart:core', 'Function'), isMethod: true); | |
| 145 var symbol = "const Symbol('[]')"; | |
| 146 var details = "$symbol, Function, kind: METHOD"; | |
| 147 checkResults(generator, | |
| 148 imports: ["import 'a.dart' as smoke_0;"], | |
| 149 initCall: | |
| 150 'useGeneratedCode(new StaticConfiguration(\n' | |
| 151 ' checkedMode: false,\n' | |
| 152 ' declarations: {\n' | |
| 153 ' smoke_0.A: {\n' | |
| 154 ' $symbol: const Declaration($details),\n' | |
| 155 ' #bar: const Declaration(#bar, Function, kind: METHOD, ' | |
| 156 'annotations: const [const Annotation(\'hi\')]),\n' | |
| 157 ' #foo: const Declaration(#foo, int, isFinal: true),\n' | |
| 158 ' },\n' | |
| 159 ' }));\n'); | |
| 160 }); | |
| 161 | |
| 162 test('staticMethod', () { | |
| 163 var generator = new SmokeCodeGenerator(); | |
| 164 generator.addStaticMethod(new TypeIdentifier('a.dart', 'A'), 'm1'); | |
| 165 checkResults(generator, | |
| 166 imports: ["import 'a.dart' as smoke_0;"], | |
| 167 initCall: | |
| 168 'useGeneratedCode(new StaticConfiguration(\n' | |
| 169 ' checkedMode: false,\n' | |
| 170 ' staticMethods: {\n' | |
| 171 ' smoke_0.A: {\n' | |
| 172 ' #m1: smoke_0.A.m1,\n' | |
| 173 ' },\n' | |
| 174 ' }));\n'); | |
| 175 }); | |
| 176 | |
| 177 test('repeated entries appear only once', () { | |
| 178 var generator = new SmokeCodeGenerator(); | |
| 179 generator.addGetter('a'); | |
| 180 generator.addGetter('a'); | |
| 181 generator.addSetter('b'); | |
| 182 generator.addSetter('b'); | |
| 183 generator.addSymbol('d'); | |
| 184 generator.addSymbol('d'); | |
| 185 generator.addSymbol('c'); | |
| 186 generator.addSymbol('c'); | |
| 187 generator.addSymbol('c'); | |
| 188 | |
| 189 generator.addParent(new TypeIdentifier('a.dart', 'C'), | |
| 190 new TypeIdentifier('a.dart', 'A')); | |
| 191 generator.addParent(new TypeIdentifier('a.dart', 'C'), | |
| 192 new TypeIdentifier('a.dart', 'A')); | |
| 193 generator.addParent(new TypeIdentifier('a.dart', 'C'), | |
| 194 new TypeIdentifier('a.dart', 'A')); | |
| 195 | |
| 196 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'foo', | |
| 197 new TypeIdentifier('dart:core', 'int'), isField: true, isFinal: true); | |
| 198 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'foo', | |
| 199 new TypeIdentifier('dart:core', 'int'), isField: true, isFinal: true); | |
| 200 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'foo', | |
| 201 new TypeIdentifier('dart:core', 'int'), isField: true, isFinal: true); | |
| 202 | |
| 203 checkResults(generator, | |
| 204 imports: [ | |
| 205 "import 'a.dart' as smoke_0;", | |
| 206 ], | |
| 207 initCall: | |
| 208 'useGeneratedCode(new StaticConfiguration(\n' | |
| 209 ' checkedMode: false,\n' | |
| 210 ' getters: {\n' | |
| 211 ' #a: (o) => o.a,\n' | |
| 212 ' },\n' | |
| 213 ' setters: {\n' | |
| 214 ' #b: (o, v) { o.b = v; },\n' | |
| 215 ' },\n' | |
| 216 ' parents: {\n' | |
| 217 ' smoke_0.C: smoke_0.A,\n' | |
| 218 ' },\n' | |
| 219 ' declarations: {\n' | |
| 220 ' smoke_0.A: {\n' | |
| 221 ' #foo: const Declaration(#foo, int, isFinal: true),\n' | |
| 222 ' },\n' | |
| 223 ' },\n' | |
| 224 ' names: {\n' | |
| 225 ' #c: r\'c\',\n' | |
| 226 ' #d: r\'d\',\n' | |
| 227 ' }));\n'); | |
| 228 }); | |
| 229 } | |
| OLD | NEW |