CommandLineToolkit

Форк
0
145 строк · 4.5 Кб
1
import Foundation
2
import PlistLib
3
import TestHelpers
4
import XCTest
5

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

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.