Skip to content

Commit b1150db

Browse files
committedFeb 10, 2021
More thorough tests for Reactive structs and protocols
1 parent d71f6ea commit b1150db

File tree

3 files changed

+42
-15
lines changed

3 files changed

+42
-15
lines changed
 

‎.github/workflows/podspecs.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ on:
88
jobs:
99
specs:
1010
name: "CocoaPods Spec Test"
11-
runs-on: macOS-11.0
11+
runs-on: macOS-latest
1212

1313
strategy:
1414
matrix:

‎Sources/AllTestz/main.swift

+3
Original file line numberDiff line numberDiff line change
@@ -1898,6 +1898,9 @@ final class ReactiveTests_ : ReactiveTests, RxTestCase {
18981898

18991899
static var allTests: [(String, (ReactiveTests_) -> () -> Void)] { return [
19001900
("testEnablesMutations", ReactiveTests.testEnablesMutations),
1901+
("testReactiveStruct", ReactiveTests.testReactiveStruct),
1902+
("testReactiveProtocol", ReactiveTests.testReactiveProtocol),
1903+
("testDynamicLookup", ReactiveTests.testDynamicLookup),
19011904
] }
19021905
}
19031906

‎Tests/RxSwiftTests/Reactive+Tests.swift

+38-14
Original file line numberDiff line numberDiff line change
@@ -12,36 +12,60 @@ import XCTest
1212
class ReactiveTests: RxTest {
1313
}
1414

15-
final class MyObject {
16-
public var
17-
fileprivate var _something: String = "" // this emulates associated objects
15+
protocol Objecting: ReactiveCompatible {
16+
var number: Int { get set }
1817
}
1918

20-
final class MyObject {
21-
fileprivate var _something: String = "" // this emulates associated objects
19+
final class MyObject: Objecting {
20+
public var number = 0
21+
fileprivate var something = "" // this emulates associated objects
2222
}
2323

24-
extension MyObject: ReactiveCompatible {
25-
24+
struct MyStruct: ReactiveCompatible {
25+
public var number = 0
2626
}
2727

2828
extension Reactive where Base: MyObject {
2929
var somethingPublic: String {
30-
get {
31-
return base._something
32-
}
33-
set {
34-
base._something = newValue
35-
}
30+
get { base.something }
31+
set { base.something = newValue }
3632
}
3733
}
3834

35+
extension Reactive where Base: Objecting {
36+
var numberPublic: Int { base.number }
37+
}
38+
39+
extension Reactive where Base == MyStruct {
40+
var numberPublic: Int { base.number }
41+
}
42+
3943
extension ReactiveTests {
4044
func testEnablesMutations() {
4145
var object = MyObject()
4246
object.rx.somethingPublic = "Aha"
4347

44-
XCTAssertEqual(object._something, "Aha")
48+
XCTAssertEqual(object.something, "Aha")
4549
XCTAssertEqual(object.rx.somethingPublic, "Aha")
4650
}
51+
52+
func testReactiveStruct() {
53+
var strct = MyStruct()
54+
strct.number = 800
55+
XCTAssertEqual(strct.rx.numberPublic, 800)
56+
}
57+
58+
func testReactiveProtocol() {
59+
let object = MyObject()
60+
XCTAssertEqual(object.number, object.rx.numberPublic)
61+
62+
object.number = 1000
63+
XCTAssertEqual(object.rx.numberPublic, 1000)
64+
}
65+
66+
func testDynamicLookup() {
67+
let object = MyObject()
68+
_ = Observable.just(10).bind(to: object.rx.number)
69+
XCTAssertEqual(object.number, 10)
70+
}
4771
}

0 commit comments

Comments
 (0)
Please sign in to comment.