| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2016, 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.src.summary.flat_buffers_test; |
| 6 |
| 7 import 'package:analyzer/src/summary/flat_buffers.dart'; |
| 8 import 'package:unittest/unittest.dart'; |
| 9 |
| 10 import '../../reflective_tests.dart'; |
| 11 |
| 12 main() { |
| 13 groupSep = ' | '; |
| 14 runReflectiveTests(BuilderTest); |
| 15 } |
| 16 |
| 17 @reflectiveTest |
| 18 class BuilderTest { |
| 19 void test_error_addInt32_withoutStartTable() { |
| 20 Builder builder = new Builder(); |
| 21 expect(() { |
| 22 builder.addInt32(0, 0); |
| 23 }, throwsStateError); |
| 24 } |
| 25 |
| 26 void test_error_addOffset_withoutStartTable() { |
| 27 Builder builder = new Builder(); |
| 28 expect(() { |
| 29 builder.addOffset(0, new Offset(0)); |
| 30 }, throwsStateError); |
| 31 } |
| 32 |
| 33 void test_error_endTable_withoutStartTable() { |
| 34 Builder builder = new Builder(); |
| 35 expect(() { |
| 36 builder.endTable(); |
| 37 }, throwsStateError); |
| 38 } |
| 39 |
| 40 void test_error_startTable_duringTable() { |
| 41 Builder builder = new Builder(); |
| 42 builder.startTable(); |
| 43 expect(() { |
| 44 builder.startTable(); |
| 45 }, throwsStateError); |
| 46 } |
| 47 |
| 48 void test_error_writeString_duringTable() { |
| 49 Builder builder = new Builder(); |
| 50 builder.startTable(); |
| 51 expect(() { |
| 52 builder.writeString('12345'); |
| 53 }, throwsStateError); |
| 54 } |
| 55 |
| 56 void test_low() { |
| 57 Builder builder = new Builder(initialSize: 0); |
| 58 builder.lowReset(); |
| 59 expect((builder..lowWriteUint8(1)).lowFinish(), [1]); |
| 60 expect((builder..lowWriteUint32(2)).lowFinish(), [2, 0, 0, 0, 0, 0, 0, 1]); |
| 61 expect((builder..lowWriteUint8(3)).lowFinish(), |
| 62 [0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 1]); |
| 63 expect((builder..lowWriteUint8(4)).lowFinish(), |
| 64 [0, 0, 4, 3, 2, 0, 0, 0, 0, 0, 0, 1]); |
| 65 expect((builder..lowWriteUint8(5)).lowFinish(), |
| 66 [0, 5, 4, 3, 2, 0, 0, 0, 0, 0, 0, 1]); |
| 67 expect((builder..lowWriteUint32(6)).lowFinish(), |
| 68 [6, 0, 0, 0, 0, 5, 4, 3, 2, 0, 0, 0, 0, 0, 0, 1]); |
| 69 } |
| 70 |
| 71 void test_table_default() { |
| 72 List<int> byteList; |
| 73 { |
| 74 Builder builder = new Builder(initialSize: 0); |
| 75 builder.startTable(); |
| 76 builder.addInt32(0, 10, 10); |
| 77 builder.addInt32(1, 20, 10); |
| 78 Offset offset = builder.endTable(); |
| 79 byteList = builder.finish(offset); |
| 80 } |
| 81 // read and verify |
| 82 BufferPointer object = new BufferPointer.fromBytes(byteList).derefObject(); |
| 83 // was not written, so uses the new default value |
| 84 expect(const Int32Reader().vTableGet(object, 0, 15), 15); |
| 85 // has the written value |
| 86 expect(const Int32Reader().vTableGet(object, 1, 15), 20); |
| 87 } |
| 88 |
| 89 void test_table_types() { |
| 90 List<int> byteList; |
| 91 { |
| 92 Builder builder = new Builder(initialSize: 0); |
| 93 Offset<String> stringOffset = builder.writeString('12345'); |
| 94 builder.startTable(); |
| 95 builder.addInt8(0, 10); |
| 96 builder.addInt32(1, 20); |
| 97 builder.addOffset(2, stringOffset); |
| 98 builder.addInt32(3, 40); |
| 99 Offset offset = builder.endTable(); |
| 100 byteList = builder.finish(offset); |
| 101 } |
| 102 // read and verify |
| 103 BufferPointer object = new BufferPointer.fromBytes(byteList).derefObject(); |
| 104 expect(const Int8Reader().vTableGet(object, 0), 10); |
| 105 expect(const Int32Reader().vTableGet(object, 1), 20); |
| 106 expect(const StringReader().vTableGet(object, 2), '12345'); |
| 107 expect(const Int32Reader().vTableGet(object, 3), 40); |
| 108 } |
| 109 |
| 110 void test_writeList_ofObjects() { |
| 111 List<int> byteList; |
| 112 { |
| 113 Builder builder = new Builder(initialSize: 0); |
| 114 // write the object #1 |
| 115 Offset object1; |
| 116 { |
| 117 builder.startTable(); |
| 118 builder.addInt32(0, 10); |
| 119 builder.addInt32(1, 20); |
| 120 object1 = builder.endTable(); |
| 121 } |
| 122 // write the object #1 |
| 123 Offset object2; |
| 124 { |
| 125 builder.startTable(); |
| 126 builder.addInt32(0, 100); |
| 127 builder.addInt32(1, 200); |
| 128 object2 = builder.endTable(); |
| 129 } |
| 130 // write the line |
| 131 Offset offset = builder.writeList([object1, object2]); |
| 132 byteList = builder.finish(offset); |
| 133 } |
| 134 // read and verify |
| 135 BufferPointer root = new BufferPointer.fromBytes(byteList); |
| 136 List<TestPointReader> items = |
| 137 const ListReader<TestPointReader>(const TestPointReader()).read(root); |
| 138 expect(items, hasLength(2)); |
| 139 expect(items[0].x, 10); |
| 140 expect(items[0].y, 20); |
| 141 expect(items[1].x, 100); |
| 142 expect(items[1].y, 200); |
| 143 } |
| 144 |
| 145 void test_writeList_ofStrings_asRoot() { |
| 146 List<int> byteList; |
| 147 { |
| 148 Builder builder = new Builder(initialSize: 0); |
| 149 Offset<String> str1 = builder.writeString('12345'); |
| 150 Offset<String> str2 = builder.writeString('ABC'); |
| 151 Offset offset = builder.writeList([str1, str2]); |
| 152 byteList = builder.finish(offset); |
| 153 } |
| 154 // read and verify |
| 155 BufferPointer root = new BufferPointer.fromBytes(byteList); |
| 156 List<String> items = |
| 157 const ListReader<String>(const StringReader()).read(root); |
| 158 expect(items, hasLength(2)); |
| 159 expect(items, contains('12345')); |
| 160 expect(items, contains('ABC')); |
| 161 } |
| 162 |
| 163 void test_writeList_ofStrings_inObject() { |
| 164 List<int> byteList; |
| 165 { |
| 166 Builder builder = new Builder(initialSize: 0); |
| 167 Offset listOffset = builder.writeList( |
| 168 [builder.writeString('12345'), builder.writeString('ABC')]); |
| 169 builder.startTable(); |
| 170 builder.addOffset(0, listOffset); |
| 171 Offset offset = builder.endTable(); |
| 172 byteList = builder.finish(offset); |
| 173 } |
| 174 // read and verify |
| 175 BufferPointer root = new BufferPointer.fromBytes(byteList); |
| 176 StringListWrapperReader reader = new StringListWrapperReader().read(root); |
| 177 List<String> items = reader.items; |
| 178 expect(items, hasLength(2)); |
| 179 expect(items, contains('12345')); |
| 180 expect(items, contains('ABC')); |
| 181 } |
| 182 } |
| 183 |
| 184 class StringListWrapperReader extends TableReader<StringListWrapperReader> { |
| 185 final BufferPointer bp; |
| 186 |
| 187 const StringListWrapperReader() : bp = null; |
| 188 |
| 189 StringListWrapperReader._(this.bp); |
| 190 |
| 191 List<String> get items => |
| 192 const ListReader<String>(const StringReader()).vTableGet(bp, 0); |
| 193 |
| 194 @override |
| 195 StringListWrapperReader createReader(BufferPointer object) { |
| 196 return new StringListWrapperReader._(object); |
| 197 } |
| 198 } |
| 199 |
| 200 class TestPointReader extends TableReader<TestPointReader> { |
| 201 final BufferPointer bp; |
| 202 |
| 203 const TestPointReader() : bp = null; |
| 204 |
| 205 TestPointReader._(this.bp); |
| 206 |
| 207 int get x => const Int32Reader().vTableGet(bp, 0, 0); |
| 208 |
| 209 int get y => const Int32Reader().vTableGet(bp, 1, 0); |
| 210 |
| 211 @override |
| 212 TestPointReader createReader(BufferPointer object) { |
| 213 return new TestPointReader._(object); |
| 214 } |
| 215 } |
| OLD | NEW |