forked from alexaubry/JavaScriptKit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCodableSupportTests.swift
More file actions
157 lines (112 loc) · 4.77 KB
/
CodableSupportTests.swift
File metadata and controls
157 lines (112 loc) · 4.77 KB
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
import XCTest
import Foundation
@testable import JavaScriptKit
///
/// Tests Codable-supporting data structures and utilities.
///
class CodableSupportTests: XCTestCase {
// MARK: Single Value Storage
/// Tests creating a single value storage.
func testCreateSingleValueStorage() throws {
let nullStorage = try SingleValueStorage(storedValue: NSNull())
switch nullStorage {
case .null:
break
default:
XCTFail("Should create a null storage.")
}
let stringStorage = try SingleValueStorage(storedValue: "Hello")
switch stringStorage {
case .string(let str):
XCTAssertEqual(str, "Hello")
default:
XCTFail("Should create a string storage.")
}
let nsStringStorage = try SingleValueStorage(storedValue: "Hello" as NSString)
switch nsStringStorage {
case .string(let str):
XCTAssertEqual(str, "Hello")
default:
XCTFail("Should create a string storage.")
}
let intStorage = try SingleValueStorage(storedValue: Int(100))
switch intStorage {
case .number(let num):
XCTAssertEqual(num.intValue, 100)
default:
XCTFail("Should create a number storage.")
}
let doubleStorage = try SingleValueStorage(storedValue: Double(100.8765))
switch doubleStorage {
case .number(let num):
XCTAssertEqual(num.doubleValue, 100.8765)
default:
XCTFail("Should create a number storage.")
}
let floatStorage = try SingleValueStorage(storedValue: Float(100.8765))
switch floatStorage {
case .number(let num):
XCTAssertEqual(num.floatValue, 100.8765)
default:
XCTFail("Should create a number storage.")
}
let dateStorage = try SingleValueStorage(storedValue: Date.distantFuture)
switch dateStorage {
case .date(let date):
XCTAssertEqual(date, .distantFuture)
default:
XCTFail("Should create a date storage.")
}
let invalidStorage = try? SingleValueStorage(storedValue: ReaderFont.sanFrancisco)
XCTAssertNil(invalidStorage)
}
/// Tests getting the stored value from a single value storage.
func testGetSingleValueStorageStoredValue() {
let nullStorage = SingleValueStorage.null
XCTAssertTrue(nullStorage.storedValue is NSNull)
let stringStorage = SingleValueStorage.string("Hello")
XCTAssertTrue(stringStorage.storedValue as? String == "Hello")
let boolStorage = SingleValueStorage.boolean(true)
XCTAssertTrue(boolStorage.storedValue as? Bool == true)
let numberStorage = SingleValueStorage.number(100)
XCTAssertTrue(numberStorage.storedValue as? NSNumber == 100)
let dateStorage = SingleValueStorage.date(.distantFuture)
XCTAssertTrue(dateStorage.storedValue as? Date == .distantFuture)
let emptyStorage = SingleValueStorage.emptyObject
XCTAssertTrue((emptyStorage.storedValue as? [String: Any])?.isEmpty == true)
}
/// Tests getting the stored type from a single value storage.
func testGetSingleValueStorageStoredType() {
let nullStorage = SingleValueStorage.null
XCTAssertTrue(nullStorage.storedType == NSNull.self)
let stringStorage = SingleValueStorage.string("Hello")
XCTAssertTrue(stringStorage.storedType == String.self)
let boolStorage = SingleValueStorage.boolean(true)
XCTAssertTrue(boolStorage.storedType == Bool.self)
let numberStorage = SingleValueStorage.number(100)
XCTAssertTrue(numberStorage.storedType == NSNumber.self)
let dateStorage = SingleValueStorage.date(.distantFuture)
XCTAssertTrue(dateStorage.storedType == Date.self)
let emptyStorage = SingleValueStorage.emptyObject
XCTAssertTrue(emptyStorage.storedType == Dictionary<String, Any>.self)
}
// MARK: - JSONKey
/// Tests internal JSON keys.
func testJSONKey() {
let superKey = JSONKey.super
XCTAssertEqual(superKey.stringValue, "super")
XCTAssertNil(superKey.intValue)
let stringKey = JSONKey.string("foo")
XCTAssertEqual(stringKey.stringValue, "foo")
XCTAssertNil(stringKey.intValue)
let indexKey = JSONKey.index(10)
XCTAssertEqual(indexKey.stringValue, "Index 10")
XCTAssertTrue(indexKey.intValue == 10)
let barKey = JSONKey(stringValue: "bar")
XCTAssertEqual(barKey.stringValue, "bar")
XCTAssertNil(barKey.intValue)
let startIndexKey = JSONKey(intValue: 0)
XCTAssertEqual(startIndexKey.stringValue, "Index 0")
XCTAssertTrue(startIndexKey.intValue == 0)
}
}