| 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_table_default() { |
| 57 List<int> byteList; |
| 58 { |
| 59 Builder builder = new Builder(initialSize: 0); |
| 60 builder.startTable(); |
| 61 builder.addInt32(0, 10, 10); |
| 62 builder.addInt32(1, 20, 10); |
| 63 Offset offset = builder.endTable(); |
| 64 byteList = builder.finish(offset); |
| 65 } |
| 66 // read and verify |
| 67 BufferPointer object = new BufferPointer.fromBytes(byteList).derefObject(); |
| 68 // was not written, so uses the new default value |
| 69 expect(const Int32Reader().vTableGet(object, 0, 15), 15); |
| 70 // has the written value |
| 71 expect(const Int32Reader().vTableGet(object, 1, 15), 20); |
| 72 } |
| 73 |
| 74 void test_table_types() { |
| 75 List<int> byteList; |
| 76 { |
| 77 Builder builder = new Builder(initialSize: 0); |
| 78 Offset<String> stringOffset = builder.writeString('12345'); |
| 79 builder.startTable(); |
| 80 builder.addInt8(0, 10); |
| 81 builder.addInt32(1, 20); |
| 82 builder.addOffset(2, stringOffset); |
| 83 builder.addInt32(3, 40); |
| 84 Offset offset = builder.endTable(); |
| 85 byteList = builder.finish(offset); |
| 86 } |
| 87 // read and verify |
| 88 BufferPointer object = new BufferPointer.fromBytes(byteList).derefObject(); |
| 89 expect(const Int8Reader().vTableGet(object, 0), 10); |
| 90 expect(const Int32Reader().vTableGet(object, 1), 20); |
| 91 expect(const StringReader().vTableGet(object, 2), '12345'); |
| 92 expect(const Int32Reader().vTableGet(object, 3), 40); |
| 93 } |
| 94 |
| 95 void test_writeList_ofObjects() { |
| 96 List<int> byteList; |
| 97 { |
| 98 Builder builder = new Builder(initialSize: 0); |
| 99 // write the object #1 |
| 100 Offset object1; |
| 101 { |
| 102 builder.startTable(); |
| 103 builder.addInt32(0, 10); |
| 104 builder.addInt32(1, 20); |
| 105 object1 = builder.endTable(); |
| 106 } |
| 107 // write the object #1 |
| 108 Offset object2; |
| 109 { |
| 110 builder.startTable(); |
| 111 builder.addInt32(0, 100); |
| 112 builder.addInt32(1, 200); |
| 113 object2 = builder.endTable(); |
| 114 } |
| 115 // write the line |
| 116 Offset offset = builder.writeList([object1, object2]); |
| 117 byteList = builder.finish(offset); |
| 118 } |
| 119 // read and verify |
| 120 BufferPointer root = new BufferPointer.fromBytes(byteList); |
| 121 List<TestPointReader> items = |
| 122 const ListReader<TestPointReader>(const TestPointReader()).read(root); |
| 123 expect(items, hasLength(2)); |
| 124 expect(items[0].x, 10); |
| 125 expect(items[0].y, 20); |
| 126 expect(items[1].x, 100); |
| 127 expect(items[1].y, 200); |
| 128 } |
| 129 |
| 130 void test_writeList_ofStrings_asRoot() { |
| 131 List<int> byteList; |
| 132 { |
| 133 Builder builder = new Builder(initialSize: 0); |
| 134 Offset<String> str1 = builder.writeString('12345'); |
| 135 Offset<String> str2 = builder.writeString('ABC'); |
| 136 Offset offset = builder.writeList([str1, str2]); |
| 137 byteList = builder.finish(offset); |
| 138 } |
| 139 // read and verify |
| 140 BufferPointer root = new BufferPointer.fromBytes(byteList); |
| 141 List<String> items = |
| 142 const ListReader<String>(const StringReader()).read(root); |
| 143 expect(items, hasLength(2)); |
| 144 expect(items, contains('12345')); |
| 145 expect(items, contains('ABC')); |
| 146 } |
| 147 |
| 148 void test_writeList_ofStrings_inObject() { |
| 149 List<int> byteList; |
| 150 { |
| 151 Builder builder = new Builder(initialSize: 0); |
| 152 Offset listOffset = builder.writeList( |
| 153 [builder.writeString('12345'), builder.writeString('ABC')]); |
| 154 builder.startTable(); |
| 155 builder.addOffset(0, listOffset); |
| 156 Offset offset = builder.endTable(); |
| 157 byteList = builder.finish(offset); |
| 158 } |
| 159 // read and verify |
| 160 BufferPointer root = new BufferPointer.fromBytes(byteList); |
| 161 StringListWrapperReader reader = new StringListWrapperReader().read(root); |
| 162 List<String> items = reader.items; |
| 163 expect(items, hasLength(2)); |
| 164 expect(items, contains('12345')); |
| 165 expect(items, contains('ABC')); |
| 166 } |
| 167 } |
| 168 |
| 169 class StringListWrapperReader extends TableReader<StringListWrapperReader> { |
| 170 final BufferPointer bp; |
| 171 |
| 172 const StringListWrapperReader() : bp = null; |
| 173 |
| 174 StringListWrapperReader._(this.bp); |
| 175 |
| 176 List<String> get items => |
| 177 const ListReader<String>(const StringReader()).vTableGet(bp, 0); |
| 178 |
| 179 @override |
| 180 StringListWrapperReader createReader(BufferPointer object) { |
| 181 return new StringListWrapperReader._(object); |
| 182 } |
| 183 } |
| 184 |
| 185 class TestPointReader extends TableReader<TestPointReader> { |
| 186 final BufferPointer bp; |
| 187 |
| 188 const TestPointReader() : bp = null; |
| 189 |
| 190 TestPointReader._(this.bp); |
| 191 |
| 192 int get x => const Int32Reader().vTableGet(bp, 0, 0); |
| 193 |
| 194 int get y => const Int32Reader().vTableGet(bp, 1, 0); |
| 195 |
| 196 @override |
| 197 TestPointReader createReader(BufferPointer object) { |
| 198 return new TestPointReader._(object); |
| 199 } |
| 200 } |
| OLD | NEW |