| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- //
- // ActionSpec.swift
- // ReactiveCocoa
- //
- // Created by Justin Spahr-Summers on 2014-12-11.
- // Copyright (c) 2014 GitHub. All rights reserved.
- //
- import Result
- import Nimble
- import Quick
- import ReactiveCocoa
- class ActionSpec: QuickSpec {
- override func spec() {
- describe("Action") {
- var action: Action<Int, String, NSError>!
- var enabled: MutableProperty<Bool>!
- var executionCount = 0
- var values: [String] = []
- var errors: [NSError] = []
- var scheduler: TestScheduler!
- let testError = NSError(domain: "ActionSpec", code: 1, userInfo: nil)
- beforeEach {
- executionCount = 0
- values = []
- errors = []
- enabled = MutableProperty(false)
- scheduler = TestScheduler()
- action = Action(enabledIf: enabled) { number in
- return SignalProducer { observer, disposable in
- executionCount += 1
- if number % 2 == 0 {
- observer.sendNext("\(number)")
- observer.sendNext("\(number)\(number)")
- scheduler.schedule {
- observer.sendCompleted()
- }
- } else {
- scheduler.schedule {
- observer.sendFailed(testError)
- }
- }
- }
- }
- action.values.observeNext { values.append($0) }
- action.errors.observeNext { errors.append($0) }
- }
- it("should be disabled and not executing after initialization") {
- expect(action.enabled.value) == false
- expect(action.executing.value) == false
- }
- it("should error if executed while disabled") {
- var receivedError: ActionError<NSError>?
- action.apply(0).startWithFailed {
- receivedError = $0
- }
- expect(receivedError).notTo(beNil())
- if let error = receivedError {
- let expectedError = ActionError<NSError>.NotEnabled
- expect(error == expectedError) == true
- }
- }
- it("should enable and disable based on the given property") {
- enabled.value = true
- expect(action.enabled.value) == true
- expect(action.executing.value) == false
- enabled.value = false
- expect(action.enabled.value) == false
- expect(action.executing.value) == false
- }
- describe("execution") {
- beforeEach {
- enabled.value = true
- }
- it("should execute successfully") {
- var receivedValue: String?
- action.apply(0)
- .assumeNoErrors()
- .startWithNext {
- receivedValue = $0
- }
- expect(executionCount) == 1
- expect(action.executing.value) == true
- expect(action.enabled.value) == false
- expect(receivedValue) == "00"
- expect(values) == [ "0", "00" ]
- expect(errors) == []
- scheduler.run()
- expect(action.executing.value) == false
- expect(action.enabled.value) == true
- expect(values) == [ "0", "00" ]
- expect(errors) == []
- }
- it("should execute with an error") {
- var receivedError: ActionError<NSError>?
- action.apply(1).startWithFailed {
- receivedError = $0
- }
- expect(executionCount) == 1
- expect(action.executing.value) == true
- expect(action.enabled.value) == false
- scheduler.run()
- expect(action.executing.value) == false
- expect(action.enabled.value) == true
- expect(receivedError).notTo(beNil())
- if let error = receivedError {
- let expectedError = ActionError<NSError>.ProducerError(testError)
- expect(error == expectedError) == true
- }
- expect(values) == []
- expect(errors) == [ testError ]
- }
- }
- }
- }
- }
|