| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- /*
- *
- * Copyright 2016, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
- import XCTest
- class QuickProtoTests: XCTestCase {
- func testSampleMessageRead() {
- let myBundle = Bundle.init(for: type(of:self))
- let sampleProtoURL = myBundle.url(forResource: "sample", withExtension: "out")
- let sampleMessageURL = myBundle.url(forResource: "SampleMessage", withExtension: "bin")
- if let sampleProtoURL = sampleProtoURL, let sampleMessageURL = sampleMessageURL {
- let sampleProtoData = try! Data(contentsOf: sampleProtoURL)
- let fileDescriptorSet = FileDescriptorSet(data:sampleProtoData as Data)
- let sampleMessageData = try! Data(contentsOf: sampleMessageURL)
- if let message = fileDescriptorSet.readMessage("SampleMessage", data:sampleMessageData) {
- XCTAssert(message.fieldCount() == 15)
- XCTAssert(message.oneField("d")!.double() == 1.23)
- XCTAssert(message.oneField("f")!.float() == 4.56)
- XCTAssert(message.oneField("i64")!.integer() == 1234567)
- XCTAssert(message.oneField("ui64")!.integer() == 1234567)
- XCTAssert(message.oneField("i32")!.integer() == 1234)
- XCTAssert(message.oneField("b")!.bool() == true)
- XCTAssert(message.oneField("text")!.string() == "Hello, world!")
- XCTAssert(message.oneField("ui32")!.integer() == 1234)
- XCTAssert(message.oneField("sf32")!.integer() == 1234)
- XCTAssert(message.oneField("sf64")!.integer() == 1234567)
- XCTAssert(message.oneField("si32")!.integer() == 1234)
- XCTAssert(message.oneField("si64")!.integer() == 1234567)
- let inner = message.oneField("message")!.message()
- XCTAssert(inner.oneField("text")!.string() == "ABCDEFG")
- // XCTAssert(inner.oneField("b")!.bool() == false)
- XCTAssert(inner.oneField("si32")!.integer() == -1234)
- XCTAssert(inner.oneField("si64")!.integer() == -1234567)
- }
- } else {
- XCTAssert(false)
- }
- }
- func testSampleRoundtrip() {
- let myBundle = Bundle.init(for: type(of:self))
- let sampleProtoURL = myBundle.url(forResource: "sample", withExtension: "out")
- if let sampleProtoURL = sampleProtoURL {
- let sampleProtoData = try! Data(contentsOf: sampleProtoURL)
- let fileDescriptorSet = FileDescriptorSet(data:sampleProtoData)
- // construct an internal representation of a message
- let message = fileDescriptorSet.createMessage("SampleMessage")
- XCTAssert(message != nil)
- if let message = message {
- message.addField("d") {(field) in field.setDouble(-12.34)}
- message.addField("f") {(field) in field.setFloat(-56.78)}
- message.addField("i64") {(field) in field.setInt(123)}
- message.addField("ui64") {(field) in field.setInt(123456)}
- message.addField("i32") {(field) in field.setInt(123)}
- message.addField("f64") {(field) in field.setInt(123)}
- message.addField("f32") {(field) in field.setInt(123)}
- message.addField("b") {(field) in field.setBool(true)}
- message.addField("text") {(field) in field.setString("hello, world")}
- message.addField("message") {(field) in
- let innerMessage = fileDescriptorSet.createMessage("SampleMessage")!
- innerMessage.addField("text") {(field) in field.setString("inner message")}
- innerMessage.addField("i32") {(field) in field.setInt(54321)}
- innerMessage.addField("message") {(field) in
- let innermostMessage = fileDescriptorSet.createMessage("SampleMessage")!
- innermostMessage.addField("text") {(field) in field.setString("innermost message")}
- innermostMessage.addField("i32") {(field) in field.setInt(12345)}
- field.setMessage(innermostMessage)
- }
- field.setMessage(innerMessage)
- }
- message.addField("data") {(field) in
- let data = "ABCDEFG 123".data(using: .utf8)!
- field.setData(data)
- }
- message.addField("ui32") {(field) in field.setInt(123456)}
- message.addField("sf32") {(field) in field.setInt(123456)}
- message.addField("sf64") {(field) in field.setInt(123456)}
- message.addField("si32") {(field) in field.setInt(-123)}
- message.addField("si64") {(field) in field.setInt(-123)}
- // serialize the message as a binary protocol buffer
- let data = message.data()
- // re-read it and check fields
- let message2 = fileDescriptorSet.readMessage("SampleMessage", data:data)!
- XCTAssert(message2.oneField("d")!.double() == -12.34)
- XCTAssert(message2.oneField("f")!.float() == -56.78)
- XCTAssert(message2.oneField("i64")!.integer() == 123)
- XCTAssert(message2.oneField("ui64")!.integer() == 123456)
- XCTAssert(message2.oneField("i32")!.integer() == 123)
- XCTAssert(message2.oneField("f64")!.integer() == 123)
- XCTAssert(message2.oneField("f32")!.integer() == 123)
- XCTAssert(message2.oneField("b")!.bool() == true)
- XCTAssert(message2.oneField("text")!.string() == "hello, world")
- XCTAssert(message2.oneField("ui32")!.integer() == 123456)
- XCTAssert(message2.oneField("sf32")!.integer() == 123456)
- XCTAssert(message2.oneField("sf64")!.integer() == 123456)
- XCTAssert(message2.oneField("si32")!.integer() == -123)
- XCTAssert(message2.oneField("si64")!.integer() == -123)
- let inner2 = message2.oneField("message")!.message()
- XCTAssert(inner2.oneField("text")!.string() == "inner message")
- XCTAssert(inner2.oneField("i32")!.integer() == 54321)
- let inner3 = inner2.oneField("message")!.message()
- XCTAssert(inner3.oneField("text")!.string() == "innermost message")
- XCTAssert(inner3.oneField("i32")!.integer() == 12345)
- let data2 = message2.oneField("data")!.data()
- XCTAssert( String(data: data2, encoding:.utf8) == "ABCDEFG 123")
- }
- }
- }
- }
|