1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
/*
This source file is part of the Swift.org open source project
Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
Licensed under Apache License v2.0 with Runtime Library Exception
See http://swift.org/LICENSE.txt for license information
See http://swift.org/CONTRIBUTORS.txt for Swift project authors
*/
import XCTest
import TSCBasic
class JSONTests: XCTestCase {
func testEncoding() {
// Test the basics of encoding each object type.
func encode(_ item: JSON) -> String {
return item.toBytes().validDescription ?? "<unrepresentable>"
}
XCTAssertEqual(encode(.null), "null")
XCTAssertEqual(encode(.bool(false)), "false")
XCTAssertEqual(encode(.int(1)), "1")
XCTAssertEqual(encode(.string("hi")), "\"hi\"")
XCTAssertEqual(encode(.array([.int(1), .string("hi")])), "[1, \"hi\"]")
XCTAssertEqual(encode(.dictionary(["a": .int(1), "b": .string("hi")])), "{\"a\": 1, \"b\": \"hi\"}")
XCTAssertEqual(encode(.orderedDictionary(["b": .string("hi"), "a": .int(1)])), "{\"b\": \"hi\", \"a\": 1}")
}
func testDecoding() {
// Test the basics of encoding each object type.
func decode(_ string: String) -> JSON? {
return try? JSON(bytes: ByteString(string))
}
XCTAssertEqual(decode(""), nil)
XCTAssertEqual(decode("this is not json"), nil)
XCTAssertEqual(decode("null"), .null)
XCTAssertEqual(decode("false"), .bool(false))
XCTAssertEqual(decode("true"), .bool(true))
XCTAssertEqual(decode("1"), .int(1))
XCTAssertEqual(decode("1.2"), .double(1.2))
XCTAssertEqual(decode("\"hi\""), .string("hi"))
XCTAssertEqual(decode("[null, \"hi\"]"), .array([.null, .string("hi")]))
XCTAssertEqual(decode("[[null], [null]]"), .array([.array([.null]), .array([.null])]))
XCTAssertEqual(decode("{\"a\": null, \"b\": \"hi\"}"), .dictionary(["a": .null, "b": .string("hi")]))
}
func testStringInitalizer() {
let jsonString = "{\"name\" : \"jon doe\"}"
let json = try? JSON(string: jsonString)
XCTAssertEqual(json, .dictionary(["name": .string("jon doe")]))
}
func testPrettyPrinting() {
let c1 = JSON.dictionary([
"name": .string("child1"),
"age": .int(2),
])
let c2 = JSON.dictionary([
"name": .string("child2"),
"age": .int(3),
])
let person = JSON.dictionary([
"first": .string("john"),
"last": .string("doe"),
"age": .int(22),
"children": .array([c1, c2]),
"houses": .array([1, 2].map(JSON.int)),
])
XCTAssertEqual(person.toString(prettyPrint: true), """
{
"age": 22,
"children": [
{
"age": 2,
"name": "child1"
},
{
"age": 3,
"name": "child2"
}
],
"first": "john",
"houses": [
1,
2
],
"last": "doe"
}
""")
}
}
|