Skip to content

Commit

Permalink
Also run CI on Big Sur (pointfreeco#691)
Browse files Browse the repository at this point in the history
* Also run CI on Big Sur

* Update ci.yml

* Fix

* fix
  • Loading branch information
stephencelis committed Aug 2, 2021
1 parent c24ea6e commit 6cd32e6
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 60 deletions.
29 changes: 15 additions & 14 deletions .github/workflows/ci.yml
Expand Up @@ -25,6 +25,21 @@ jobs:
if: ${{ matrix.xcode != 11.3 }}
run: make benchmark

library-beta:
runs-on: macos-11.0
strategy:
matrix:
xcode:
- '13.0'
steps:
- uses: actions/checkout@v2
- name: Select Xcode ${{ matrix.xcode }}
run: sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode }}.app
- name: Run tests
run: make test-library
- name: Run benchmark
run: make benchmark

examples:
runs-on: macos-10.15
strategy:
Expand All @@ -37,17 +52,3 @@ jobs:
run: sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode }}.app
- name: Run tests
run: make test-examples

# NB: GitHub's Big Sur instances are super flaky. We should revisit later.
# bigsur-tests:
# runs-on: macos-11.0
# strategy:
# matrix:
# xcode:
# - 12.4
# steps:
# - uses: actions/checkout@v2
# - name: Select Xcode ${{ matrix.xcode }}
# run: sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode }}.app
# - name: Run tests
# run: make test
104 changes: 58 additions & 46 deletions Tests/ComposableArchitectureTests/ViewStoreTests.swift
Expand Up @@ -138,60 +138,72 @@ final class ViewStoreTests: XCTestCase {
}

#if compiler(>=5.5)
@available(iOS 15, *)
func testSendWhile() async {
enum Action {
case response
case tapped
}
let reducer = Reducer<Bool, Action, Void> { state, action, environment in
switch action {
case .response:
state = false
return .none
case .tapped:
state = true
return Effect(value: .response)
.receive(on: DispatchQueue.main)
.eraseToEffect()
func testSendWhile() {
guard #available(iOS 15, macOS 12, tvOS 15, watchOS 8, *) else { return }

let expectation = self.expectation(description: "await")
Task { @MainActor in
enum Action {
case response
case tapped
}
let reducer = Reducer<Bool, Action, Void> { state, action, environment in
switch action {
case .response:
state = false
return .none
case .tapped:
state = true
return Effect(value: .response)
.receive(on: DispatchQueue.main)
.eraseToEffect()
}
}
}

let store = Store(initialState: false, reducer: reducer, environment: ())
let viewStore = ViewStore(store)
let store = Store(initialState: false, reducer: reducer, environment: ())
let viewStore = ViewStore(store)

XCTAssertEqual(viewStore.state, false)
await viewStore.send(.tapped, while: { $0 })
XCTAssertEqual(viewStore.state, false)
XCTAssertEqual(viewStore.state, false)
await viewStore.send(.tapped, while: { $0 })
XCTAssertEqual(viewStore.state, false)
expectation.fulfill()
}
self.wait(for: [expectation], timeout: 1)
}

@available(iOS 15, *)
func testSuspend() async {
enum Action {
case response
case tapped
}
let reducer = Reducer<Bool, Action, Void> { state, action, environment in
switch action {
case .response:
state = false
return .none
case .tapped:
state = true
return Effect(value: .response)
.receive(on: DispatchQueue.main)
.eraseToEffect()
func testSuspend() {
guard #available(iOS 15, macOS 12, tvOS 15, watchOS 8, *) else { return }

let expectation = self.expectation(description: "await")
Task { @MainActor in
enum Action {
case response
case tapped
}
let reducer = Reducer<Bool, Action, Void> { state, action, environment in
switch action {
case .response:
state = false
return .none
case .tapped:
state = true
return Effect(value: .response)
.receive(on: DispatchQueue.main)
.eraseToEffect()
}
}
}

let store = Store(initialState: false, reducer: reducer, environment: ())
let viewStore = ViewStore(store)
let store = Store(initialState: false, reducer: reducer, environment: ())
let viewStore = ViewStore(store)

XCTAssertEqual(viewStore.state, false)
viewStore.send(.tapped)
XCTAssertEqual(viewStore.state, true)
await viewStore.suspend(while: { $0 })
XCTAssertEqual(viewStore.state, false)
XCTAssertEqual(viewStore.state, false)
viewStore.send(.tapped)
XCTAssertEqual(viewStore.state, true)
await viewStore.suspend(while: { $0 })
XCTAssertEqual(viewStore.state, false)
expectation.fulfill()
}
self.wait(for: [expectation], timeout: 1)
}
#endif
}
Expand Down

0 comments on commit 6cd32e6

Please sign in to comment.