blob: f03a3279b27bc08ccc6ad0aef9115a9bcc700206 [file] [log] [blame]
Austin Schuhe89fa2d2019-08-14 20:24:23 -07001var assert = require('assert');
2
3var flatbuffers = require('../js/flatbuffers').flatbuffers;
4var Test = require(process.argv[2]);
5
Austin Schuh272c6132020-11-14 16:37:52 -08006var isTsTest = !!process.env.FB_TS_TEST;
Austin Schuhe89fa2d2019-08-14 20:24:23 -07007
Austin Schuh272c6132020-11-14 16:37:52 -08008var charTypes = [
9 Test.Character.Belle,
10 Test.Character.MuLan,
11 Test.Character.BookFan,
12];
13if(isTsTest) { charTypes.push(Test.Character.Other); }
Austin Schuhe89fa2d2019-08-14 20:24:23 -070014
Austin Schuh272c6132020-11-14 16:37:52 -080015function testMovieBuf(movie) {
Austin Schuhe89fa2d2019-08-14 20:24:23 -070016 assert.strictEqual(movie.charactersTypeLength(), charTypes.length);
17 assert.strictEqual(movie.charactersLength(), movie.charactersTypeLength());
18
19 for (var i = 0; i < charTypes.length; ++i) {
20 assert.strictEqual(movie.charactersType(i), charTypes[i]);
21 }
22
23 var bookReader7 = movie.characters(0, new Test.BookReader());
24 assert.strictEqual(bookReader7.booksRead(), 7);
25
26 var attacker = movie.characters(1, new Test.Attacker());
27 assert.strictEqual(attacker.swordAttackDamage(), 5);
28
29 var bookReader2 = movie.characters(2, new Test.BookReader());
30 assert.strictEqual(bookReader2.booksRead(), 2);
31
Austin Schuh272c6132020-11-14 16:37:52 -080032 if(isTsTest) {
33 var other = movie.characters(3, '');
34 assert.strictEqual(other, "I am other");
35 }
36}
37
38function testMovieUnpack(movie) {
39 assert.strictEqual(movie.charactersType.length, charTypes.length);
40 assert.strictEqual(movie.characters.length, movie.charactersType.length);
41
42 for (var i = 0; i < charTypes.length; ++i) {
43 assert.strictEqual(movie.charactersType[i], charTypes[i]);
44 }
45
46 var bookReader7 = movie.characters[0];
47 assert.strictEqual(bookReader7 instanceof Test.BookReaderT, true);
48 assert.strictEqual(bookReader7.booksRead, 7);
49
50 var attacker = movie.characters[1];
51 assert.strictEqual(attacker instanceof Test.AttackerT, true);
52 assert.strictEqual(attacker.swordAttackDamage, 5);
53
54 var bookReader2 = movie.characters[2];
55 assert.strictEqual(bookReader2 instanceof Test.BookReaderT, true);
56 assert.strictEqual(bookReader2.booksRead, 2);
57
58 if(isTsTest) {
59 var other = movie.characters[3];
60 assert.strictEqual(other, "I am other");
61 }
62}
63
64function createMovie(fbb) {
65 Test.Attacker.startAttacker(fbb);
66 Test.Attacker.addSwordAttackDamage(fbb, 5);
67 var attackerOffset = Test.Attacker.endAttacker(fbb);
68
69 var charTypesOffset = Test.Movie.createCharactersTypeVector(fbb, charTypes);
70 var charsOffset = 0;
71
72 if(isTsTest) {
73 let otherOffset = fbb.createString("I am other");
74
75 charsOffset = Test.Movie.createCharactersVector(
76 fbb,
77 [
78 Test.BookReader.createBookReader(fbb, 7),
79 attackerOffset,
80 Test.BookReader.createBookReader(fbb, 2),
81 otherOffset
82 ]
83 );
84 } else {
85 charsOffset = Test.Movie.createCharactersVector(
86 fbb,
87 [
88 Test.BookReader.createBookReader(fbb, 7),
89 attackerOffset,
90 Test.BookReader.createBookReader(fbb, 2)
91 ]
92 );
93 }
94
95 Test.Movie.startMovie(fbb);
96 Test.Movie.addCharactersType(fbb, charTypesOffset);
97 Test.Movie.addCharacters(fbb, charsOffset);
98 Test.Movie.finishMovieBuffer(fbb, Test.Movie.endMovie(fbb))
99}
100
101function main() {
102 var fbb = new flatbuffers.Builder();
103
104 createMovie(fbb);
105
106 var buf = new flatbuffers.ByteBuffer(fbb.asUint8Array());
107
108 var movie = Test.Movie.getRootAsMovie(buf);
109 testMovieBuf(movie);
110
111 if(isTsTest) {
112 testMovieUnpack(movie.unpack());
113
114 var movie_to = new Test.MovieT();
115 movie.unpackTo(movie_to);
116 testMovieUnpack(movie_to);
117
118 fbb.clear();
119 Test.Movie.finishMovieBuffer(fbb, movie_to.pack(fbb));
120 var unpackBuf = new flatbuffers.ByteBuffer(fbb.asUint8Array());
121 testMovieBuf(Test.Movie.getRootAsMovie(unpackBuf));
122 }
123
Austin Schuhe89fa2d2019-08-14 20:24:23 -0700124 console.log('FlatBuffers union vector test: completed successfully');
125}
126
127main();