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, |
| 17 initCall: '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, |
| 25 initCall: '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, |
| 37 initCall: '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, |
| 45 initCall: '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, |
| 62 initCall: '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( |
| 82 () => generator.writeStaticConfiguration(sb), 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( |
| 90 () => generator.writeStaticConfiguration(sb), 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, |
| 101 initCall: '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( |
| 118 new TypeIdentifier('a.dart', 'A'), new TypeIdentifier('b.dart', 'B')); |
| 119 generator.addParent( |
| 120 new TypeIdentifier('a.dart', 'C'), new TypeIdentifier('a.dart', 'A')); |
| 121 checkResults(generator, |
| 122 imports: ["import 'a.dart' as smoke_0;", "import 'b.dart' as smoke_1;"], |
| 123 initCall: 'useGeneratedCode(new StaticConfiguration(\n' |
| 124 ' checkedMode: false,\n' |
| 125 ' parents: {\n' |
| 126 ' smoke_0.A: smoke_1.B,\n' |
| 127 ' smoke_0.C: smoke_0.A,\n' |
| 128 ' }));\n'); |
| 129 }); |
| 130 |
| 131 test('declarations', () { |
| 132 var generator = new SmokeCodeGenerator(); |
| 133 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'foo', |
| 134 new TypeIdentifier('dart:core', 'int'), isField: true, isFinal: true); |
| 135 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'bar', |
| 136 new TypeIdentifier('dart:core', 'Function'), |
| 137 isMethod: true, |
| 138 annotations: [ |
| 139 new ConstExpression.constructor( |
| 140 null, 'Annotation', [new ConstExpression.string("hi")], const {}) |
| 141 ]); |
| 142 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), '[]', |
| 143 new TypeIdentifier('dart:core', 'Function'), isMethod: true); |
| 144 var symbol = "const Symbol('[]')"; |
| 145 var details = "$symbol, Function, kind: METHOD"; |
| 146 checkResults(generator, |
| 147 imports: ["import 'a.dart' as smoke_0;"], |
| 148 initCall: 'useGeneratedCode(new StaticConfiguration(\n' |
| 149 ' checkedMode: false,\n' |
| 150 ' declarations: {\n' |
| 151 ' smoke_0.A: {\n' |
| 152 ' $symbol: const Declaration($details),\n' |
| 153 ' #bar: const Declaration(#bar, Function, kind: METHOD, ' |
| 154 'annotations: const [const Annotation(\'hi\')]),\n' |
| 155 ' #foo: const Declaration(#foo, int, isFinal: true),\n' |
| 156 ' },\n' |
| 157 ' }));\n'); |
| 158 }); |
| 159 |
| 160 test('staticMethod', () { |
| 161 var generator = new SmokeCodeGenerator(); |
| 162 generator.addStaticMethod(new TypeIdentifier('a.dart', 'A'), 'm1'); |
| 163 checkResults(generator, |
| 164 imports: ["import 'a.dart' as smoke_0;"], |
| 165 initCall: 'useGeneratedCode(new StaticConfiguration(\n' |
| 166 ' checkedMode: false,\n' |
| 167 ' staticMethods: {\n' |
| 168 ' smoke_0.A: {\n' |
| 169 ' #m1: smoke_0.A.m1,\n' |
| 170 ' },\n' |
| 171 ' }));\n'); |
| 172 }); |
| 173 |
| 174 test('repeated entries appear only once', () { |
| 175 var generator = new SmokeCodeGenerator(); |
| 176 generator.addGetter('a'); |
| 177 generator.addGetter('a'); |
| 178 generator.addSetter('b'); |
| 179 generator.addSetter('b'); |
| 180 generator.addSymbol('d'); |
| 181 generator.addSymbol('d'); |
| 182 generator.addSymbol('c'); |
| 183 generator.addSymbol('c'); |
| 184 generator.addSymbol('c'); |
| 185 |
| 186 generator.addParent( |
| 187 new TypeIdentifier('a.dart', 'C'), new TypeIdentifier('a.dart', 'A')); |
| 188 generator.addParent( |
| 189 new TypeIdentifier('a.dart', 'C'), new TypeIdentifier('a.dart', 'A')); |
| 190 generator.addParent( |
| 191 new TypeIdentifier('a.dart', 'C'), new TypeIdentifier('a.dart', 'A')); |
| 192 |
| 193 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'foo', |
| 194 new TypeIdentifier('dart:core', 'int'), isField: true, isFinal: true); |
| 195 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'foo', |
| 196 new TypeIdentifier('dart:core', 'int'), isField: true, isFinal: true); |
| 197 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'foo', |
| 198 new TypeIdentifier('dart:core', 'int'), isField: true, isFinal: true); |
| 199 |
| 200 checkResults(generator, |
| 201 imports: ["import 'a.dart' as smoke_0;",], |
| 202 initCall: 'useGeneratedCode(new StaticConfiguration(\n' |
| 203 ' checkedMode: false,\n' |
| 204 ' getters: {\n' |
| 205 ' #a: (o) => o.a,\n' |
| 206 ' },\n' |
| 207 ' setters: {\n' |
| 208 ' #b: (o, v) { o.b = v; },\n' |
| 209 ' },\n' |
| 210 ' parents: {\n' |
| 211 ' smoke_0.C: smoke_0.A,\n' |
| 212 ' },\n' |
| 213 ' declarations: {\n' |
| 214 ' smoke_0.A: {\n' |
| 215 ' #foo: const Declaration(#foo, int, isFinal: true),\n' |
| 216 ' },\n' |
| 217 ' },\n' |
| 218 ' names: {\n' |
| 219 ' #c: r\'c\',\n' |
| 220 ' #d: r\'d\',\n' |
| 221 ' }));\n'); |
| 222 }); |
| 223 } |
OLD | NEW |