CommandLineToolkit

Форк
0
/
JSONReaderNumberEdgeCaseTests.swift 
112 строк · 4.4 Кб
1
import Foundation
2
import JSONStream
3
import XCTest
4

5
class JSONReaderNumberEdgeCaseTests: XCTestCase {
6
    let eventStream = FakeEventStream()
7
    
8
    func testNumberJustMinusShouldFail() throws {
9
        let jsonStream = FakeJSONStream(string: "[-]")
10
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
11
        XCTAssertThrowsError(try reader.start())
12
    }
13
    
14
    func testNegativeNumberWithoutIntPartShouldFail() throws {
15
        let jsonStream = FakeJSONStream(string: "[-.123]")
16
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
17
        XCTAssertThrowsError(try reader.start())
18
    }
19
    
20
    func testNegativeNumberWithoutFractionalPartShouldFail() throws {
21
        let jsonStream = FakeJSONStream(string: "[-2.]")
22
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
23
        XCTAssertThrowsError(try reader.start())
24
    }
25
    
26
    func testNumberWithLeadingZeroFails() throws {
27
        let jsonStream = FakeJSONStream(string: "[01]")
28
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
29
        XCTAssertThrowsError(try reader.start())
30
    }
31
    
32
    func testNegativeNumberWithLeadingZeroFails() throws {
33
        let jsonStream = FakeJSONStream(string: "[-01]")
34
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
35
        XCTAssertThrowsError(try reader.start())
36
    }
37
    
38
    func testNumberWithoutFractionalPartWithExponentialPartFails() throws {
39
        let jsonStream = FakeJSONStream(string: "[0.e1]")
40
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
41
        XCTAssertThrowsError(try reader.start())
42
    }
43
    
44
    func testNumberWithIntFractionalPositiveExponentialPartsSucceedes() throws {
45
        let jsonStream = FakeJSONStream(string: "[0.1e+1]")
46
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
47
        try reader.start()
48
        XCTAssertEqual(eventStream.allArrays[0], [1])
49
    }
50
    
51
    func testNegativeNumberWithIntFractionalNegativeExponentialPartsSucceedes() throws {
52
        let jsonStream = FakeJSONStream(string: "[-0.1e-1]")
53
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
54
        try reader.start()
55
        XCTAssertEqual(eventStream.allArrays[0], [-0.01])
56
    }
57
    
58
    func testNegativeNumberWithWrongMinusMinusxponentialPartFails() throws {
59
        try XCTSkipIf(shouldSkipDueToNumberFormatDifferences())
60
        
61
        let jsonStream = FakeJSONStream(string: "[-0.1e--1]")
62
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
63
        XCTAssertThrowsError(try reader.start())
64
    }
65
    
66
    func testNegativeNumberWithWrongPlusPlusExponentialPartFails() throws {
67
        try XCTSkipIf(shouldSkipDueToNumberFormatDifferences())
68
        
69
        let jsonStream = FakeJSONStream(string: "[-0.1e++1]")
70
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
71
        XCTAssertThrowsError(try reader.start())
72
    }
73
    
74
    func testNegativeNumberWithWrongPlusMinusExponentialPartFails() throws {
75
        try XCTSkipIf(shouldSkipDueToNumberFormatDifferences())
76

77
        let jsonStream = FakeJSONStream(string: "[0.1e+-1]")
78
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
79
        XCTAssertThrowsError(try reader.start())
80
    }
81
    
82
    func testNumberWithEmptyExponentialPartFails() throws {
83
        let jsonStream = FakeJSONStream(string: "[0.3e]")
84
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
85
        XCTAssertThrowsError(try reader.start())
86
    }
87
    
88
    func testNumberWithEmptyExponentialPlusPartFails() throws {
89
        try XCTSkipIf(shouldSkipDueToNumberFormatDifferences())
90
        
91
        let jsonStream = FakeJSONStream(string: "[0.3e+]")
92
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
93
        XCTAssertThrowsError(try reader.start())
94
    }
95
    
96
    func testPlusNumberFails() throws {
97
        let jsonStream = FakeJSONStream(string: "[+1]")
98
        let reader = JSONReader(inputStream: jsonStream, eventStream: eventStream)
99
        XCTAssertThrowsError(try reader.start())
100
    }
101
    
102
    private func shouldSkipDueToNumberFormatDifferences() -> Bool {
103
        // https://github.com/apple/swift-corelibs-foundation/issues/4680
104
#if os(macOS)
105
        return false
106
#elseif os(Linux)
107
        return true
108
#else
109
        #error("Unsupported OS")
110
#endif
111
    }
112
}
113

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

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

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

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