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: XCTestCase {
 | |
| 
 | |
|     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"))
 | |
|     }
 | |
| }
 |