149 lines
4.8 KiB
Swift
149 lines
4.8 KiB
Swift
// MutabilityTests.swift
|
|
//
|
|
// Copyright (c) 2014 - 2017 Zigii Wong
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files (the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// THE SOFTWARE.
|
|
|
|
import XCTest
|
|
import SwiftyJSON
|
|
|
|
class MutabilityTests: XCTestCase {
|
|
|
|
func testDictionaryMutability() {
|
|
let dictionary: [String: Any] = [
|
|
"string": "STRING",
|
|
"number": 9823.212,
|
|
"bool": true,
|
|
"empty": ["nothing"],
|
|
"foo": ["bar": ["1"]],
|
|
"bar": ["foo": ["1": "a"]]
|
|
]
|
|
|
|
var json = JSON(dictionary)
|
|
XCTAssertEqual(json["string"], "STRING")
|
|
XCTAssertEqual(json["number"], 9823.212)
|
|
XCTAssertEqual(json["bool"], true)
|
|
XCTAssertEqual(json["empty"], ["nothing"])
|
|
|
|
json["string"] = "muted"
|
|
XCTAssertEqual(json["string"], "muted")
|
|
|
|
json["number"] = 9999.0
|
|
XCTAssertEqual(json["number"], 9999.0)
|
|
|
|
json["bool"] = false
|
|
XCTAssertEqual(json["bool"], false)
|
|
|
|
json["empty"] = []
|
|
XCTAssertEqual(json["empty"], [])
|
|
|
|
json["new"] = JSON(["foo": "bar"])
|
|
XCTAssertEqual(json["new"], ["foo": "bar"])
|
|
|
|
json["foo"]["bar"] = JSON([])
|
|
XCTAssertEqual(json["foo"]["bar"], [])
|
|
|
|
json["bar"]["foo"] = JSON(["2": "b"])
|
|
XCTAssertEqual(json["bar"]["foo"], ["2": "b"])
|
|
}
|
|
|
|
func testArrayMutability() {
|
|
let array: [Any] = ["1", "2", 3, true, []]
|
|
|
|
var json = JSON(array)
|
|
XCTAssertEqual(json[0], "1")
|
|
XCTAssertEqual(json[1], "2")
|
|
XCTAssertEqual(json[2], 3)
|
|
XCTAssertEqual(json[3], true)
|
|
XCTAssertEqual(json[4], [])
|
|
|
|
json[0] = false
|
|
XCTAssertEqual(json[0], false)
|
|
|
|
json[1] = 2
|
|
XCTAssertEqual(json[1], 2)
|
|
|
|
json[2] = "3"
|
|
XCTAssertEqual(json[2], "3")
|
|
|
|
json[3] = [:]
|
|
XCTAssertEqual(json[3], [:])
|
|
|
|
json[4] = [1, 2]
|
|
XCTAssertEqual(json[4], [1, 2])
|
|
}
|
|
|
|
func testValueMutability() {
|
|
var intArray = JSON([0, 1, 2])
|
|
intArray[0] = JSON(55)
|
|
XCTAssertEqual(intArray[0], 55)
|
|
XCTAssertEqual(intArray[0].intValue, 55)
|
|
|
|
var dictionary = JSON(["foo": "bar"])
|
|
dictionary["foo"] = JSON("foo")
|
|
XCTAssertEqual(dictionary["foo"], "foo")
|
|
XCTAssertEqual(dictionary["foo"].stringValue, "foo")
|
|
|
|
var number = JSON(1)
|
|
number = JSON("111")
|
|
XCTAssertEqual(number, "111")
|
|
XCTAssertEqual(number.intValue, 111)
|
|
XCTAssertEqual(number.stringValue, "111")
|
|
|
|
var boolean = JSON(true)
|
|
boolean = JSON(false)
|
|
XCTAssertEqual(boolean, false)
|
|
XCTAssertEqual(boolean.boolValue, false)
|
|
}
|
|
|
|
func testArrayRemovability() {
|
|
let array = ["Test", "Test2", "Test3"]
|
|
var json = JSON(array)
|
|
|
|
json.arrayObject?.removeFirst()
|
|
XCTAssertEqual(false, json.arrayValue.isEmpty)
|
|
XCTAssertEqual(json.arrayValue, ["Test2", "Test3"])
|
|
|
|
json.arrayObject?.removeLast()
|
|
XCTAssertEqual(false, json.arrayValue.isEmpty)
|
|
XCTAssertEqual(json.arrayValue, ["Test2"])
|
|
|
|
json.arrayObject?.removeAll()
|
|
XCTAssertEqual(true, json.arrayValue.isEmpty)
|
|
XCTAssertEqual(JSON([]), json)
|
|
}
|
|
|
|
func testDictionaryRemovability() {
|
|
let dictionary: [String: Any] = ["key1": "Value1", "key2": 2, "key3": true]
|
|
var json = JSON(dictionary)
|
|
|
|
json.dictionaryObject?.removeValue(forKey: "key1")
|
|
XCTAssertEqual(false, json.dictionaryValue.isEmpty)
|
|
XCTAssertEqual(json.dictionaryValue, ["key2": 2, "key3": true])
|
|
|
|
json.dictionaryObject?.removeValue(forKey: "key3")
|
|
XCTAssertEqual(false, json.dictionaryValue.isEmpty)
|
|
XCTAssertEqual(json.dictionaryValue, ["key2": 2])
|
|
|
|
json.dictionaryObject?.removeAll()
|
|
XCTAssertEqual(true, json.dictionaryValue.isEmpty)
|
|
XCTAssertEqual(json.dictionaryValue, [:])
|
|
}
|
|
}
|