1 2 import static com.google.flatbuffers.Constants.*; 3 import static com.google.common.truth.Truth.assertThat; 4 5 import DictionaryLookup.*; 6 import MyGame.Example.*; 7 import com.google.common.io.ByteStreams; 8 import optional_scalars.ScalarStuff; 9 import optional_scalars.OptionalByte; 10 import NamespaceA.*; 11 import NamespaceA.NamespaceB.*; 12 import com.google.flatbuffers.ByteBufferUtil; 13 import com.google.flatbuffers.ByteVector; 14 import com.google.flatbuffers.FlatBufferBuilder; 15 import com.google.flatbuffers.FlexBuffers; 16 import com.google.flatbuffers.FlexBuffersBuilder; 17 import com.google.flatbuffers.StringVector; 18 import com.google.flatbuffers.UnionVector; 19 20 import com.google.flatbuffers.FlexBuffers.FlexBufferException; 21 import com.google.flatbuffers.FlexBuffers.Reference; 22 import com.google.flatbuffers.FlexBuffers.Vector; 23 import com.google.flatbuffers.ArrayReadWriteBuf; 24 import com.google.flatbuffers.FlexBuffers.KeyVector; 25 26 import java.io.*; 27 import java.nio.ByteBuffer; 28 import java.nio.ByteOrder; 29 import java.nio.channels.FileChannel; 30 import java.nio.charset.StandardCharsets; 31 import java.util.Arrays; 32 import java.util.HashMap; 33 import java.util.Map; 34 import org.junit.Rule; 35 import org.junit.rules.TemporaryFolder; 36 import org.junit.runner.RunWith; 37 import org.junit.runners.JUnit4; 38 39 40 /* 41 * Copyright 2014 Google Inc. All rights reserved. 42 * 43 * Licensed under the Apache License, Version 2.0 (the "License"); 44 * you may not use this file except in compliance with the License. 45 * You may obtain a copy of the License at 46 * 47 * http://www.apache.org/licenses/LICENSE-2.0 48 * 49 * Unless required by applicable law or agreed to in writing, software 50 * distributed under the License is distributed on an "AS IS" BASIS, 51 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 52 * See the License for the specific language governing permissions and 53 * limitations under the License. 54 */ 55 56 @RunWith(JUnit4.class) 57 public class JavaTest { 58 59 @Rule 60 public TemporaryFolder tempFolder = new TemporaryFolder(); 61 62 @org.junit.Test mainTest()63 public void mainTest() throws IOException { 64 // First, let's test reading a FlatBuffer generated by C++ code: 65 // This file was generated from monsterdata_test.json 66 byte[] data = ByteStreams.toByteArray( 67 JavaTest.class.getClassLoader().getResourceAsStream("monsterdata_test.mon")); 68 69 // Now test it: 70 ByteBuffer bb = ByteBuffer.wrap(data); 71 TestBuffer(bb); 72 TestPackUnpack(bb); 73 } 74 75 @org.junit.Test testFlatBufferBuilder()76 public void testFlatBufferBuilder() { 77 // We use an initial size of 1 to exercise the reallocation algorithm, 78 // normally a size larger than the typical FlatBuffer you generate would be 79 // better for performance. 80 FlatBufferBuilder fbb = new FlatBufferBuilder(1); 81 TestBuilderBasics(fbb, true); 82 TestBuilderBasics(fbb, false); 83 TestExtendedBuffer(fbb.dataBuffer().asReadOnlyBuffer()); 84 } 85 86 @org.junit.Test TestEnums()87 public void TestEnums() { 88 assertThat(Color.name(Color.Red)).isEqualTo("Red"); 89 assertThat(Color.name(Color.Blue)).isEqualTo("Blue"); 90 assertThat(Any.name(Any.NONE)).isEqualTo("NONE"); 91 assertThat(Any.name(Any.Monster)).isEqualTo("Monster"); 92 } 93 TestBuffer(ByteBuffer bb)94 static void TestBuffer(ByteBuffer bb) { 95 assertThat(Monster.MonsterBufferHasIdentifier(bb)).isEqualTo(true); 96 97 Monster monster = Monster.getRootAsMonster(bb); 98 99 assertThat(monster.hp()).isEqualTo((short) 80); 100 // default 101 assertThat(monster.mana()).isEqualTo((short) 150); 102 103 assertThat(monster.name()).isEqualTo("MyMonster"); 104 // monster.friendly() // can't access, deprecated 105 106 Vec3 pos = monster.pos(); 107 assertThat(pos.x()).isEqualTo(1.0f); 108 assertThat(pos.y()).isEqualTo(2.0f); 109 assertThat(pos.z()).isEqualTo(3.0f); 110 assertThat(pos.test1()).isEqualTo(3.0); 111 // issue: int != byte 112 assertThat(pos.test2()).isEqualTo((int) Color.Green); 113 Test t = pos.test3(); 114 assertThat(t.a()).isEqualTo((short) 5); 115 assertThat(t.b()).isEqualTo((byte) 6); 116 117 assertThat(monster.testType()).isEqualTo((byte) Any.Monster); 118 Monster monster2 = new Monster(); 119 assertThat(monster.test(monster2) != null).isTrue(); 120 assertThat(monster2.name()).isEqualTo("Fred"); 121 122 assertThat(monster.inventoryLength()).isEqualTo(5); 123 int invsum = 0; 124 for (int i = 0; i < monster.inventoryLength(); i++) 125 invsum += monster.inventory(i); 126 assertThat(invsum).isEqualTo(10); 127 128 // Method using a vector access object: 129 ByteVector inventoryVector = monster.inventoryVector(); 130 assertThat(inventoryVector.length()).isEqualTo(5); 131 invsum = 0; 132 for (int i = 0; i < inventoryVector.length(); i++) 133 invsum += inventoryVector.getAsUnsigned(i); 134 assertThat(invsum).isEqualTo(10); 135 136 // Alternative way of accessing a vector: 137 ByteBuffer ibb = monster.inventoryAsByteBuffer(); 138 invsum = 0; 139 while (ibb.position() < ibb.limit()) 140 invsum += ibb.get(); 141 assertThat(invsum).isEqualTo(10); 142 143 Test test_0 = monster.test4(0); 144 Test test_1 = monster.test4(1); 145 assertThat(monster.test4Length()).isEqualTo(2); 146 assertThat(test_0.a() + test_0.b() + test_1.a() + test_1.b()).isEqualTo((Integer) 100); 147 148 Test.Vector test4Vector = monster.test4Vector(); 149 test_0 = test4Vector.get(0); 150 test_1 = test4Vector.get(1); 151 assertThat(test4Vector.length()).isEqualTo(2); 152 assertThat(test_0.a() + test_0.b() + test_1.a() + test_1.b()).isEqualTo((Integer) 100); 153 154 assertThat(monster.testarrayofstringLength()).isEqualTo(2); 155 assertThat(monster.testarrayofstring(0)).isEqualTo("test1"); 156 assertThat(monster.testarrayofstring(1)).isEqualTo("test2"); 157 158 // Method using a vector access object: 159 StringVector testarrayofstringVector = monster.testarrayofstringVector(); 160 assertThat(testarrayofstringVector.length()).isEqualTo(2); 161 assertThat(testarrayofstringVector.get(0)).isEqualTo("test1"); 162 assertThat(testarrayofstringVector.get(1)).isEqualTo("test2"); 163 164 assertThat(monster.testbool()).isEqualTo(true); 165 } 166 167 // this method checks additional fields not present in the binary buffer read from file 168 // these new tests are performed on top of the regular tests TestExtendedBuffer(ByteBuffer bb)169 static void TestExtendedBuffer(ByteBuffer bb) { 170 TestBuffer(bb); 171 172 Monster monster = Monster.getRootAsMonster(bb); 173 174 assertThat(monster.testhashu32Fnv1()).isEqualTo((Integer.MAX_VALUE + 1L)); 175 } 176 177 TestNamespaceNesting()178 @org.junit.Test public void TestNamespaceNesting() { 179 // reference / manipulate these to verify compilation 180 FlatBufferBuilder fbb = new FlatBufferBuilder(1); 181 182 TableInNestedNS.startTableInNestedNS(fbb); 183 TableInNestedNS.addFoo(fbb, 1234); 184 int nestedTableOff = TableInNestedNS.endTableInNestedNS(fbb); 185 186 TableInFirstNS.startTableInFirstNS(fbb); 187 TableInFirstNS.addFooTable(fbb, nestedTableOff); 188 int off = TableInFirstNS.endTableInFirstNS(fbb); 189 } 190 TestNestedFlatBuffer()191 @org.junit.Test public void TestNestedFlatBuffer() { 192 final String nestedMonsterName = "NestedMonsterName"; 193 final short nestedMonsterHp = 600; 194 final short nestedMonsterMana = 1024; 195 196 FlatBufferBuilder fbb1 = new FlatBufferBuilder(16); 197 int str1 = fbb1.createString(nestedMonsterName); 198 Monster.startMonster(fbb1); 199 Monster.addName(fbb1, str1); 200 Monster.addHp(fbb1, nestedMonsterHp); 201 Monster.addMana(fbb1, nestedMonsterMana); 202 int monster1 = Monster.endMonster(fbb1); 203 Monster.finishMonsterBuffer(fbb1, monster1); 204 byte[] fbb1Bytes = fbb1.sizedByteArray(); 205 fbb1 = null; 206 207 FlatBufferBuilder fbb2 = new FlatBufferBuilder(16); 208 int str2 = fbb2.createString("My Monster"); 209 int nestedBuffer = Monster.createTestnestedflatbufferVector(fbb2, fbb1Bytes); 210 Monster.startMonster(fbb2); 211 Monster.addName(fbb2, str2); 212 Monster.addHp(fbb2, (short)50); 213 Monster.addMana(fbb2, (short)32); 214 Monster.addTestnestedflatbuffer(fbb2, nestedBuffer); 215 int monster = Monster.endMonster(fbb2); 216 Monster.finishMonsterBuffer(fbb2, monster); 217 218 // Now test the data extracted from the nested buffer 219 Monster mons = Monster.getRootAsMonster(fbb2.dataBuffer()); 220 Monster nestedMonster = mons.testnestedflatbufferAsMonster(); 221 222 assertThat(nestedMonsterMana).isEqualTo(nestedMonster.mana()); 223 assertThat(nestedMonsterHp).isEqualTo(nestedMonster.hp()); 224 assertThat(nestedMonsterName).isEqualTo(nestedMonster.name()); 225 } 226 TestCreateByteVector()227 @org.junit.Test public void TestCreateByteVector() { 228 FlatBufferBuilder fbb = new FlatBufferBuilder(16); 229 int str = fbb.createString("MyMonster"); 230 byte[] inventory = new byte[] { 0, 1, 2, 3, 4 }; 231 int vec = fbb.createByteVector(inventory); 232 Monster.startMonster(fbb); 233 Monster.addInventory(fbb, vec); 234 Monster.addName(fbb, str); 235 int monster1 = Monster.endMonster(fbb); 236 Monster.finishMonsterBuffer(fbb, monster1); 237 Monster monsterObject = Monster.getRootAsMonster(fbb.dataBuffer()); 238 239 assertThat((Integer) monsterObject.inventory(1)).isEqualTo((int)inventory[1]); 240 assertThat(monsterObject.inventoryLength()).isEqualTo(inventory.length); 241 ByteVector inventoryVector = monsterObject.inventoryVector(); 242 assertThat(inventoryVector.getAsUnsigned(1)).isEqualTo((int)inventory[1]); 243 assertThat(inventoryVector.length()).isEqualTo(inventory.length); 244 245 assertThat(ByteBuffer.wrap(inventory)).isEqualTo( 246 monsterObject.inventoryAsByteBuffer()); 247 } 248 TestCreateUninitializedVector()249 @org.junit.Test public void TestCreateUninitializedVector() { 250 FlatBufferBuilder fbb = new FlatBufferBuilder(16); 251 int str = fbb.createString("MyMonster"); 252 byte[] inventory = new byte[] { 0, 1, 2, 3, 4 }; 253 ByteBuffer bb = fbb.createUnintializedVector(1, inventory.length, 1); 254 for (byte i:inventory) { 255 bb.put(i); 256 } 257 int vec = fbb.endVector(); 258 Monster.startMonster(fbb); 259 Monster.addInventory(fbb, vec); 260 Monster.addName(fbb, str); 261 int monster1 = Monster.endMonster(fbb); 262 Monster.finishMonsterBuffer(fbb, monster1); 263 Monster monsterObject = Monster.getRootAsMonster(fbb.dataBuffer()); 264 265 assertThat((Integer) monsterObject.inventory(1)).isEqualTo((int)inventory[1]); 266 assertThat(monsterObject.inventoryLength()).isEqualTo(inventory.length); 267 ByteVector inventoryVector = monsterObject.inventoryVector(); 268 assertThat(inventoryVector.getAsUnsigned(1)).isEqualTo((int)inventory[1]); 269 assertThat(inventoryVector.length()).isEqualTo(inventory.length); 270 assertThat(ByteBuffer.wrap(inventory)).isEqualTo( 271 monsterObject.inventoryAsByteBuffer()); 272 } 273 TestByteBufferFactory()274 @org.junit.Test public void TestByteBufferFactory() throws IOException { 275 File file = tempFolder.newFile("javatest.bin"); 276 final class MappedByteBufferFactory extends FlatBufferBuilder.ByteBufferFactory { 277 @Override 278 public ByteBuffer newByteBuffer(int capacity) { 279 ByteBuffer bb; 280 try { 281 RandomAccessFile f = new RandomAccessFile(file, "rw"); 282 bb = f.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, capacity).order(ByteOrder.LITTLE_ENDIAN); 283 f.close(); 284 } catch(Throwable e) { 285 System.out.println("FlatBuffers test: couldn't map ByteBuffer to a file"); 286 bb = null; 287 } 288 return bb; 289 } 290 } 291 292 FlatBufferBuilder fbb = new FlatBufferBuilder(1, new MappedByteBufferFactory()); 293 294 TestBuilderBasics(fbb, false); 295 } 296 TestSizedInputStream()297 @org.junit.Test public void TestSizedInputStream() { 298 // Test on default FlatBufferBuilder that uses HeapByteBuffer 299 FlatBufferBuilder fbb = new FlatBufferBuilder(1); 300 301 TestBuilderBasics(fbb, false); 302 303 InputStream in = fbb.sizedInputStream(); 304 byte[] array = fbb.sizedByteArray(); 305 int count = 0; 306 int currentVal = 0; 307 308 while (currentVal != -1 && count < array.length) { 309 try { 310 currentVal = in.read(); 311 } catch(java.io.IOException e) { 312 System.out.println("FlatBuffers test: couldn't read from InputStream"); 313 return; 314 } 315 assertThat((byte)currentVal).isEqualTo(array[count]); 316 count++; 317 } 318 assertThat(count).isEqualTo(array.length); 319 } 320 TestBuilderBasics(FlatBufferBuilder fbb, boolean sizePrefix)321 void TestBuilderBasics(FlatBufferBuilder fbb, boolean sizePrefix) { 322 int[] names = {fbb.createString("Frodo"), fbb.createString("Barney"), fbb.createString("Wilma")}; 323 int[] off = new int[3]; 324 Monster.startMonster(fbb); 325 Monster.addName(fbb, names[0]); 326 off[0] = Monster.endMonster(fbb); 327 Monster.startMonster(fbb); 328 Monster.addName(fbb, names[1]); 329 off[1] = Monster.endMonster(fbb); 330 Monster.startMonster(fbb); 331 Monster.addName(fbb, names[2]); 332 off[2] = Monster.endMonster(fbb); 333 int sortMons = fbb.createSortedVectorOfTables(new Monster(), off); 334 335 // We set up the same values as monsterdata.json: 336 337 int str = fbb.createString("MyMonster"); 338 339 int inv = Monster.createInventoryVector(fbb, new byte[] { 0, 1, 2, 3, 4 }); 340 341 int fred = fbb.createString("Fred"); 342 Monster.startMonster(fbb); 343 Monster.addName(fbb, fred); 344 int mon2 = Monster.endMonster(fbb); 345 346 Monster.startTest4Vector(fbb, 2); 347 Test.createTest(fbb, (short)10, (byte)20); 348 Test.createTest(fbb, (short)30, (byte)40); 349 int test4 = fbb.endVector(); 350 351 int testArrayOfString = Monster.createTestarrayofstringVector(fbb, new int[] { 352 fbb.createString("test1"), 353 fbb.createString("test2") 354 }); 355 356 Monster.startMonster(fbb); 357 Monster.addPos(fbb, Vec3.createVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0, 358 Color.Green, (short)5, (byte)6)); 359 Monster.addHp(fbb, (short)80); 360 Monster.addName(fbb, str); 361 Monster.addInventory(fbb, inv); 362 Monster.addTestType(fbb, (byte)Any.Monster); 363 Monster.addTest(fbb, mon2); 364 Monster.addTest4(fbb, test4); 365 Monster.addTestarrayofstring(fbb, testArrayOfString); 366 Monster.addTestbool(fbb, true); 367 Monster.addTesthashu32Fnv1(fbb, Integer.MAX_VALUE + 1L); 368 Monster.addTestarrayoftables(fbb, sortMons); 369 int mon = Monster.endMonster(fbb); 370 371 if (sizePrefix) { 372 Monster.finishSizePrefixedMonsterBuffer(fbb, mon); 373 } else { 374 Monster.finishMonsterBuffer(fbb, mon); 375 } 376 377 // Write the result to a file for debugging purposes: 378 // Note that the binaries are not necessarily identical, since the JSON 379 // parser may serialize in a slightly different order than the above 380 // Java code. They are functionally equivalent though. 381 382 try { 383 String filename = "monsterdata_java_wire" + (sizePrefix ? "_sp" : "") + ".mon"; 384 FileChannel fc = new FileOutputStream(tempFolder.newFile(filename)).getChannel(); 385 fc.write(fbb.dataBuffer().duplicate()); 386 fc.close(); 387 } catch(java.io.IOException e) { 388 System.out.println("FlatBuffers test: couldn't write file"); 389 return; 390 } 391 392 // Test it: 393 ByteBuffer dataBuffer = fbb.dataBuffer(); 394 if (sizePrefix) { 395 assertThat(ByteBufferUtil.getSizePrefix(dataBuffer) + SIZE_PREFIX_LENGTH).isEqualTo( 396 dataBuffer.remaining()); 397 dataBuffer = ByteBufferUtil.removeSizePrefix(dataBuffer); 398 } 399 TestExtendedBuffer(dataBuffer); 400 401 // Make sure it also works with read only ByteBuffers. This is slower, 402 // since creating strings incurs an additional copy 403 // (see Table.__string). 404 TestExtendedBuffer(dataBuffer.asReadOnlyBuffer()); 405 406 //Attempt to mutate Monster fields and check whether the buffer has been mutated properly 407 // revert to original values after testing 408 Monster monster = Monster.getRootAsMonster(dataBuffer); 409 410 // mana is optional and does not exist in the buffer so the mutation should fail 411 // the mana field should retain its default value 412 assertThat(monster.mutateMana((short)10)).isFalse(); 413 assertThat(monster.mana()).isEqualTo((short) 150); 414 415 // Accessing a vector of sorted by the key tables 416 assertThat(monster.testarrayoftables(0).name()).isEqualTo("Barney"); 417 assertThat(monster.testarrayoftables(1).name()).isEqualTo("Frodo"); 418 assertThat(monster.testarrayoftables(2).name()).isEqualTo("Wilma"); 419 Monster.Vector testarrayoftablesVector = monster.testarrayoftablesVector(); 420 assertThat(testarrayoftablesVector.get(0).name()).isEqualTo("Barney"); 421 assertThat(testarrayoftablesVector.get(1).name()).isEqualTo("Frodo"); 422 assertThat(testarrayoftablesVector.get(2).name()).isEqualTo("Wilma"); 423 424 // Example of searching for a table by the key 425 assertThat(monster.testarrayoftablesByKey("Frodo").name()).isEqualTo("Frodo"); 426 assertThat(monster.testarrayoftablesByKey("Barney").name()).isEqualTo("Barney"); 427 assertThat(monster.testarrayoftablesByKey("Wilma").name()).isEqualTo("Wilma"); 428 assertThat(testarrayoftablesVector.getByKey("Frodo").name()).isEqualTo("Frodo"); 429 assertThat(testarrayoftablesVector.getByKey("Barney").name()).isEqualTo("Barney"); 430 assertThat(testarrayoftablesVector.getByKey("Wilma").name()).isEqualTo("Wilma"); 431 432 // testType is an existing field and mutating it should succeed 433 assertThat(monster.testType()).isEqualTo((byte) Any.Monster); 434 435 //mutate the inventory vector 436 assertThat(monster.mutateInventory(0, 1)).isTrue(); 437 assertThat(monster.mutateInventory(1, 2)).isTrue(); 438 assertThat(monster.mutateInventory(2, 3)).isTrue(); 439 assertThat(monster.mutateInventory(3, 4)).isTrue(); 440 assertThat(monster.mutateInventory(4, 5)).isTrue(); 441 442 for (int i = 0; i < monster.inventoryLength(); i++) { 443 assertThat((Integer) monster.inventory(i)).isEqualTo(i + 1); 444 } 445 ByteVector inventoryVector = monster.inventoryVector(); 446 for (int i = 0; i < inventoryVector.length(); i++) { 447 assertThat((int)inventoryVector.get(i)).isEqualTo(i + 1); 448 } 449 450 //reverse mutation 451 assertThat(monster.mutateInventory(0, 0)).isTrue(); 452 assertThat(monster.mutateInventory(1, 1)).isTrue(); 453 assertThat(monster.mutateInventory(2, 2)).isTrue(); 454 assertThat(monster.mutateInventory(3, 3)).isTrue(); 455 assertThat(monster.mutateInventory(4, 4)).isTrue(); 456 457 // get a struct field and edit one of its fields 458 Vec3 pos = monster.pos(); 459 assertThat(pos.x()).isEqualTo(1.0f); 460 pos.mutateX(55.0f); 461 assertThat(pos.x()).isEqualTo(55.0f); 462 pos.mutateX(1.0f); 463 assertThat(pos.x()).isEqualTo(1.0f); 464 } 465 TestVectorOfUnions()466 @org.junit.Test public void TestVectorOfUnions() { 467 final FlatBufferBuilder fbb = new FlatBufferBuilder(); 468 469 final int swordAttackDamage = 1; 470 471 final int[] characterVector = new int[] { 472 Attacker.createAttacker(fbb, swordAttackDamage), 473 }; 474 475 final byte[] characterTypeVector = new byte[]{ 476 Character.MuLan, 477 }; 478 479 Movie.finishMovieBuffer( 480 fbb, 481 Movie.createMovie( 482 fbb, 483 (byte)0, 484 (byte)0, 485 Movie.createCharactersTypeVector(fbb, characterTypeVector), 486 Movie.createCharactersVector(fbb, characterVector) 487 ) 488 ); 489 490 final Movie movie = Movie.getRootAsMovie(fbb.dataBuffer()); 491 ByteVector charactersTypeByteVector = movie.charactersTypeVector(); 492 UnionVector charactersVector = movie.charactersVector(); 493 494 assertThat(movie.charactersTypeLength()).isEqualTo(characterTypeVector.length); 495 assertThat(charactersTypeByteVector.length()).isEqualTo(characterTypeVector.length); 496 assertThat(movie.charactersLength()).isEqualTo(characterVector.length); 497 assertThat(charactersVector.length()).isEqualTo(characterVector.length); 498 499 assertThat((Byte) movie.charactersType(0)).isEqualTo(characterTypeVector[0]); 500 assertThat(charactersTypeByteVector.get(0)).isEqualTo(characterTypeVector[0]); 501 502 assertThat(((Attacker)movie.characters(new Attacker(), 0)).swordAttackDamage()).isEqualTo( 503 swordAttackDamage); 504 } 505 TestFixedLengthArrays()506 @org.junit.Test public void TestFixedLengthArrays() { 507 FlatBufferBuilder builder = new FlatBufferBuilder(0); 508 509 float a; 510 int[] b = new int[15]; 511 byte c; 512 int[][] d_a = new int[2][2]; 513 byte[] d_b = new byte[2]; 514 byte[][] d_c = new byte[2][2]; 515 long[][] d_d = new long[2][2]; 516 int e; 517 long[] f = new long[2]; 518 519 a = 0.5f; 520 for (int i = 0; i < 15; i++) b[i] = i; 521 c = 1; 522 d_a[0][0] = 1; 523 d_a[0][1] = 2; 524 d_a[1][0] = 3; 525 d_a[1][1] = 4; 526 d_b[0] = TestEnum.B; 527 d_b[1] = TestEnum.C; 528 d_c[0][0] = TestEnum.A; 529 d_c[0][1] = TestEnum.B; 530 d_c[1][0] = TestEnum.C; 531 d_c[1][1] = TestEnum.B; 532 d_d[0][0] = -1; 533 d_d[0][1] = 1; 534 d_d[1][0] = -2; 535 d_d[1][1] = 2; 536 e = 2; 537 f[0] = -1; 538 f[1] = 1; 539 540 int arrayOffset = ArrayStruct.createArrayStruct(builder, 541 a, b, c, d_a, d_b, d_c, d_d, e, f); 542 543 // Create a table with the ArrayStruct. 544 ArrayTable.startArrayTable(builder); 545 ArrayTable.addA(builder, arrayOffset); 546 int tableOffset = ArrayTable.endArrayTable(builder); 547 548 ArrayTable.finishArrayTableBuffer(builder, tableOffset); 549 550 ArrayTable table = ArrayTable.getRootAsArrayTable(builder.dataBuffer()); 551 NestedStruct nested = new NestedStruct(); 552 553 assertThat(table.a().a()).isEqualTo(0.5f); 554 for (int i = 0; i < 15; i++) 555 assertThat(table.a().b(i)).isEqualTo(i); 556 assertThat(table.a().c()).isEqualTo((byte)1); 557 assertThat(table.a().d(nested, 0).a(0)).isEqualTo(1); 558 assertThat(table.a().d(nested, 0).a(1)).isEqualTo(2); 559 assertThat(table.a().d(nested, 1).a(0)).isEqualTo(3); 560 assertThat(table.a().d(nested, 1).a(1)).isEqualTo(4); 561 assertThat(table.a().d(nested, 0).b()).isEqualTo(TestEnum.B); 562 assertThat(table.a().d(nested, 1).b()).isEqualTo(TestEnum.C); 563 assertThat(table.a().d(nested, 0).c(0)).isEqualTo(TestEnum.A); 564 assertThat(table.a().d(nested, 0).c(1)).isEqualTo(TestEnum.B); 565 assertThat(table.a().d(nested, 1).c(0)).isEqualTo(TestEnum.C); 566 assertThat(table.a().d(nested, 1).c(1)).isEqualTo(TestEnum.B); 567 assertThat(table.a().d(nested, 0).d(0)).isEqualTo((long)-1); 568 assertThat(table.a().d(nested, 0).d(1)).isEqualTo((long)1); 569 assertThat(table.a().d(nested, 1).d(0)).isEqualTo((long)-2); 570 assertThat(table.a().d(nested, 1).d(1)).isEqualTo((long)2); 571 assertThat(table.a().e()).isEqualTo(2); 572 assertThat(table.a().f(0)).isEqualTo((long)-1); 573 assertThat(table.a().f(1)).isEqualTo((long)1); 574 } 575 testFlexBuffersTest()576 @org.junit.Test public void testFlexBuffersTest() { 577 FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(512), 578 FlexBuffersBuilder.BUILDER_FLAG_SHARE_KEYS_AND_STRINGS); 579 testFlexBuffersTest(builder); 580 int bufferLimit1 = ((ArrayReadWriteBuf) builder.getBuffer()).limit(); 581 582 // Repeat after clearing the builder to ensure the builder is reusable 583 builder.clear(); 584 testFlexBuffersTest(builder); 585 int bufferLimit2 = ((ArrayReadWriteBuf) builder.getBuffer()).limit(); 586 assertThat(bufferLimit1).isEqualTo(bufferLimit2); 587 } 588 testFlexBuffersTest(FlexBuffersBuilder builder)589 public static void testFlexBuffersTest(FlexBuffersBuilder builder) { 590 // Write the equivalent of: 591 // { vec: [ -100, "Fred", 4.0, false ], bar: [ 1, 2, 3 ], bar3: [ 1, 2, 3 ], 592 // foo: 100, bool: true, mymap: { foo: "Fred" } } 593 // It's possible to do this without std::function support as well. 594 int map1 = builder.startMap(); 595 596 int vec1 = builder.startVector(); 597 builder.putInt(-100); 598 builder.putString("Fred"); 599 builder.putBlob(new byte[]{(byte) 77}); 600 builder.putBoolean(false); 601 builder.putInt(Long.MAX_VALUE); 602 603 int map2 = builder.startMap(); 604 builder.putInt("test", 200); 605 builder.endMap(null, map2); 606 607 builder.putFloat(150.9); 608 builder.putFloat(150.9999998); 609 builder.endVector("vec", vec1, false, false); 610 611 vec1 = builder.startVector(); 612 builder.putInt(1); 613 builder.putInt(2); 614 builder.putInt(3); 615 builder.endVector("bar", vec1, true, false); 616 617 vec1 = builder.startVector(); 618 builder.putBoolean(true); 619 builder.putBoolean(false); 620 builder.putBoolean(true); 621 builder.putBoolean(false); 622 builder.endVector("bools", vec1, true, false); 623 624 builder.putBoolean("bool", true); 625 builder.putFloat("foo", 100); 626 627 map2 = builder.startMap(); 628 builder.putString("bar", "Fred"); // Testing key and string reuse. 629 builder.putInt("int", -120); 630 builder.putFloat("float", -123.0f); 631 builder.putBlob("blob", new byte[]{ 65, 67 }); 632 builder.endMap("mymap", map2); 633 634 builder.endMap(null, map1); 635 builder.finish(); 636 637 FlexBuffers.Map m = FlexBuffers.getRoot(builder.getBuffer()).asMap(); 638 639 assertThat(m.size()).isEqualTo(6); 640 641 // test empty (an null) 642 // empty if fail 643 assertThat(m.get("no_key").asString()).isEqualTo(""); 644 // empty if fail 645 assertThat(m.get("no_key").asMap()).isEqualTo(FlexBuffers.Map.empty()); 646 // empty if fail 647 assertThat(m.get("no_key").asKey()).isEqualTo(FlexBuffers.Key.empty()); 648 // empty if fail 649 assertThat(m.get("no_key").asVector()).isEqualTo(Vector.empty()); 650 // empty if fail 651 assertThat(m.get("no_key").asBlob()).isEqualTo(FlexBuffers.Blob.empty()); 652 assert(m.get("no_key").asVector().isEmpty()); // empty if fail 653 654 // testing "vec" field 655 FlexBuffers.Vector vec = m.get("vec").asVector(); 656 assertThat(vec.size()).isEqualTo(8); 657 assertThat(vec.get(0).asLong()).isEqualTo((long) -100); 658 assertThat(vec.get(1).asString()).isEqualTo("Fred"); 659 assertThat(vec.get(2).isBlob()).isTrue(); 660 assertThat(vec.get(2).asBlob().size()).isEqualTo(1); 661 assertThat(vec.get(2).asBlob().data().get(0)).isEqualTo((byte) 77); 662 // Check if type is a bool 663 assertThat(vec.get(3).isBoolean()).isTrue(); 664 // Check if value is false 665 assertThat(vec.get(3).asBoolean()).isFalse(); 666 assertThat(vec.get(4).asLong()).isEqualTo(Long.MAX_VALUE); 667 assertThat(vec.get(5).isMap()).isTrue(); 668 assertThat(vec.get(5).asMap().get("test").asInt()).isEqualTo(200); 669 assertThat(Float.compare((float)vec.get(6).asFloat(), 150.9f)).isEqualTo(0); 670 assertThat(Double.compare(vec.get(7).asFloat(), 150.9999998)).isEqualTo(0); 671 //conversion fail returns 0 as C++ 672 assertThat((long)0).isEqualTo((long)vec.get(1).asLong()); 673 674 // bar vector 675 FlexBuffers.Vector tvec = m.get("bar").asVector(); 676 assertThat(tvec.size()).isEqualTo(3); 677 assertThat(tvec.get(0).asInt()).isEqualTo(1); 678 assertThat(tvec.get(1).asInt()).isEqualTo(2); 679 assertThat(tvec.get(2).asInt()).isEqualTo(3); 680 assertThat(((FlexBuffers.TypedVector) tvec).getElemType()).isEqualTo(FlexBuffers.FBT_INT); 681 682 // bools vector 683 FlexBuffers.Vector bvec = m.get("bools").asVector(); 684 assertThat(bvec.size()).isEqualTo(4); 685 assertThat(bvec.get(0).asBoolean()).isTrue(); 686 assertThat(bvec.get(1).asBoolean()).isFalse(); 687 assertThat(bvec.get(2).asBoolean()).isTrue(); 688 assertThat(bvec.get(3).asBoolean()).isFalse(); 689 assertThat(((FlexBuffers.TypedVector) bvec).getElemType()).isEqualTo(FlexBuffers.FBT_BOOL); 690 691 assertThat((float)m.get("foo").asFloat()).isEqualTo((float) 100); 692 assertThat(m.get("unknown").isNull()).isTrue(); 693 694 // mymap vector 695 FlexBuffers.Map mymap = m.get("mymap").asMap(); 696 // These should be equal by pointer equality, since key and value are shared. 697 assertThat(mymap.keys().get(0)).isEqualTo(m.keys().get(0)); 698 assertThat(mymap.keys().get(0).toString()).isEqualTo("bar"); 699 assertThat(mymap.values().get(0).asString()).isEqualTo(vec.get(1).asString()); 700 assertThat(mymap.get("int").asInt()).isEqualTo(-120); 701 assertThat((float)mymap.get("float").asFloat()).isEqualTo(-123.0f); 702 assertThat(Arrays.equals(mymap.get("blob").asBlob().getBytes(), new byte[]{ 65, 67 })).isEqualTo( 703 true); 704 assertThat(mymap.get("blob").asBlob().toString()).isEqualTo("AC"); 705 assertThat(mymap.get("blob").toString()).isEqualTo("\"AC\""); 706 } 707 testFlexBufferVectorStrings()708 @org.junit.Test public void testFlexBufferVectorStrings() { 709 FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(10000000)); 710 711 int size = 3000; 712 StringBuilder sb = new StringBuilder(); 713 for (int i=0; i< size; i++) { 714 sb.append("a"); 715 } 716 717 String text = sb.toString(); 718 assertThat(text.length()).isEqualTo(size); 719 720 int pos = builder.startVector(); 721 722 for (int i=0; i<size; i++) { 723 builder.putString(text); 724 } 725 726 try { 727 builder.endVector(null, pos, true, false); 728 // this should raise an exception as 729 // typed vector of string was deprecated 730 assert false; 731 } catch(FlexBufferException fb) { 732 // no op 733 } 734 // we finish the vector again as non-typed 735 builder.endVector(null, pos, false, false); 736 737 ByteBuffer b = builder.finish(); 738 Vector v = FlexBuffers.getRoot(b).asVector(); 739 740 assertThat(v.size()).isEqualTo(size); 741 for (int i=0; i<size; i++) { 742 assertThat(v.get(i).asString().length()).isEqualTo(size); 743 assertThat(v.get(i).asString()).isEqualTo(text); 744 } 745 } 746 testDeprecatedTypedVectorString()747 @org.junit.Test public void testDeprecatedTypedVectorString() { 748 // tests whether we are able to support reading deprecated typed vector string 749 // data is equivalent to [ "abc", "abc", "abc", "abc"] 750 byte[] data = new byte[] {0x03, 0x61, 0x62, 0x63, 0x00, 0x03, 0x61, 0x62, 0x63, 0x00, 751 0x03, 0x61, 0x62, 0x63, 0x00, 0x03, 0x61, 0x62, 0x63, 0x00, 0x04, 0x14, 0x10, 752 0x0c, 0x08, 0x04, 0x3c, 0x01}; 753 Reference ref = FlexBuffers.getRoot(ByteBuffer.wrap(data)); 754 assertThat(ref.getType()).isEqualTo(FlexBuffers.FBT_VECTOR_STRING_DEPRECATED); 755 assertThat(ref.isTypedVector()).isTrue(); 756 Vector vec = ref.asVector(); 757 for (int i=0; i< vec.size(); i++) { 758 assertThat("abc").isEqualTo(vec.get(i).asString()); 759 } 760 } 761 testSingleElementBoolean()762 @org.junit.Test public void testSingleElementBoolean() { 763 FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(100)); 764 builder.putBoolean(true); 765 ByteBuffer b = builder.finish(); 766 assertThat(FlexBuffers.getRoot(b).asBoolean()).isTrue(); 767 } 768 testSingleElementByte()769 @org.junit.Test public void testSingleElementByte() { 770 FlexBuffersBuilder builder = new FlexBuffersBuilder(); 771 builder.putInt(10); 772 ByteBuffer b = builder.finish(); 773 assertThat(10).isEqualTo(FlexBuffers.getRoot(b).asInt()); 774 } 775 testSingleElementShort()776 @org.junit.Test public void testSingleElementShort() { 777 FlexBuffersBuilder builder = new FlexBuffersBuilder(); 778 builder.putInt(Short.MAX_VALUE); 779 ByteBuffer b = builder.finish(); 780 assertThat(Short.MAX_VALUE).isEqualTo((short) FlexBuffers.getRoot(b).asInt()); 781 } 782 testSingleElementInt()783 @org.junit.Test public void testSingleElementInt() { 784 FlexBuffersBuilder builder = new FlexBuffersBuilder(); 785 builder.putInt(Integer.MIN_VALUE); 786 ByteBuffer b = builder.finish(); 787 assertThat(Integer.MIN_VALUE).isEqualTo(FlexBuffers.getRoot(b).asInt()); 788 } 789 testSingleElementLong()790 @org.junit.Test public void testSingleElementLong() { 791 FlexBuffersBuilder builder = new FlexBuffersBuilder(); 792 builder.putInt(Long.MAX_VALUE); 793 ByteBuffer b = builder.finish(); 794 assertThat(Long.MAX_VALUE).isEqualTo(FlexBuffers.getRoot(b).asLong()); 795 } 796 testSingleElementFloat()797 @org.junit.Test public void testSingleElementFloat() { 798 FlexBuffersBuilder builder = new FlexBuffersBuilder(); 799 builder.putFloat(Float.MAX_VALUE); 800 ByteBuffer b = builder.finish(); 801 assertThat(Float.compare(Float.MAX_VALUE, (float) FlexBuffers.getRoot(b).asFloat())).isEqualTo( 802 0); 803 } 804 testSingleElementDouble()805 @org.junit.Test public void testSingleElementDouble() { 806 FlexBuffersBuilder builder = new FlexBuffersBuilder(); 807 builder.putFloat(Double.MAX_VALUE); 808 ByteBuffer b = builder.finish(); 809 assertThat(Double.compare(Double.MAX_VALUE, FlexBuffers.getRoot(b).asFloat())).isEqualTo(0); 810 } 811 testSingleElementBigString()812 @org.junit.Test public void testSingleElementBigString() { 813 FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(10000)); 814 StringBuilder sb = new StringBuilder(); 815 816 for (int i=0; i< 3000; i++) { 817 sb.append("a"); 818 } 819 820 builder.putString(sb.toString()); 821 ByteBuffer b = builder.finish(); 822 823 FlexBuffers.Reference r = FlexBuffers.getRoot(b); 824 825 assertThat(FlexBuffers.FBT_STRING).isEqualTo(r.getType()); 826 assertThat(sb.toString()).isEqualTo(r.asString()); 827 } 828 testSingleElementSmallString()829 @org.junit.Test public void testSingleElementSmallString() { 830 FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(10000)); 831 832 builder.putString("aa"); 833 ByteBuffer b = builder.finish(); 834 FlexBuffers.Reference r = FlexBuffers.getRoot(b); 835 836 assertThat(FlexBuffers.FBT_STRING).isEqualTo(r.getType()); 837 assertThat("aa").isEqualTo(r.asString()); 838 } 839 testSingleElementBlob()840 @org.junit.Test public void testSingleElementBlob() { 841 FlexBuffersBuilder builder = new FlexBuffersBuilder(); 842 builder.putBlob(new byte[]{5, 124, 118, -1}); 843 ByteBuffer b = builder.finish(); 844 FlexBuffers.Reference r = FlexBuffers.getRoot(b); 845 byte[] result = r.asBlob().getBytes(); 846 assertThat((byte)5).isEqualTo(result[0]); 847 assertThat((byte)124).isEqualTo(result[1]); 848 assertThat((byte)118).isEqualTo(result[2]); 849 assertThat((byte)-1).isEqualTo(result[3]); 850 } 851 testSingleElementLongBlob()852 @org.junit.Test public void testSingleElementLongBlob() { 853 854 // verifies blobs of up to 2^16 in length 855 for (int i = 2; i <= 1<<16; i = i<<1) { 856 byte[] input = new byte[i-1]; 857 for (int index = 0; index < input.length; index++) { 858 input[index] = (byte)(index % 64); 859 } 860 861 FlexBuffersBuilder builder = new FlexBuffersBuilder(); 862 builder.putBlob(input); 863 ByteBuffer b = builder.finish(); 864 FlexBuffers.Reference r = FlexBuffers.getRoot(b); 865 byte[] result = r.asBlob().getBytes(); 866 867 for (int index = 0; index < input.length; index++) { 868 assertThat((byte)(index % 64)).isEqualTo(result[index]); 869 } 870 } 871 } 872 testSingleElementUByte()873 @org.junit.Test public void testSingleElementUByte() { 874 FlexBuffersBuilder builder = new FlexBuffersBuilder(); 875 builder.putUInt(0xFF); 876 ByteBuffer b = builder.finish(); 877 FlexBuffers.Reference r = FlexBuffers.getRoot(b); 878 assertThat(255).isEqualTo((int)r.asUInt()); 879 } 880 testSingleElementUShort()881 @org.junit.Test public void testSingleElementUShort() { 882 FlexBuffersBuilder builder = new FlexBuffersBuilder(); 883 builder.putUInt(0xFFFF); 884 ByteBuffer b = builder.finish(); 885 FlexBuffers.Reference r = FlexBuffers.getRoot(b); 886 assertThat(65535).isEqualTo((int)r.asUInt()); 887 } 888 testSingleElementUInt()889 @org.junit.Test public void testSingleElementUInt() { 890 FlexBuffersBuilder builder = new FlexBuffersBuilder(); 891 builder.putUInt(0xFFFF_FFFFL); 892 ByteBuffer b = builder.finish(); 893 FlexBuffers.Reference r = FlexBuffers.getRoot(b); 894 assertThat(4294967295L).isEqualTo(r.asUInt()); 895 } 896 testSingleFixedTypeVector()897 @org.junit.Test public void testSingleFixedTypeVector() { 898 899 int[] ints = new int[]{5, 124, 118, -1}; 900 float[] floats = new float[]{5.5f, 124.124f, 118.118f, -1.1f}; 901 String[] strings = new String[]{"This", "is", "a", "typed", "array"}; 902 boolean[] booleans = new boolean[]{false, true, true, false}; 903 904 905 FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(512), 906 FlexBuffersBuilder.BUILDER_FLAG_NONE); 907 908 int mapPos = builder.startMap(); 909 910 int vecPos = builder.startVector(); 911 for (final int i : ints) { 912 builder.putInt(i); 913 } 914 builder.endVector("ints", vecPos, true, false); 915 916 vecPos = builder.startVector(); 917 for (final float i : floats) { 918 builder.putFloat(i); 919 } 920 builder.endVector("floats", vecPos, true, false); 921 922 vecPos = builder.startVector(); 923 for (final boolean i : booleans) { 924 builder.putBoolean(i); 925 } 926 builder.endVector("booleans", vecPos, true, false); 927 928 builder.endMap(null, mapPos); 929 930 931 ByteBuffer b = builder.finish(); 932 FlexBuffers.Reference r = FlexBuffers.getRoot(b); 933 assert(r.asMap().get("ints").isTypedVector()); 934 assert(r.asMap().get("floats").isTypedVector()); 935 assert(r.asMap().get("booleans").isTypedVector()); 936 } 937 testSingleElementVector()938 @org.junit.Test public void testSingleElementVector() { 939 FlexBuffersBuilder b = new FlexBuffersBuilder(); 940 941 int vecPos = b.startVector(); 942 b.putInt(99); 943 b.putString("wow"); 944 b.putNull(); 945 int vecpos2 = b.startVector(); 946 b.putInt(99); 947 b.putString("wow"); 948 b.putNull(); 949 b.endVector(null, vecpos2, false, false); 950 b.endVector(null, vecPos, false, false); 951 b.finish(); 952 953 FlexBuffers.Reference r = FlexBuffers.getRoot(b.getBuffer()); 954 assertThat(FlexBuffers.FBT_VECTOR).isEqualTo(r.getType()); 955 FlexBuffers.Vector vec = FlexBuffers.getRoot(b.getBuffer()).asVector(); 956 assertThat(4).isEqualTo(vec.size()); 957 assertThat(99).isEqualTo(vec.get(0).asInt()); 958 assertThat("wow").isEqualTo(vec.get(1).asString()); 959 assertThat(true).isEqualTo(vec.get(2).isNull()); 960 assertThat("[ 99, \"wow\", null ]").isEqualTo(vec.get(3).toString()); 961 assertThat("[ 99, \"wow\", null, [ 99, \"wow\", null ] ]").isEqualTo( 962 FlexBuffers.getRoot(b.getBuffer()).toString()); 963 } 964 testSingleElementMap()965 @org.junit.Test public void testSingleElementMap() { 966 FlexBuffersBuilder b = new FlexBuffersBuilder(); 967 968 int mapPost = b.startMap(); 969 b.putInt("myInt", 0x7fffffbbbfffffffL); 970 b.putString("myString", "wow"); 971 b.putString("myString2", "incredible"); 972 b.putNull("myNull"); 973 int start = b.startVector(); 974 b.putInt(99); 975 b.putString("wow"); 976 b.endVector("myVec", start, false, false); 977 978 b.putFloat("double", 0x1.ffffbbbffffffP+1023); 979 b.endMap(null, mapPost); 980 b.finish(); 981 982 FlexBuffers.Reference r = FlexBuffers.getRoot(b.getBuffer()); 983 assertThat(FlexBuffers.FBT_MAP).isEqualTo(r.getType()); 984 FlexBuffers.Map map = FlexBuffers.getRoot(b.getBuffer()).asMap(); 985 assertThat(6).isEqualTo(map.size()); 986 assertThat(0x7fffffbbbfffffffL).isEqualTo(map.get("myInt").asLong()); 987 assertThat("wow").isEqualTo(map.get("myString").asString()); 988 assertThat("incredible").isEqualTo(map.get("myString2").asString()); 989 assertThat(true).isEqualTo(map.get("myNull").isNull()); 990 assertThat(99).isEqualTo(map.get("myVec").asVector().get(0).asInt()); 991 assertThat("wow").isEqualTo(map.get("myVec").asVector().get(1).asString()); 992 assertThat(Double.compare(0x1.ffffbbbffffffP+1023, map.get("double").asFloat())).isEqualTo(0); 993 assertThat( 994 "{ \"double\" : 1.7976894783391937E308, \"myInt\" : 9223371743723257855, \"myNull\" : null, \"myString\" : \"wow\", \"myString2\" : \"incredible\", \"myVec\" : [ 99, \"wow\" ] }").isEqualTo( 995 FlexBuffers.getRoot(b.getBuffer()).toString()); 996 } 997 testFlexBuferEmpty()998 @org.junit.Test public void testFlexBuferEmpty() { 999 FlexBuffers.Blob blob = FlexBuffers.Blob.empty(); 1000 FlexBuffers.Map ary = FlexBuffers.Map.empty(); 1001 FlexBuffers.Vector map = FlexBuffers.Vector.empty(); 1002 FlexBuffers.TypedVector typedAry = FlexBuffers.TypedVector.empty(); 1003 assertThat(blob.size()).isEqualTo(0); 1004 assertThat(map.size()).isEqualTo(0); 1005 assertThat(ary.size()).isEqualTo(0); 1006 assertThat(typedAry.size()).isEqualTo(0); 1007 } 1008 testHashMapToMap()1009 @org.junit.Test public void testHashMapToMap() { 1010 int entriesCount = 12; 1011 1012 HashMap<String, String> source = new HashMap<>(); 1013 for (int i = 0; i < entriesCount; i++) { 1014 source.put("foo_param_" + i, "foo_value_" + i); 1015 } 1016 1017 FlexBuffersBuilder builder = new FlexBuffersBuilder(1000); 1018 int mapStart = builder.startMap(); 1019 for (Map.Entry<String, String> entry : source.entrySet()) { 1020 builder.putString(entry.getKey(), entry.getValue()); 1021 } 1022 builder.endMap(null, mapStart); 1023 ByteBuffer bb = builder.finish(); 1024 bb.rewind(); 1025 1026 FlexBuffers.Reference rootReference = FlexBuffers.getRoot(bb); 1027 1028 assertThat(rootReference.isMap()).isTrue(); 1029 1030 FlexBuffers.Map flexMap = rootReference.asMap(); 1031 1032 FlexBuffers.KeyVector keys = flexMap.keys(); 1033 FlexBuffers.Vector values = flexMap.values(); 1034 1035 assertThat(entriesCount).isEqualTo(keys.size()); 1036 assertThat(entriesCount).isEqualTo(values.size()); 1037 1038 HashMap<String, String> result = new HashMap<>(); 1039 for (int i = 0; i < keys.size(); i++) { 1040 result.put(keys.get(i).toString(), values.get(i).asString()); 1041 } 1042 1043 assertThat(source).isEqualTo(result); 1044 } 1045 testBuilderGrowth()1046 @org.junit.Test public void testBuilderGrowth() { 1047 FlexBuffersBuilder builder = new FlexBuffersBuilder(); 1048 String someString = "This is a small string"; 1049 builder.putString(someString); 1050 ByteBuffer b = builder.finish(); 1051 assertThat(someString).isEqualTo(FlexBuffers.getRoot(b).asString()); 1052 1053 FlexBuffersBuilder failBuilder = new FlexBuffersBuilder(ByteBuffer.allocate(1)); 1054 failBuilder.putString(someString); 1055 } 1056 1057 @org.junit.Test testFlexBuffersUtf8Map()1058 public void testFlexBuffersUtf8Map() { 1059 FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(512), 1060 FlexBuffersBuilder.BUILDER_FLAG_SHARE_KEYS_AND_STRINGS); 1061 1062 String key0 = " face1"; 1063 String key1 = " face2"; 1064 String key2 = " face3"; 1065 String key3 = "trademark ®"; 1066 String key4 = "€ euro"; 1067 String utf8keys[] = { " face1", " face2", " face3", "trademark ®", "€ euro"}; 1068 1069 int map = builder.startMap(); 1070 1071 for (int i=0; i< utf8keys.length; i++) { 1072 builder.putString(utf8keys[i], utf8keys[i]); // Testing key and string reuse. 1073 } 1074 builder.endMap(null, map); 1075 builder.finish(); 1076 1077 FlexBuffers.Map m = FlexBuffers.getRoot(builder.getBuffer()).asMap(); 1078 1079 assertThat(m.size()).isEqualTo(5); 1080 1081 KeyVector kv = m.keys(); 1082 for (int i=0; i< utf8keys.length; i++) { 1083 assertThat(kv.get(i).toString()).isEqualTo(m.get(i).asString()); 1084 } 1085 1086 assertThat(m.get(key0).asString()).isEqualTo(utf8keys[0]); 1087 assertThat(m.get(key1).asString()).isEqualTo(utf8keys[1]); 1088 assertThat(m.get(key2).asString()).isEqualTo(utf8keys[2]); 1089 assertThat(m.get(key3).asString()).isEqualTo(utf8keys[3]); 1090 assertThat(m.get(key4).asString()).isEqualTo(utf8keys[4]); 1091 } 1092 testFlexBuffersMapLookup()1093 @org.junit.Test public void testFlexBuffersMapLookup() { 1094 FlexBuffersBuilder builder = new FlexBuffersBuilder(ByteBuffer.allocate(512), 1095 FlexBuffersBuilder.BUILDER_FLAG_SHARE_KEYS_AND_STRINGS); 1096 1097 String key0 = "123"; 1098 String key1 = "1234"; 1099 String key2 = "12345"; 1100 String[] keys = new String[]{key0, key1, key2}; 1101 1102 int map = builder.startMap(); 1103 1104 for (int i=0; i< keys.length; i++) { 1105 builder.putString(keys[i], keys[i]); // Testing key and string reuse. 1106 } 1107 builder.endMap(null, map); 1108 builder.finish(); 1109 1110 FlexBuffers.Map m = FlexBuffers.getRoot(builder.getBuffer()).asMap(); 1111 for (int i=0; i< keys.length; i++) { 1112 assertThat(m.get(keys[i]).asString()).isEqualTo(keys[i]); 1113 assertThat(m.get(keys[i].getBytes(StandardCharsets.UTF_8)).asString()).isEqualTo(keys[i]); 1114 } 1115 } 1116 TestDictionaryLookup()1117 @org.junit.Test public void TestDictionaryLookup() { 1118 FlatBufferBuilder fbb = new FlatBufferBuilder(16); 1119 int lfIndex = LongFloatEntry.createLongFloatEntry(fbb, 0, 99); 1120 int vectorEntriesIdx = LongFloatMap.createEntriesVector(fbb, new int[] { lfIndex }); 1121 int rootIdx = LongFloatMap.createLongFloatMap(fbb, vectorEntriesIdx); 1122 1123 LongFloatMap.finishLongFloatMapBuffer(fbb, rootIdx); 1124 LongFloatMap map = LongFloatMap.getRootAsLongFloatMap(fbb.dataBuffer()); 1125 assertThat(map.entriesLength()).isEqualTo(1); 1126 1127 LongFloatEntry e = map.entries(0); 1128 assertThat(e.key()).isEqualTo(0L); 1129 assertThat(e.value()).isEqualTo(99.0f); 1130 1131 LongFloatEntry e2 = map.entriesByKey(0); 1132 assertThat(e2.key()).isEqualTo(0L); 1133 assertThat(e2.value()).isEqualTo(99.0f); 1134 } 1135 TestVectorOfBytes()1136 @org.junit.Test public void TestVectorOfBytes() { 1137 FlatBufferBuilder fbb = new FlatBufferBuilder(16); 1138 int str = fbb.createString("ByteMonster"); 1139 byte[] data = new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 1140 int offset = Monster.createInventoryVector(fbb, data); 1141 Monster.startMonster(fbb); 1142 Monster.addName(fbb, str); 1143 Monster.addInventory(fbb, offset); 1144 int monster1 = Monster.endMonster(fbb); 1145 Monster.finishMonsterBuffer(fbb, monster1); 1146 Monster monsterObject = Monster.getRootAsMonster(fbb.dataBuffer()); 1147 1148 assertThat(monsterObject.inventoryLength()).isEqualTo(data.length); 1149 assertThat((Integer) monsterObject.inventory(4)).isEqualTo((int) data[4]); 1150 assertThat(ByteBuffer.wrap(data)).isEqualTo(monsterObject.inventoryAsByteBuffer()); 1151 1152 fbb.clear(); 1153 ByteBuffer bb = ByteBuffer.wrap(data); 1154 offset = fbb.createByteVector(bb); 1155 str = fbb.createString("ByteMonster"); 1156 Monster.startMonster(fbb); 1157 Monster.addName(fbb, str); 1158 Monster.addInventory(fbb, offset); 1159 monster1 = Monster.endMonster(fbb); 1160 Monster.finishMonsterBuffer(fbb, monster1); 1161 Monster monsterObject2 = Monster.getRootAsMonster(fbb.dataBuffer()); 1162 1163 assertThat(monsterObject2.inventoryLength()).isEqualTo(data.length); 1164 for (int i = 0; i < data.length; i++) { 1165 assertThat((Integer) monsterObject2.inventory(i)).isEqualTo((int) bb.get(i)); 1166 } 1167 1168 fbb.clear(); 1169 offset = fbb.createByteVector(data, 3, 4); 1170 str = fbb.createString("ByteMonster"); 1171 Monster.startMonster(fbb); 1172 Monster.addName(fbb, str); 1173 Monster.addInventory(fbb, offset); 1174 monster1 = Monster.endMonster(fbb); 1175 Monster.finishMonsterBuffer(fbb, monster1); 1176 Monster monsterObject3 = Monster.getRootAsMonster(fbb.dataBuffer()); 1177 1178 assertThat(monsterObject3.inventoryLength()).isEqualTo(4); 1179 assertThat((Integer) monsterObject3.inventory(0)).isEqualTo((int) data[3]); 1180 1181 fbb.clear(); 1182 bb = ByteBuffer.wrap(data); 1183 offset = Monster.createInventoryVector(fbb, bb); 1184 str = fbb.createString("ByteMonster"); 1185 Monster.startMonster(fbb); 1186 Monster.addName(fbb, str); 1187 Monster.addInventory(fbb, offset); 1188 monster1 = Monster.endMonster(fbb); 1189 Monster.finishMonsterBuffer(fbb, monster1); 1190 Monster monsterObject4 = Monster.getRootAsMonster(fbb.dataBuffer()); 1191 1192 assertThat(monsterObject4.inventoryLength()).isEqualTo(data.length); 1193 assertThat((Integer) monsterObject4.inventory(8)).isEqualTo((int) 8); 1194 1195 fbb.clear(); 1196 byte[] largeData = new byte[1024]; 1197 offset = fbb.createByteVector(largeData); 1198 str = fbb.createString("ByteMonster"); 1199 Monster.startMonster(fbb); 1200 Monster.addName(fbb, str); 1201 Monster.addInventory(fbb, offset); 1202 monster1 = Monster.endMonster(fbb); 1203 Monster.finishMonsterBuffer(fbb, monster1); 1204 Monster monsterObject5 = Monster.getRootAsMonster(fbb.dataBuffer()); 1205 1206 assertThat(monsterObject5.inventoryLength()).isEqualTo(largeData.length); 1207 assertThat((Integer) monsterObject5.inventory(25)).isEqualTo((int) largeData[25]); 1208 1209 fbb.clear(); 1210 bb = ByteBuffer.wrap(largeData); 1211 bb.position(512); 1212 ByteBuffer bb2 = bb.slice(); 1213 assertThat(bb2.arrayOffset()).isEqualTo(512); 1214 offset = fbb.createByteVector(bb2); 1215 str = fbb.createString("ByteMonster"); 1216 Monster.startMonster(fbb); 1217 Monster.addName(fbb, str); 1218 Monster.addInventory(fbb, offset); 1219 monster1 = Monster.endMonster(fbb); 1220 Monster.finishMonsterBuffer(fbb, monster1); 1221 Monster monsterObject6 = Monster.getRootAsMonster(fbb.dataBuffer()); 1222 1223 assertThat(monsterObject6.inventoryLength()).isEqualTo(512); 1224 assertThat((Integer) monsterObject6.inventory(0)).isEqualTo((int) largeData[512]); 1225 1226 fbb.clear(); 1227 bb = ByteBuffer.wrap(largeData); 1228 bb.limit(256); 1229 offset = fbb.createByteVector(bb); 1230 str = fbb.createString("ByteMonster"); 1231 Monster.startMonster(fbb); 1232 Monster.addName(fbb, str); 1233 Monster.addInventory(fbb, offset); 1234 monster1 = Monster.endMonster(fbb); 1235 Monster.finishMonsterBuffer(fbb, monster1); 1236 Monster monsterObject7 = Monster.getRootAsMonster(fbb.dataBuffer()); 1237 1238 assertThat(monsterObject7.inventoryLength()).isEqualTo(256); 1239 1240 fbb.clear(); 1241 bb = ByteBuffer.allocateDirect(2048); 1242 offset = fbb.createByteVector(bb); 1243 str = fbb.createString("ByteMonster"); 1244 Monster.startMonster(fbb); 1245 Monster.addName(fbb, str); 1246 Monster.addInventory(fbb, offset); 1247 monster1 = Monster.endMonster(fbb); 1248 Monster.finishMonsterBuffer(fbb, monster1); 1249 Monster monsterObject8 = Monster.getRootAsMonster(fbb.dataBuffer()); 1250 1251 assertThat(monsterObject8.inventoryLength()).isEqualTo(2048); 1252 } 1253 TestSharedStringPool()1254 @org.junit.Test public void TestSharedStringPool() { 1255 FlatBufferBuilder fb = new FlatBufferBuilder(1); 1256 String testString = "My string"; 1257 int offset = fb.createSharedString(testString); 1258 for (int i=0; i< 10; i++) { 1259 assertThat(offset).isEqualTo(fb.createSharedString(testString)); 1260 } 1261 } 1262 TestScalarOptional()1263 @org.junit.Test public void TestScalarOptional() { 1264 FlatBufferBuilder fbb = new FlatBufferBuilder(1); 1265 ScalarStuff.startScalarStuff(fbb); 1266 int pos = ScalarStuff.endScalarStuff(fbb); 1267 fbb.finish(pos); 1268 1269 ScalarStuff scalarStuff = ScalarStuff.getRootAsScalarStuff(fbb.dataBuffer()); 1270 assertThat(scalarStuff.justI8()).isEqualTo((byte)0); 1271 assertThat(scalarStuff.maybeI8()).isEqualTo((byte)0); 1272 assertThat(scalarStuff.defaultI8()).isEqualTo((byte)42); 1273 assertThat(scalarStuff.justU8()).isEqualTo(0); 1274 assertThat(scalarStuff.maybeU8()).isEqualTo(0); 1275 assertThat(scalarStuff.defaultU8()).isEqualTo(42); 1276 assertThat(scalarStuff.justI16()).isEqualTo((short)0); 1277 assertThat(scalarStuff.maybeI16()).isEqualTo((short)0); 1278 assertThat(scalarStuff.defaultI16()).isEqualTo((short)42); 1279 assertThat(scalarStuff.justU16()).isEqualTo(0); 1280 assertThat(scalarStuff.maybeU16()).isEqualTo(0); 1281 assertThat(scalarStuff.defaultU16()).isEqualTo(42); 1282 assertThat(scalarStuff.justI32()).isEqualTo(0); 1283 assertThat(scalarStuff.maybeI32()).isEqualTo(0); 1284 assertThat(scalarStuff.defaultI32()).isEqualTo(42); 1285 assertThat(scalarStuff.justU32()).isEqualTo(0L); 1286 assertThat(scalarStuff.maybeU32()).isEqualTo(0L); 1287 assertThat(scalarStuff.defaultU32()).isEqualTo(42L); 1288 assertThat(scalarStuff.justI64()).isEqualTo(0L); 1289 assertThat(scalarStuff.maybeI64()).isEqualTo(0L); 1290 assertThat(scalarStuff.defaultI64()).isEqualTo(42L); 1291 assertThat(scalarStuff.justU64()).isEqualTo(0L); 1292 assertThat(scalarStuff.maybeU64()).isEqualTo(0L); 1293 assertThat(scalarStuff.defaultU64()).isEqualTo(42L); 1294 assertThat(scalarStuff.justF32()).isEqualTo(0.0f); 1295 assertThat(scalarStuff.maybeF32()).isEqualTo(0f); 1296 assertThat(scalarStuff.defaultF32()).isEqualTo(42.0f); 1297 assertThat(scalarStuff.justF64()).isEqualTo(0.0); 1298 assertThat(scalarStuff.maybeF64()).isEqualTo(0.0); 1299 assertThat(scalarStuff.defaultF64()).isEqualTo(42.0); 1300 assertThat(scalarStuff.justBool()).isFalse(); 1301 assertThat(scalarStuff.maybeBool()).isFalse(); 1302 assertThat(scalarStuff.defaultBool()).isTrue(); 1303 assertThat(scalarStuff.justEnum()).isEqualTo(OptionalByte.None); 1304 assertThat(scalarStuff.maybeEnum()).isEqualTo(OptionalByte.None); 1305 assertThat(scalarStuff.defaultEnum()).isEqualTo(OptionalByte.One); 1306 1307 assertThat(scalarStuff.hasMaybeI8()).isFalse(); 1308 assertThat(scalarStuff.hasMaybeI16()).isFalse(); 1309 assertThat(scalarStuff.hasMaybeI32()).isFalse(); 1310 assertThat(scalarStuff.hasMaybeI64()).isFalse(); 1311 assertThat(scalarStuff.hasMaybeU8()).isFalse(); 1312 assertThat(scalarStuff.hasMaybeU16()).isFalse(); 1313 assertThat(scalarStuff.hasMaybeU32()).isFalse(); 1314 assertThat(scalarStuff.hasMaybeU64()).isFalse(); 1315 assertThat(scalarStuff.hasMaybeF32()).isFalse(); 1316 assertThat(scalarStuff.hasMaybeF64()).isFalse(); 1317 assertThat(scalarStuff.hasMaybeBool()).isFalse(); 1318 assertThat(scalarStuff.hasMaybeEnum()).isFalse(); 1319 1320 fbb.clear(); 1321 1322 ScalarStuff.startScalarStuff(fbb); 1323 ScalarStuff.addJustI8(fbb, (byte)5); 1324 ScalarStuff.addMaybeI8(fbb, (byte)5); 1325 ScalarStuff.addDefaultI8(fbb, (byte)5); 1326 ScalarStuff.addJustU8(fbb, 6); 1327 ScalarStuff.addMaybeU8(fbb, 6); 1328 ScalarStuff.addDefaultU8(fbb, 6); 1329 ScalarStuff.addJustI16(fbb, (short)7); 1330 ScalarStuff.addMaybeI16(fbb, (short)7); 1331 ScalarStuff.addDefaultI16(fbb, (short)7); 1332 ScalarStuff.addJustU16(fbb, 8); 1333 ScalarStuff.addMaybeU16(fbb, 8); 1334 ScalarStuff.addDefaultU16(fbb, 8); 1335 ScalarStuff.addJustI32(fbb, 9); 1336 ScalarStuff.addMaybeI32(fbb, 9); 1337 ScalarStuff.addDefaultI32(fbb, 9); 1338 ScalarStuff.addJustU32(fbb, (long)10); 1339 ScalarStuff.addMaybeU32(fbb, (long)10); 1340 ScalarStuff.addDefaultU32(fbb, (long)10); 1341 ScalarStuff.addJustI64(fbb, 11L); 1342 ScalarStuff.addMaybeI64(fbb, 11L); 1343 ScalarStuff.addDefaultI64(fbb, 11L); 1344 ScalarStuff.addJustU64(fbb, 12L); 1345 ScalarStuff.addMaybeU64(fbb, 12L); 1346 ScalarStuff.addDefaultU64(fbb, 12L); 1347 ScalarStuff.addJustF32(fbb, 13.0f); 1348 ScalarStuff.addMaybeF32(fbb, 13.0f); 1349 ScalarStuff.addDefaultF32(fbb, 13.0f); 1350 ScalarStuff.addJustF64(fbb, 14.0); 1351 ScalarStuff.addMaybeF64(fbb, 14.0); 1352 ScalarStuff.addDefaultF64(fbb, 14.0); 1353 ScalarStuff.addJustBool(fbb, true); 1354 ScalarStuff.addMaybeBool(fbb, true); 1355 ScalarStuff.addDefaultBool(fbb, true); 1356 ScalarStuff.addJustEnum(fbb, OptionalByte.Two); 1357 ScalarStuff.addMaybeEnum(fbb, OptionalByte.Two); 1358 ScalarStuff.addDefaultEnum(fbb, OptionalByte.Two); 1359 1360 pos = ScalarStuff.endScalarStuff(fbb); 1361 1362 fbb.finish(pos); 1363 1364 scalarStuff = ScalarStuff.getRootAsScalarStuff(fbb.dataBuffer()); 1365 1366 assertThat(scalarStuff.justI8()).isEqualTo((byte)5); 1367 assertThat(scalarStuff.maybeI8()).isEqualTo((byte)5); 1368 assertThat(scalarStuff.defaultI8()).isEqualTo((byte)5); 1369 assertThat(scalarStuff.justU8()).isEqualTo(6); 1370 assertThat(scalarStuff.maybeU8()).isEqualTo(6); 1371 assertThat(scalarStuff.defaultU8()).isEqualTo(6); 1372 assertThat(scalarStuff.justI16()).isEqualTo((short)7); 1373 assertThat(scalarStuff.maybeI16()).isEqualTo((short)7); 1374 assertThat(scalarStuff.defaultI16()).isEqualTo((short)7); 1375 assertThat(scalarStuff.justU16()).isEqualTo(8); 1376 assertThat(scalarStuff.maybeU16()).isEqualTo(8); 1377 assertThat(scalarStuff.defaultU16()).isEqualTo(8); 1378 assertThat(scalarStuff.justI32()).isEqualTo(9); 1379 assertThat(scalarStuff.maybeI32()).isEqualTo(9); 1380 assertThat(scalarStuff.defaultI32()).isEqualTo(9); 1381 assertThat(scalarStuff.justU32()).isEqualTo(10L); 1382 assertThat(scalarStuff.maybeU32()).isEqualTo(10L); 1383 assertThat(scalarStuff.defaultU32()).isEqualTo(10L); 1384 assertThat(scalarStuff.justI64()).isEqualTo(11L); 1385 assertThat(scalarStuff.maybeI64()).isEqualTo(11L); 1386 assertThat(scalarStuff.defaultI64()).isEqualTo(11L); 1387 assertThat(scalarStuff.justU64()).isEqualTo(12L); 1388 assertThat(scalarStuff.maybeU64()).isEqualTo(12L); 1389 assertThat(scalarStuff.defaultU64()).isEqualTo(12L); 1390 assertThat(scalarStuff.justF32()).isEqualTo(13.0f); 1391 assertThat(scalarStuff.maybeF32()).isEqualTo(13.0f); 1392 assertThat(scalarStuff.defaultF32()).isEqualTo(13.0f); 1393 assertThat(scalarStuff.justF64()).isEqualTo(14.0); 1394 assertThat(scalarStuff.maybeF64()).isEqualTo(14.0); 1395 assertThat(scalarStuff.defaultF64()).isEqualTo(14.0); 1396 assertThat(scalarStuff.justBool()).isTrue(); 1397 assertThat(scalarStuff.maybeBool()).isTrue(); 1398 assertThat(scalarStuff.defaultBool()).isTrue(); 1399 assertThat(scalarStuff.justEnum()).isEqualTo(OptionalByte.Two); 1400 assertThat(scalarStuff.maybeEnum()).isEqualTo(OptionalByte.Two); 1401 assertThat(scalarStuff.defaultEnum()).isEqualTo(OptionalByte.Two); 1402 1403 assertThat(scalarStuff.hasMaybeI8()).isTrue(); 1404 assertThat(scalarStuff.hasMaybeI16()).isTrue(); 1405 assertThat(scalarStuff.hasMaybeI32()).isTrue(); 1406 assertThat(scalarStuff.hasMaybeI64()).isTrue(); 1407 assertThat(scalarStuff.hasMaybeU8()).isTrue(); 1408 assertThat(scalarStuff.hasMaybeU16()).isTrue(); 1409 assertThat(scalarStuff.hasMaybeU32()).isTrue(); 1410 assertThat(scalarStuff.hasMaybeU64()).isTrue(); 1411 assertThat(scalarStuff.hasMaybeF32()).isTrue(); 1412 assertThat(scalarStuff.hasMaybeF64()).isTrue(); 1413 assertThat(scalarStuff.hasMaybeBool()).isTrue(); 1414 assertThat(scalarStuff.hasMaybeEnum()).isTrue(); 1415 } 1416 TestObject(MonsterT monster)1417 static void TestObject(MonsterT monster) { 1418 assertThat(monster.getHp()).isEqualTo((short) 80); 1419 // default 1420 assertThat(monster.getMana()).isEqualTo((short) 150); 1421 1422 assertThat(monster.getName()).isEqualTo("MyMonster"); 1423 assertThat(monster.getColor()).isEqualTo((Integer) Color.Blue); 1424 // monster.friendly() // can't access, deprecated 1425 1426 Vec3T pos = monster.getPos(); 1427 assertThat(pos.getX()).isEqualTo(1.0f); 1428 assertThat(pos.getY()).isEqualTo(2.0f); 1429 assertThat(pos.getZ()).isEqualTo(3.0f); 1430 assertThat(pos.getTest1()).isEqualTo(3.0); 1431 // issue: int != byte 1432 assertThat(pos.getTest2()).isEqualTo((int) Color.Green); 1433 TestT t = pos.getTest3(); 1434 assertThat(t.getA()).isEqualTo((short) 5); 1435 assertThat(t.getB()).isEqualTo((byte) 6); 1436 1437 assertThat(monster.getTest().getType()).isEqualTo((byte) Any.Monster); 1438 MonsterT monster2 = (MonsterT) monster.getTest().getValue(); 1439 assertThat(monster2 != null).isTrue(); 1440 assertThat(monster2.getName()).isEqualTo("Fred"); 1441 1442 int[] inv = monster.getInventory(); 1443 assertThat(inv.length).isEqualTo(5); 1444 int[] expInv = {0, 1, 2, 3, 4}; 1445 for (int i = 0; i < inv.length; i++) 1446 assertThat(expInv[i]).isEqualTo(inv[i]); 1447 1448 TestT[] test4 = monster.getTest4(); 1449 TestT test_0 = test4[0]; 1450 TestT test_1 = test4[1]; 1451 assertThat(test4.length).isEqualTo(2); 1452 assertThat(test_0.getA()).isEqualTo((short) 10); 1453 assertThat(test_0.getB()).isEqualTo((byte) 20); 1454 assertThat(test_1.getA()).isEqualTo((short) 30); 1455 assertThat(test_1.getB()).isEqualTo((byte) 40); 1456 1457 String[] testarrayofstring = monster.getTestarrayofstring(); 1458 assertThat(testarrayofstring.length).isEqualTo(2); 1459 assertThat(testarrayofstring[0]).isEqualTo("test1"); 1460 assertThat(testarrayofstring[1]).isEqualTo("test2"); 1461 1462 MonsterT[] testarrayoftables = monster.getTestarrayoftables(); 1463 assertThat(testarrayoftables.length).isEqualTo(0); 1464 1465 MonsterT enemy = monster.getEnemy(); 1466 assertThat(enemy != null).isTrue(); 1467 assertThat(enemy.getName()).isEqualTo("Fred"); 1468 1469 int[] testnestedflatbuffer = monster.getTestnestedflatbuffer(); 1470 assertThat(testnestedflatbuffer.length).isEqualTo(0); 1471 1472 assertThat(monster.getTestempty() == null).isTrue(); 1473 1474 assertThat(monster.getTestbool()).isTrue(); 1475 1476 boolean[] testarrayofbools = monster.getTestarrayofbools(); 1477 assertThat(testarrayofbools.length).isEqualTo(3); 1478 assertThat(testarrayofbools[0]).isTrue(); 1479 assertThat(testarrayofbools[1]).isFalse(); 1480 assertThat(testarrayofbools[2]).isTrue(); 1481 1482 assertThat(monster.getTestf()).isEqualTo(3.14159f); 1483 assertThat(monster.getTestf2()).isEqualTo(3.0f); 1484 assertThat(monster.getTestf3()).isEqualTo(0.0f); 1485 assertThat(monster.getTestf3()).isEqualTo(0.0f); 1486 1487 AbilityT[] testarrayofsortedstruct = monster.getTestarrayofsortedstruct(); 1488 assertThat(testarrayofsortedstruct.length).isEqualTo(3); 1489 assertThat(testarrayofsortedstruct[0].getId()).isEqualTo((long) 0); 1490 assertThat(testarrayofsortedstruct[1].getId()).isEqualTo((long) 1); 1491 assertThat(testarrayofsortedstruct[2].getId()).isEqualTo((long) 5); 1492 assertThat(testarrayofsortedstruct[0].getDistance()).isEqualTo((long) 45); 1493 assertThat(testarrayofsortedstruct[1].getDistance()).isEqualTo((long) 21); 1494 assertThat(testarrayofsortedstruct[2].getDistance()).isEqualTo((long) 12); 1495 1496 int[] flex = monster.getFlex(); 1497 assertThat(flex.length).isEqualTo(0); 1498 1499 long[] vectorOfLongs = monster.getVectorOfLongs(); 1500 assertThat(vectorOfLongs.length).isEqualTo(5); 1501 long l = 1; 1502 for (int i = 0; i < vectorOfLongs.length; i++) { 1503 assertThat(vectorOfLongs[i]).isEqualTo(l); 1504 l *= 100; 1505 } 1506 1507 double[] vectorOfDoubles = monster.getVectorOfDoubles(); 1508 assertThat(vectorOfDoubles.length).isEqualTo(3); 1509 assertThat(vectorOfDoubles[0]).isEqualTo(-1.7976931348623157E308); 1510 assertThat(vectorOfDoubles[1]).isEqualTo(0.0); 1511 assertThat(vectorOfDoubles[2]).isEqualTo(1.7976931348623157E308); 1512 1513 assertThat(monster.getParentNamespaceTest() == null).isTrue(); 1514 ReferrableT[] vectorOfReferrables = monster.getVectorOfReferrables(); 1515 assertThat(vectorOfReferrables.length).isEqualTo(0); 1516 1517 assertThat(monster.getSignedEnum()).isEqualTo((byte) -1); 1518 } 1519 TestPackUnpack(ByteBuffer bb)1520 static void TestPackUnpack(ByteBuffer bb) { 1521 Monster m = Monster.getRootAsMonster(bb); 1522 MonsterT mObject = m.unpack(); 1523 TestObject(mObject); 1524 FlatBufferBuilder fbb = new FlatBufferBuilder(); 1525 int monster = Monster.pack(fbb, mObject); 1526 Monster.finishMonsterBuffer(fbb, monster); 1527 TestBuffer(fbb.dataBuffer()); 1528 1529 byte[] bytes = mObject.serializeToBinary(); 1530 MonsterT newMonsterT = MonsterT.deserializeFromBinary(bytes); 1531 TestObject(newMonsterT); 1532 } 1533 } 1534