1*890232f2SAndroid Build Coastguard Worker /*
2*890232f2SAndroid Build Coastguard Worker  * Copyright 2021 Google Inc. All rights reserved.
3*890232f2SAndroid Build Coastguard Worker  *
4*890232f2SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*890232f2SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*890232f2SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*890232f2SAndroid Build Coastguard Worker  *
8*890232f2SAndroid Build Coastguard Worker  *     http://www.apache.org/licenses/LICENSE-2.0
9*890232f2SAndroid Build Coastguard Worker  *
10*890232f2SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*890232f2SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*890232f2SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*890232f2SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*890232f2SAndroid Build Coastguard Worker  * limitations under the License.
15*890232f2SAndroid Build Coastguard Worker  */
16*890232f2SAndroid Build Coastguard Worker 
17*890232f2SAndroid Build Coastguard Worker import XCTest
18*890232f2SAndroid Build Coastguard Worker @testable import FlatBuffers
19*890232f2SAndroid Build Coastguard Worker 
20*890232f2SAndroid Build Coastguard Worker final class FlatbuffersVerifierTests: XCTestCase {
21*890232f2SAndroid Build Coastguard Worker 
22*890232f2SAndroid Build Coastguard Worker   lazy var validStorage: ByteBuffer.Storage = ByteBuffer.Storage(
23*890232f2SAndroid Build Coastguard Worker     count: Int(FlatBufferMaxSize) - 1,
24*890232f2SAndroid Build Coastguard Worker     alignment: 1)
25*890232f2SAndroid Build Coastguard Worker   lazy var errorStorage: ByteBuffer.Storage = ByteBuffer.Storage(
26*890232f2SAndroid Build Coastguard Worker     count: Int(FlatBufferMaxSize) + 1,
27*890232f2SAndroid Build Coastguard Worker     alignment: 1)
28*890232f2SAndroid Build Coastguard Worker 
29*890232f2SAndroid Build Coastguard Worker   var buffer: ByteBuffer!
30*890232f2SAndroid Build Coastguard Worker 
31*890232f2SAndroid Build Coastguard Worker   var validFlatbuffersObject: ByteBuffer!
32*890232f2SAndroid Build Coastguard Worker   var invalidFlatbuffersObject: ByteBuffer!
33*890232f2SAndroid Build Coastguard Worker 
setUpnull34*890232f2SAndroid Build Coastguard Worker   override func setUp() {
35*890232f2SAndroid Build Coastguard Worker     // swiftformat:disable all
36*890232f2SAndroid Build Coastguard Worker     buffer = ByteBuffer(initialSize: 32)
37*890232f2SAndroid Build Coastguard Worker     add(buffer: &buffer, v: 4, p: 16)
38*890232f2SAndroid Build Coastguard Worker     add(buffer: &buffer, v: 4, p: 20)
39*890232f2SAndroid Build Coastguard Worker 
40*890232f2SAndroid Build Coastguard Worker     validFlatbuffersObject = ByteBuffer(bytes: [48, 0, 0, 0, 77, 79, 78, 83, 0, 0, 0, 0, 36, 0, 72, 0, 40, 0, 0, 0, 38, 0, 32, 0, 0, 0, 28, 0, 0, 0, 27, 0, 20, 0, 16, 0, 12, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 36, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 1, 60, 0, 0, 0, 68, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 120, 0, 0, 0, 0, 0, 80, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, 2, 0, 5, 0, 6, 0, 0, 0, 2, 0, 0, 0, 64, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 30, 0, 40, 0, 10, 0, 20, 0, 152, 255, 255, 255, 4, 0, 0, 0, 4, 0, 0, 0, 70, 114, 101, 100, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 50, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 49, 0, 0, 0, 9, 0, 0, 0, 77, 121, 77, 111, 110, 115, 116, 101, 114, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 4, 0, 0, 0, 240, 255, 255, 255, 32, 0, 0, 0, 248, 255, 255, 255, 36, 0, 0, 0, 12, 0, 8, 0, 0, 0, 0, 0, 0, 0, 4, 0, 12, 0, 0, 0, 28, 0, 0, 0, 5, 0, 0, 0, 87, 105, 108, 109, 97, 0, 0, 0, 6, 0, 0, 0, 66, 97, 114, 110, 101, 121, 0, 0, 5, 0, 0, 0, 70, 114, 111, 100, 111, 0, 0, 0])
41*890232f2SAndroid Build Coastguard Worker 
42*890232f2SAndroid Build Coastguard Worker     invalidFlatbuffersObject = ByteBuffer(bytes: [0, 48, 0, 0, 0, 77, 79, 78, 83, 0, 0, 0, 0, 36, 0, 72, 0, 40, 0, 0, 0, 38, 0, 32, 0, 0, 0, 28, 0, 0, 0, 27, 0, 20, 0, 16, 0, 12, 0, 4, 0, 0, 0, 0, 0, 0, 0, 11, 0, 36, 0, 0, 0, 164, 0, 0, 0, 0, 0, 0, 1, 60, 0, 0, 0, 68, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 1, 88, 0, 0, 0, 120, 0, 0, 0, 0, 0, 80, 0, 0, 0, 128, 63, 0, 0, 0, 64, 0, 0, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 64, 2, 0, 5, 0, 6, 0, 0, 0, 2, 0, 0, 0, 64, 0, 0, 0, 48, 0, 0, 0, 2, 0, 0, 0, 30, 0, 40, 0, 10, 0, 20, 0, 152, 255, 255, 255, 4, 0, 0, 0, 4, 0, 0, 0, 70, 114, 101, 100, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 2, 3, 4, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 50, 0, 0, 0, 5, 0, 0, 0, 116, 101, 115, 116, 49, 0, 0, 0, 9, 0, 0, 0, 77, 121, 77, 111, 110, 115, 116, 101, 114, 0, 0, 0, 3, 0, 0, 0, 20, 0, 0, 0, 36, 0, 0, 0, 4, 0, 0, 0, 240, 255, 255, 255, 32, 0, 0, 0, 248, 255, 255, 255, 36, 0, 0, 0, 12, 0, 8, 0, 0, 0, 0, 0, 0, 0, 4, 0, 12, 0, 0, 0, 28, 0, 0, 0, 5, 0, 0, 0, 87, 105, 108, 109, 97, 0, 0, 0, 6, 0, 0, 0, 66, 97, 114, 110, 101, 121, 0, 0, 5, 0, 0, 0, 70, 114, 111, 100, 111, 0, 0, 0])
43*890232f2SAndroid Build Coastguard Worker 
44*890232f2SAndroid Build Coastguard Worker     // swiftformat:enable all
45*890232f2SAndroid Build Coastguard Worker   }
46*890232f2SAndroid Build Coastguard Worker 
testVeriferInitPassingnull47*890232f2SAndroid Build Coastguard Worker   func testVeriferInitPassing() {
48*890232f2SAndroid Build Coastguard Worker     var buffer = ByteBuffer(initialSize: 0)
49*890232f2SAndroid Build Coastguard Worker     buffer._storage = validStorage
50*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try Verifier(buffer: &buffer))
51*890232f2SAndroid Build Coastguard Worker   }
52*890232f2SAndroid Build Coastguard Worker 
testVeriferInitFailingnull53*890232f2SAndroid Build Coastguard Worker   func testVeriferInitFailing() {
54*890232f2SAndroid Build Coastguard Worker     var buffer = ByteBuffer(initialSize: 0)
55*890232f2SAndroid Build Coastguard Worker     buffer._storage = errorStorage
56*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try Verifier(buffer: &buffer))
57*890232f2SAndroid Build Coastguard Worker   }
58*890232f2SAndroid Build Coastguard Worker 
testVerifierCheckAlignmentnull59*890232f2SAndroid Build Coastguard Worker   func testVerifierCheckAlignment() {
60*890232f2SAndroid Build Coastguard Worker     var verifier = try! Verifier(buffer: &buffer)
61*890232f2SAndroid Build Coastguard Worker     do {
62*890232f2SAndroid Build Coastguard Worker       try verifier.isAligned(position: 20, type: Int.self)
63*890232f2SAndroid Build Coastguard Worker     } catch {
64*890232f2SAndroid Build Coastguard Worker       XCTAssertEqual(
65*890232f2SAndroid Build Coastguard Worker         error as? FlatbuffersErrors,
66*890232f2SAndroid Build Coastguard Worker         .missAlignedPointer(position: 20, type: "Int"))
67*890232f2SAndroid Build Coastguard Worker     }
68*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try verifier.isAligned(position: 16, type: Int.self))
69*890232f2SAndroid Build Coastguard Worker 
70*890232f2SAndroid Build Coastguard Worker     var newVerifer = try! Verifier(buffer: &buffer, checkAlignment: false)
71*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try newVerifer.isAligned(position: 16, type: Int.self))
72*890232f2SAndroid Build Coastguard Worker   }
73*890232f2SAndroid Build Coastguard Worker 
testRangeInBuffernull74*890232f2SAndroid Build Coastguard Worker   func testRangeInBuffer() {
75*890232f2SAndroid Build Coastguard Worker     var verifier = try! Verifier(buffer: &buffer)
76*890232f2SAndroid Build Coastguard Worker     let size = MemoryLayout<Int64>.size
77*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try verifier.rangeInBuffer(position: 24, size: size))
78*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try verifier.rangeInBuffer(position: 26, size: size))
79*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try verifier.rangeInBuffer(position: 26, size: size))
80*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try verifier.rangeInBuffer(position: 30, size: size))
81*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try verifier.rangeInBuffer(position: 32, size: size))
82*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try verifier.rangeInBuffer(position: 34, size: size))
83*890232f2SAndroid Build Coastguard Worker 
84*890232f2SAndroid Build Coastguard Worker     verifier = try! Verifier(
85*890232f2SAndroid Build Coastguard Worker       buffer: &buffer,
86*890232f2SAndroid Build Coastguard Worker       options: .init(maxDepth: 0, maxTableCount: 0, maxApparentSize: 4))
87*890232f2SAndroid Build Coastguard Worker     do {
88*890232f2SAndroid Build Coastguard Worker       try verifier.rangeInBuffer(position: 24, size: size)
89*890232f2SAndroid Build Coastguard Worker     } catch {
90*890232f2SAndroid Build Coastguard Worker       XCTAssertEqual(
91*890232f2SAndroid Build Coastguard Worker         error as! FlatbuffersErrors,
92*890232f2SAndroid Build Coastguard Worker         .apparentSizeTooLarge)
93*890232f2SAndroid Build Coastguard Worker     }
94*890232f2SAndroid Build Coastguard Worker   }
95*890232f2SAndroid Build Coastguard Worker 
testPositionInBuffernull96*890232f2SAndroid Build Coastguard Worker   func testPositionInBuffer() {
97*890232f2SAndroid Build Coastguard Worker     var verifier = try! Verifier(buffer: &buffer)
98*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try verifier.inBuffer(position: 0, of: Int64.self))
99*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try verifier.inBuffer(position: 24, of: Int64.self))
100*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try verifier.inBuffer(position: -9, of: Int64.self))
101*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try verifier.inBuffer(position: 25, of: Int64.self))
102*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try verifier.inBuffer(position: 26, of: Int32.self))
103*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try verifier.inBuffer(position: 26, of: Int64.self))
104*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try verifier.inBuffer(position: 30, of: Int64.self))
105*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try verifier.inBuffer(position: 32, of: Int64.self))
106*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try verifier.inBuffer(position: 34, of: Int64.self))
107*890232f2SAndroid Build Coastguard Worker   }
108*890232f2SAndroid Build Coastguard Worker 
testVisitTablenull109*890232f2SAndroid Build Coastguard Worker   func testVisitTable() {
110*890232f2SAndroid Build Coastguard Worker     var verifier = try! Verifier(buffer: &validFlatbuffersObject)
111*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try verifier.visitTable(at: 48))
112*890232f2SAndroid Build Coastguard Worker     verifier.reset()
113*890232f2SAndroid Build Coastguard Worker   }
114*890232f2SAndroid Build Coastguard Worker 
testTableVerifiernull115*890232f2SAndroid Build Coastguard Worker   func testTableVerifier() {
116*890232f2SAndroid Build Coastguard Worker     var verifier = try! Verifier(buffer: &validFlatbuffersObject)
117*890232f2SAndroid Build Coastguard Worker 
118*890232f2SAndroid Build Coastguard Worker     var tableVerifer = try! verifier.visitTable(at: 48)
119*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try tableVerifer.visit(
120*890232f2SAndroid Build Coastguard Worker       field: 4,
121*890232f2SAndroid Build Coastguard Worker       fieldName: "Vec",
122*890232f2SAndroid Build Coastguard Worker       required: false,
123*890232f2SAndroid Build Coastguard Worker       type: Vec3.self))
124*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try tableVerifer.visit(
125*890232f2SAndroid Build Coastguard Worker       field: 8,
126*890232f2SAndroid Build Coastguard Worker       fieldName: "hp",
127*890232f2SAndroid Build Coastguard Worker       required: false,
128*890232f2SAndroid Build Coastguard Worker       type: Int16.self))
129*890232f2SAndroid Build Coastguard Worker 
130*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try tableVerifer.visit(
131*890232f2SAndroid Build Coastguard Worker       field: 10,
132*890232f2SAndroid Build Coastguard Worker       fieldName: "name",
133*890232f2SAndroid Build Coastguard Worker       required: true,
134*890232f2SAndroid Build Coastguard Worker       type: ForwardOffset<String>.self))
135*890232f2SAndroid Build Coastguard Worker 
136*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try tableVerifer.visit(
137*890232f2SAndroid Build Coastguard Worker       field: 14,
138*890232f2SAndroid Build Coastguard Worker       fieldName: "inventory",
139*890232f2SAndroid Build Coastguard Worker       required: false,
140*890232f2SAndroid Build Coastguard Worker       type: ForwardOffset<Vector<UInt8, UInt8>>.self))
141*890232f2SAndroid Build Coastguard Worker 
142*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try tableVerifer.visit(
143*890232f2SAndroid Build Coastguard Worker       field: 22,
144*890232f2SAndroid Build Coastguard Worker       fieldName: "test4",
145*890232f2SAndroid Build Coastguard Worker       required: false,
146*890232f2SAndroid Build Coastguard Worker       type: ForwardOffset<Vector<MyGame_Example_Test, MyGame_Example_Test>>
147*890232f2SAndroid Build Coastguard Worker         .self))
148*890232f2SAndroid Build Coastguard Worker 
149*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try tableVerifer.visit(
150*890232f2SAndroid Build Coastguard Worker       field: 24,
151*890232f2SAndroid Build Coastguard Worker       fieldName: "Vector of strings",
152*890232f2SAndroid Build Coastguard Worker       required: false,
153*890232f2SAndroid Build Coastguard Worker       type: ForwardOffset<Vector<ForwardOffset<String>, String>>.self))
154*890232f2SAndroid Build Coastguard Worker 
155*890232f2SAndroid Build Coastguard Worker     do {
156*890232f2SAndroid Build Coastguard Worker       try tableVerifer.visit(
157*890232f2SAndroid Build Coastguard Worker         field: 13,
158*890232f2SAndroid Build Coastguard Worker         fieldName: "notvalid",
159*890232f2SAndroid Build Coastguard Worker         required: false,
160*890232f2SAndroid Build Coastguard Worker         type: Int16.self)
161*890232f2SAndroid Build Coastguard Worker     } catch {
162*890232f2SAndroid Build Coastguard Worker       XCTAssertEqual(
163*890232f2SAndroid Build Coastguard Worker         error as! FlatbuffersErrors,
164*890232f2SAndroid Build Coastguard Worker         .missAlignedPointer(position: 25, type: "UInt16"))
165*890232f2SAndroid Build Coastguard Worker     }
166*890232f2SAndroid Build Coastguard Worker 
167*890232f2SAndroid Build Coastguard Worker     do {
168*890232f2SAndroid Build Coastguard Worker       try tableVerifer.visit(
169*890232f2SAndroid Build Coastguard Worker         unionKey: 18,
170*890232f2SAndroid Build Coastguard Worker         unionField: 20,
171*890232f2SAndroid Build Coastguard Worker         unionKeyName: "testType",
172*890232f2SAndroid Build Coastguard Worker         fieldName: "test",
173*890232f2SAndroid Build Coastguard Worker         required: false,
174*890232f2SAndroid Build Coastguard Worker         completion: { (verifier, key: MyGame_Example_Any_, pos) in
175*890232f2SAndroid Build Coastguard Worker           switch key {
176*890232f2SAndroid Build Coastguard Worker           case .none_:
177*890232f2SAndroid Build Coastguard Worker             break
178*890232f2SAndroid Build Coastguard Worker           case .monster:
179*890232f2SAndroid Build Coastguard Worker             try ForwardOffset<MyGame_Example_Monster>.verify(
180*890232f2SAndroid Build Coastguard Worker               &verifier,
181*890232f2SAndroid Build Coastguard Worker               at: pos,
182*890232f2SAndroid Build Coastguard Worker               of: MyGame_Example_Monster.self)
183*890232f2SAndroid Build Coastguard Worker 
184*890232f2SAndroid Build Coastguard Worker           case .testsimpletablewithenum:
185*890232f2SAndroid Build Coastguard Worker             break
186*890232f2SAndroid Build Coastguard Worker           case .mygameExample2Monster:
187*890232f2SAndroid Build Coastguard Worker             break
188*890232f2SAndroid Build Coastguard Worker           }
189*890232f2SAndroid Build Coastguard Worker         })
190*890232f2SAndroid Build Coastguard Worker     } catch {
191*890232f2SAndroid Build Coastguard Worker       XCTAssertEqual(
192*890232f2SAndroid Build Coastguard Worker         error as! FlatbuffersErrors,
193*890232f2SAndroid Build Coastguard Worker         .missAlignedPointer(position: 25, type: "UInt16"))
194*890232f2SAndroid Build Coastguard Worker     }
195*890232f2SAndroid Build Coastguard Worker   }
196*890232f2SAndroid Build Coastguard Worker 
testVerifyUnionVectorsnull197*890232f2SAndroid Build Coastguard Worker   func testVerifyUnionVectors() {
198*890232f2SAndroid Build Coastguard Worker     // swiftformat:disable all
199*890232f2SAndroid Build Coastguard Worker     var byteBuffer = ByteBuffer(bytes: [20, 0, 0, 0, 77, 79, 86, 73, 12, 0, 12, 0, 0, 0, 0, 0, 8, 0, 4, 0, 12, 0, 0, 0, 8, 0, 0, 0, 20, 0, 0, 0, 3, 0, 0, 0, 24, 0, 0, 0, 32, 0, 0, 0, 12, 0, 0, 0, 3, 0, 0, 0, 3, 1, 4, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 6, 0, 8, 0, 4, 0, 6, 0, 0, 0, 8, 0, 0, 0])
200*890232f2SAndroid Build Coastguard Worker     // swiftformat:enable all
201*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try getCheckedRoot(byteBuffer: &byteBuffer) as Movie)
202*890232f2SAndroid Build Coastguard Worker   }
203*890232f2SAndroid Build Coastguard Worker 
testErrorWrongFileIdnull204*890232f2SAndroid Build Coastguard Worker   func testErrorWrongFileId() {
205*890232f2SAndroid Build Coastguard Worker     // swiftformat:disable all
206*890232f2SAndroid Build Coastguard Worker     var byteBuffer = ByteBuffer(bytes: [20, 0, 0, 0, 77, 79, 86, 73, 12, 0, 12, 0, 0, 0, 0, 0, 8, 0, 4, 0, 12, 0, 0, 0, 8, 0, 0, 0, 20, 0, 0, 0, 3, 0, 0, 0, 24, 0, 0, 0, 32, 0, 0, 0, 12, 0, 0, 0, 3, 0, 0, 0, 3, 1, 4, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 6, 0, 8, 0, 4, 0, 6, 0, 0, 0, 8, 0, 0, 0])
207*890232f2SAndroid Build Coastguard Worker     // swiftformat:enable all
208*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(try getCheckedRoot(byteBuffer: &byteBuffer, fileId: "FLEX") as Movie)
209*890232f2SAndroid Build Coastguard Worker   }
210*890232f2SAndroid Build Coastguard Worker 
testVerifyPrefixedBuffernull211*890232f2SAndroid Build Coastguard Worker   func testVerifyPrefixedBuffer() {
212*890232f2SAndroid Build Coastguard Worker     // swiftformat:disable all
213*890232f2SAndroid Build Coastguard Worker     var byteBuffer = ByteBuffer(bytes: [0, 0, 0, 1, 20, 0, 0, 0, 77, 79, 86, 73, 12, 0, 12, 0, 0, 0, 0, 0, 8, 0, 4, 0, 12, 0, 0, 0, 8, 0, 0, 0, 20, 0, 0, 0, 3, 0, 0, 0, 24, 0, 0, 0, 32, 0, 0, 0, 12, 0, 0, 0, 3, 0, 0, 0, 3, 1, 4, 0, 2, 0, 0, 0, 7, 0, 0, 0, 0, 0, 6, 0, 8, 0, 4, 0, 6, 0, 0, 0, 8, 0, 0, 0])
214*890232f2SAndroid Build Coastguard Worker     // swiftformat:enable all
215*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(
216*890232f2SAndroid Build Coastguard Worker       try getCheckedPrefixedSizeRoot(byteBuffer: &byteBuffer) as Movie)
217*890232f2SAndroid Build Coastguard Worker   }
218*890232f2SAndroid Build Coastguard Worker 
testFullVerifiernull219*890232f2SAndroid Build Coastguard Worker   func testFullVerifier() {
220*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(
221*890232f2SAndroid Build Coastguard Worker       try getCheckedRoot(
222*890232f2SAndroid Build Coastguard Worker         byteBuffer: &validFlatbuffersObject) as MyGame_Example_Monster)
223*890232f2SAndroid Build Coastguard Worker   }
224*890232f2SAndroid Build Coastguard Worker 
testFullVerifierWithFileIdnull225*890232f2SAndroid Build Coastguard Worker   func testFullVerifierWithFileId() {
226*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(
227*890232f2SAndroid Build Coastguard Worker       try getCheckedRoot(
228*890232f2SAndroid Build Coastguard Worker         byteBuffer: &validFlatbuffersObject,
229*890232f2SAndroid Build Coastguard Worker         fileId: MyGame_Example_Monster.id) as MyGame_Example_Monster)
230*890232f2SAndroid Build Coastguard Worker   }
231*890232f2SAndroid Build Coastguard Worker 
testInvalidBuffernull232*890232f2SAndroid Build Coastguard Worker   func testInvalidBuffer() {
233*890232f2SAndroid Build Coastguard Worker     XCTAssertThrowsError(
234*890232f2SAndroid Build Coastguard Worker       try getCheckedRoot(
235*890232f2SAndroid Build Coastguard Worker         byteBuffer: &invalidFlatbuffersObject) as MyGame_Example_Monster)
236*890232f2SAndroid Build Coastguard Worker   }
237*890232f2SAndroid Build Coastguard Worker 
testValidUnionBuffernull238*890232f2SAndroid Build Coastguard Worker   func testValidUnionBuffer() {
239*890232f2SAndroid Build Coastguard Worker     let string = "Awesome \\\\t\t\nstring!"
240*890232f2SAndroid Build Coastguard Worker     var fb = FlatBufferBuilder()
241*890232f2SAndroid Build Coastguard Worker     let stringOffset = fb.create(string: string)
242*890232f2SAndroid Build Coastguard Worker     let characterType: [Character] = [.bookfan, .other]
243*890232f2SAndroid Build Coastguard Worker 
244*890232f2SAndroid Build Coastguard Worker     let characters = [
245*890232f2SAndroid Build Coastguard Worker       fb.create(struct: BookReader(booksRead: 7)),
246*890232f2SAndroid Build Coastguard Worker       stringOffset,
247*890232f2SAndroid Build Coastguard Worker     ]
248*890232f2SAndroid Build Coastguard Worker     let types = fb.createVector(characterType)
249*890232f2SAndroid Build Coastguard Worker     let characterVector = fb.createVector(ofOffsets: characters)
250*890232f2SAndroid Build Coastguard Worker 
251*890232f2SAndroid Build Coastguard Worker     let end = Movie.createMovie(
252*890232f2SAndroid Build Coastguard Worker       &fb,
253*890232f2SAndroid Build Coastguard Worker       mainCharacterType: .other,
254*890232f2SAndroid Build Coastguard Worker       mainCharacterOffset: Offset(offset: stringOffset.o),
255*890232f2SAndroid Build Coastguard Worker       charactersTypeVectorOffset: types,
256*890232f2SAndroid Build Coastguard Worker       charactersVectorOffset: characterVector)
257*890232f2SAndroid Build Coastguard Worker     Movie.finish(&fb, end: end)
258*890232f2SAndroid Build Coastguard Worker     var buf = fb.sizedBuffer
259*890232f2SAndroid Build Coastguard Worker     XCTAssertNoThrow(try getCheckedRoot(byteBuffer: &buf) as Movie)
260*890232f2SAndroid Build Coastguard Worker   }
261*890232f2SAndroid Build Coastguard Worker 
addnull262*890232f2SAndroid Build Coastguard Worker   func add(buffer: inout ByteBuffer, v: Int32, p: Int) {
263*890232f2SAndroid Build Coastguard Worker     buffer.write(value: v, index: p)
264*890232f2SAndroid Build Coastguard Worker   }
265*890232f2SAndroid Build Coastguard Worker }
266