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