James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 1 | import assert from 'assert' |
| 2 | import * as flatbuffers from 'flatbuffers' |
Austin Schuh | e89fa2d | 2019-08-14 20:24:23 -0700 | [diff] [blame] | 3 | |
Austin Schuh | 2dd86a9 | 2022-09-14 21:19:23 -0700 | [diff] [blame^] | 4 | import { Character } from './union_vector/character.js' |
| 5 | import { BookReader, BookReaderT } from './union_vector/book-reader.js' |
| 6 | import { Attacker, AttackerT } from './union_vector/attacker.js' |
| 7 | import { Movie, MovieT } from './union_vector/movie.js' |
Austin Schuh | e89fa2d | 2019-08-14 20:24:23 -0700 | [diff] [blame] | 8 | |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 9 | var charTypes = [ |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 10 | Character.Belle, |
| 11 | Character.MuLan, |
| 12 | Character.BookFan, |
| 13 | Character.Other |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 14 | ]; |
Austin Schuh | e89fa2d | 2019-08-14 20:24:23 -0700 | [diff] [blame] | 15 | |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 16 | function testMovieBuf(movie) { |
Austin Schuh | e89fa2d | 2019-08-14 20:24:23 -0700 | [diff] [blame] | 17 | assert.strictEqual(movie.charactersTypeLength(), charTypes.length); |
| 18 | assert.strictEqual(movie.charactersLength(), movie.charactersTypeLength()); |
| 19 | |
| 20 | for (var i = 0; i < charTypes.length; ++i) { |
| 21 | assert.strictEqual(movie.charactersType(i), charTypes[i]); |
| 22 | } |
| 23 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 24 | var bookReader7 = movie.characters(0, new BookReader()); |
Austin Schuh | e89fa2d | 2019-08-14 20:24:23 -0700 | [diff] [blame] | 25 | assert.strictEqual(bookReader7.booksRead(), 7); |
| 26 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 27 | var attacker = movie.characters(1, new Attacker()); |
Austin Schuh | e89fa2d | 2019-08-14 20:24:23 -0700 | [diff] [blame] | 28 | assert.strictEqual(attacker.swordAttackDamage(), 5); |
| 29 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 30 | var bookReader2 = movie.characters(2, new BookReader()); |
Austin Schuh | e89fa2d | 2019-08-14 20:24:23 -0700 | [diff] [blame] | 31 | assert.strictEqual(bookReader2.booksRead(), 2); |
| 32 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 33 | var other = movie.characters(3, ''); |
| 34 | assert.strictEqual(other, "I am other"); |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 35 | } |
| 36 | |
| 37 | function testMovieUnpack(movie) { |
| 38 | assert.strictEqual(movie.charactersType.length, charTypes.length); |
| 39 | assert.strictEqual(movie.characters.length, movie.charactersType.length); |
| 40 | |
| 41 | for (var i = 0; i < charTypes.length; ++i) { |
| 42 | assert.strictEqual(movie.charactersType[i], charTypes[i]); |
| 43 | } |
| 44 | |
| 45 | var bookReader7 = movie.characters[0]; |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 46 | assert.strictEqual(bookReader7 instanceof BookReaderT, true); |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 47 | assert.strictEqual(bookReader7.booksRead, 7); |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 48 | |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 49 | var attacker = movie.characters[1]; |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 50 | assert.strictEqual(attacker instanceof AttackerT, true); |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 51 | assert.strictEqual(attacker.swordAttackDamage, 5); |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 52 | |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 53 | var bookReader2 = movie.characters[2]; |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 54 | assert.strictEqual(bookReader2 instanceof BookReaderT, true); |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 55 | assert.strictEqual(bookReader2.booksRead, 2); |
| 56 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 57 | var other = movie.characters[3]; |
| 58 | assert.strictEqual(other, "I am other"); |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 59 | } |
| 60 | |
| 61 | function createMovie(fbb) { |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 62 | Attacker.startAttacker(fbb); |
| 63 | Attacker.addSwordAttackDamage(fbb, 5); |
| 64 | var attackerOffset = Attacker.endAttacker(fbb); |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 65 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 66 | var charTypesOffset = Movie.createCharactersTypeVector(fbb, charTypes); |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 67 | var charsOffset = 0; |
| 68 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 69 | let otherOffset = fbb.createString("I am other"); |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 70 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 71 | charsOffset = Movie.createCharactersVector( |
| 72 | fbb, |
| 73 | [ |
| 74 | BookReader.createBookReader(fbb, 7), |
| 75 | attackerOffset, |
| 76 | BookReader.createBookReader(fbb, 2), |
| 77 | otherOffset |
| 78 | ] |
| 79 | ); |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 80 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 81 | Movie.startMovie(fbb); |
| 82 | Movie.addCharactersType(fbb, charTypesOffset); |
| 83 | Movie.addCharacters(fbb, charsOffset); |
| 84 | Movie.finishMovieBuffer(fbb, Movie.endMovie(fbb)) |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 85 | } |
| 86 | |
| 87 | function main() { |
| 88 | var fbb = new flatbuffers.Builder(); |
| 89 | |
| 90 | createMovie(fbb); |
| 91 | |
| 92 | var buf = new flatbuffers.ByteBuffer(fbb.asUint8Array()); |
| 93 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 94 | var movie = Movie.getRootAsMovie(buf); |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 95 | testMovieBuf(movie); |
| 96 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 97 | testMovieUnpack(movie.unpack()); |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 98 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 99 | var movie_to = new MovieT(); |
| 100 | movie.unpackTo(movie_to); |
| 101 | testMovieUnpack(movie_to); |
Austin Schuh | 272c613 | 2020-11-14 16:37:52 -0800 | [diff] [blame] | 102 | |
James Kuszmaul | 8e62b02 | 2022-03-22 09:33:25 -0700 | [diff] [blame] | 103 | fbb.clear(); |
| 104 | Movie.finishMovieBuffer(fbb, movie_to.pack(fbb)); |
| 105 | var unpackBuf = new flatbuffers.ByteBuffer(fbb.asUint8Array()); |
| 106 | testMovieBuf(Movie.getRootAsMovie(unpackBuf)); |
| 107 | |
Austin Schuh | e89fa2d | 2019-08-14 20:24:23 -0700 | [diff] [blame] | 108 | console.log('FlatBuffers union vector test: completed successfully'); |
| 109 | } |
| 110 | |
| 111 | main(); |