CommandLineToolkit
145 строк · 4.5 Кб
1import Foundation
2import PlistLib
3import TestHelpers
4import XCTest
5
6final class PlistTests: XCTestCase {
7private lazy var plistStringContents = """
8<?xml version="1.0" encoding="UTF-8"?>
9<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
10<plist version="1.0">
11<dict>
12<key>key</key>
13<string>value</string>
14</dict>
15</plist>\n
16"""
17
18func test___encoding_to_data() throws {
19let plist = Plist(
20rootPlistEntry: .dict([
21"key": .string("value")
22])
23)
24let plistData = try plist.data(format: .xml)
25
26guard let string = String(data: plistData, encoding: .utf8) else {
27failTest("Failed to convert data to string")
28}
29
30XCTAssertEqual(
31string.replacingOccurrences(of: "\t", with: " "),
32plistStringContents
33)
34}
35
36func test___parsing_data() throws {
37guard let plistData = plistStringContents.data(using: .utf8) else {
38failTest("Failed to convert string to data")
39}
40
41let plist = try Plist.create(fromData: plistData)
42XCTAssertEqual(
43plist.root,
44RootPlistEntry.dict(["key": .string("value")])
45)
46}
47
48func test___root_dict_object() throws {
49let plist = Plist(rootPlistEntry: .dict(["key": .string("value")]))
50XCTAssertEqual(
51plist.rootObject() as? NSDictionary,
52["key": "value"]
53)
54}
55
56func test___to_typed_dict___when_dict_is_empty___throws() throws {
57let entry = PlistEntry.dict(["key": nil])
58assertThrows {
59_ = try entry.toTypedDict(String.self)
60}
61}
62
63func test___to_typed_dict___when_dict_is_not_empty___does_not_throw() throws {
64let entry = PlistEntry.dict(["key": .string("value")])
65XCTAssertEqual(
66try entry.toTypedDict(String.self),
67["key": "value"]
68)
69}
70
71func test___to_typed_dict___when_dict_is_heterogeneous___throws() throws {
72let entry = PlistEntry.dict(["key": .string("value"), "key2": .bool(false)])
73assertThrows { _ = try entry.toTypedDict(String.self) }
74assertThrows { _ = try entry.toTypedDict(Bool.self) }
75}
76
77func test___root_array_object() throws {
78let plist = Plist(rootPlistEntry: .array([.string("hello")]))
79XCTAssertEqual(
80plist.rootObject() as? NSArray,
81["hello"]
82)
83}
84
85func test___to_typed_array___when_array_is_empty___throws() throws {
86let entry = PlistEntry.array([nil])
87assertThrows {
88_ = try entry.toTypedArray(String.self)
89}
90}
91
92func test___to_typed_array___when_array_is_not_empty___does_not_throw() throws {
93let entry = PlistEntry.array([.string("hello")])
94XCTAssertEqual(
95try entry.toTypedArray(String.self),
96["hello"]
97)
98}
99
100func test___to_typed_array___when_array_is_heterogeneous___throws() throws {
101let entry = PlistEntry.array([.string("hello"), .bool(false)])
102assertThrows { _ = try entry.toTypedArray(String.self) }
103assertThrows { _ = try entry.toTypedArray(Bool.self) }
104}
105
106func test___parsing_bool_value() throws {
107let plist = Plist(rootPlistEntry: .array([.bool(true)]))
108let parsedPlist = try Plist.create(fromData: try plist.data(format: .xml))
109
110XCTAssertEqual(
111plist.root,
112parsedPlist.root
113)
114}
115
116func test___parsing_number_value() throws {
117let plist = Plist(rootPlistEntry: .array([.number(123)]))
118let parsedPlist = try Plist.create(fromData: try plist.data(format: .xml))
119
120XCTAssertEqual(
121plist.root,
122parsedPlist.root
123)
124}
125
126func test___parsing_data_value() throws {
127let plist = Plist(rootPlistEntry: .array([.data(Data([0x42]))]))
128let parsedPlist = try Plist.create(fromData: try plist.data(format: .xml))
129
130XCTAssertEqual(
131plist.root,
132parsedPlist.root
133)
134}
135
136func test___parsing_date_value() throws {
137let plist = Plist(rootPlistEntry: .array([.date(Date(timeIntervalSinceReferenceDate: 424242))]))
138let parsedPlist = try Plist.create(fromData: try plist.data(format: .xml))
139
140XCTAssertEqual(
141plist.root,
142parsedPlist.root
143)
144}
145}
146