mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			119 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Swift
		
	
			
		
		
	
	
			119 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Swift
		
	
//
 | 
						|
//  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
 | 
						|
//
 | 
						|
 | 
						|
import XCTest
 | 
						|
 | 
						|
class ParamParserTest: SignalBaseTest {
 | 
						|
 | 
						|
    override func setUp() {
 | 
						|
        super.setUp()
 | 
						|
        // Put setup code here. This method is called before the invocation of each test method in the class.
 | 
						|
    }
 | 
						|
 | 
						|
    override func tearDown() {
 | 
						|
        // Put teardown code here. This method is called after the invocation of each test method in the class.
 | 
						|
        super.tearDown()
 | 
						|
    }
 | 
						|
 | 
						|
    let dict: [String: Any] = ["some_int": 11, "some_string": "asdf", "large_int": Int64.max, "negative_int": -10]
 | 
						|
    var parser: ParamParser {
 | 
						|
        return ParamParser(dictionary: dict)
 | 
						|
    }
 | 
						|
 | 
						|
    func testExample() {
 | 
						|
        XCTAssertEqual(11, try parser.required(key: "some_int"))
 | 
						|
        XCTAssertEqual(11, try parser.optional(key: "some_int"))
 | 
						|
 | 
						|
        let expectedString: String = "asdf"
 | 
						|
        XCTAssertEqual(expectedString, try parser.required(key: "some_string"))
 | 
						|
        XCTAssertEqual(expectedString, try parser.optional(key: "some_string"))
 | 
						|
 | 
						|
        XCTAssertEqual(nil, try parser.optional(key: "does_not_exist") as String?)
 | 
						|
        XCTAssertThrowsError(try parser.required(key: "does_not_exist") as String)
 | 
						|
    }
 | 
						|
 | 
						|
    func testNumeric() {
 | 
						|
        let expectedInt32: Int32 = 11
 | 
						|
        XCTAssertEqual(expectedInt32, try parser.required(key: "some_int"))
 | 
						|
        XCTAssertEqual(expectedInt32, try parser.optional(key: "some_int"))
 | 
						|
 | 
						|
        let expectedInt64: Int64 = 11
 | 
						|
        XCTAssertEqual(expectedInt64, try parser.required(key: "some_int"))
 | 
						|
        XCTAssertEqual(expectedInt64, try parser.optional(key: "some_int"))
 | 
						|
    }
 | 
						|
 | 
						|
    func testNumericSizeFailures() {
 | 
						|
        XCTAssertThrowsError(try {
 | 
						|
            let _: Int32 = try parser.required(key: "large_int")
 | 
						|
        }())
 | 
						|
 | 
						|
        XCTAssertThrowsError(try {
 | 
						|
            let _: Int32? = try parser.optional(key: "large_int")
 | 
						|
        }())
 | 
						|
 | 
						|
        XCTAssertNoThrow(try {
 | 
						|
            let _: Int64 = try parser.required(key: "large_int")
 | 
						|
        }())
 | 
						|
    }
 | 
						|
 | 
						|
    func testNumericSignFailures() {
 | 
						|
        XCTAssertNoThrow(try {
 | 
						|
            let _: Int = try parser.required(key: "negative_int")
 | 
						|
        }())
 | 
						|
 | 
						|
        XCTAssertNoThrow(try {
 | 
						|
            let _: Int64 = try parser.required(key: "negative_int")
 | 
						|
        }())
 | 
						|
 | 
						|
        XCTAssertThrowsError(try {
 | 
						|
            let _: UInt64 = try parser.required(key: "negative_int")
 | 
						|
        }())
 | 
						|
    }
 | 
						|
 | 
						|
    // MARK: Base64EncodedData
 | 
						|
 | 
						|
    func testBase64Data_Valid() {
 | 
						|
        let originalString = "asdf"
 | 
						|
        let utf8Data: Data = originalString.data(using: .utf8)!
 | 
						|
        let base64EncodedString = utf8Data.base64EncodedString()
 | 
						|
 | 
						|
        let dict: [String: Any] = ["some_data": base64EncodedString]
 | 
						|
        let parser = ParamParser(dictionary: dict)
 | 
						|
 | 
						|
        XCTAssertEqual(utf8Data, try parser.requiredBase64EncodedData(key: "some_data"))
 | 
						|
        XCTAssertEqual(utf8Data, try parser.optionalBase64EncodedData(key: "some_data"))
 | 
						|
 | 
						|
        let data: Data = try! parser.requiredBase64EncodedData(key: "some_data")
 | 
						|
        let roundTripString = String(data: data, encoding: .utf8)
 | 
						|
        XCTAssertEqual(originalString, roundTripString)
 | 
						|
    }
 | 
						|
 | 
						|
    func testBase64Data_EmptyString() {
 | 
						|
        let dict: [String: Any] = ["some_data": ""]
 | 
						|
        let parser = ParamParser(dictionary: dict)
 | 
						|
 | 
						|
        XCTAssertThrowsError(try parser.requiredBase64EncodedData(key: "some_data"))
 | 
						|
        XCTAssertEqual(nil, try parser.optionalBase64EncodedData(key: "some_data"))
 | 
						|
    }
 | 
						|
 | 
						|
    func testBase64Data_NSNull() {
 | 
						|
        let dict: [String: Any] = ["some_data": NSNull()]
 | 
						|
        let parser = ParamParser(dictionary: dict)
 | 
						|
 | 
						|
        XCTAssertThrowsError(try parser.requiredBase64EncodedData(key: "some_data"))
 | 
						|
        XCTAssertEqual(nil, try parser.optionalBase64EncodedData(key: "some_data"))
 | 
						|
    }
 | 
						|
 | 
						|
    func testBase64Data_Invalid() {
 | 
						|
        // invalid base64 data
 | 
						|
        let base64EncodedString = "YXNkZg"
 | 
						|
 | 
						|
        let dict: [String: Any] = ["some_data": base64EncodedString]
 | 
						|
        let parser = ParamParser(dictionary: dict)
 | 
						|
 | 
						|
        XCTAssertThrowsError(try parser.requiredBase64EncodedData(key: "some_data"))
 | 
						|
        XCTAssertThrowsError(try parser.optionalBase64EncodedData(key: "some_data"))
 | 
						|
    }
 | 
						|
}
 |