Skip to content

Commit

Permalink
Merge pull request #37 from Oni-zerone/feature/Pipeline-refactor
Browse files Browse the repository at this point in the history
Pipeline refactor
  • Loading branch information
Oni-zerone committed Jun 16, 2019
2 parents 0786e39 + 15e5ff4 commit f685fbb
Show file tree
Hide file tree
Showing 14 changed files with 411 additions and 150 deletions.
32 changes: 17 additions & 15 deletions Example/Pods/Pods.xcodeproj/project.pbxproj

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions Example/PowerTools.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; };
607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; };
92996D832F3E34BA04E3E515 /* Pods_PowerTools_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDC0DF49510CE77B0C060F52 /* Pods_PowerTools_Example.framework */; };
9705FDDD22B63AD700F890D7 /* PipeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9705FDDC22B63AD700F890D7 /* PipeTests.swift */; };
9717B2BF21BB410500C66EE0 /* StringViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9717B2BE21BB410500C66EE0 /* StringViewModel.swift */; };
9717B2C121BB430800C66EE0 /* StringSectionViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9717B2C021BB430800C66EE0 /* StringSectionViewModel.swift */; };
9717B2C421BB48A200C66EE0 /* ModelUpdateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9717B2C321BB48A200C66EE0 /* ModelUpdateTests.swift */; };
Expand Down Expand Up @@ -72,6 +73,7 @@
607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
607FACE51AFB9204008FA782 /* PowerTools_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PowerTools_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
9705FDDC22B63AD700F890D7 /* PipeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PipeTests.swift; sourceTree = "<group>"; };
9717B2BE21BB410500C66EE0 /* StringViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringViewModel.swift; sourceTree = "<group>"; };
9717B2C021BB430800C66EE0 /* StringSectionViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringSectionViewModel.swift; sourceTree = "<group>"; };
9717B2C321BB48A200C66EE0 /* ModelUpdateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModelUpdateTests.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -245,6 +247,7 @@
isa = PBXGroup;
children = (
9717B2DF21BD30FE00C66EE0 /* PipelineTests.swift */,
9705FDDC22B63AD700F890D7 /* PipeTests.swift */,
9717B2E421BD3AEA00C66EE0 /* PromisePipeTests.swift */,
977F82AA21D4D8BC0044074A /* SublinePipeTests.swift */,
);
Expand Down Expand Up @@ -564,6 +567,7 @@
978E52B422AD3BC6006833C5 /* UIScrollViewDelegateMock.swift in Sources */,
9750D0B92295D5F900E08571 /* ItemViewModelMock.swift in Sources */,
9717B2E521BD3AEA00C66EE0 /* PromisePipeTests.swift in Sources */,
9705FDDD22B63AD700F890D7 /* PipeTests.swift in Sources */,
9750D09F2292F7D600E08571 /* GridModuleTests.swift in Sources */,
9717B2E821BD472500C66EE0 /* AbstractFactoryTests.swift in Sources */,
9717B2CD21BC08CE00C66EE0 /* StringCell.swift in Sources */,
Expand Down
22 changes: 11 additions & 11 deletions Example/Tests/BaseModels/AssertPipe.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,47 +9,47 @@
import XCTest
import PowerTools

enum PipelineErrors: Error, Equatable {
public enum PipelineErrors: Error, Equatable {

case requiredFailure
}

class AssertPipe<Value>: PowerTools.Pipe<Value> {
public class AssertPipe<Value>: PowerTools.Pipe<Value> {

var successExpectation: XCTestExpectation?
var failureExpectation: XCTestExpectation?
var resetExpectation: XCTestExpectation?

init(success: XCTestExpectation? = nil, failure: XCTestExpectation? = nil, reset: XCTestExpectation? = nil) {
public init(success: XCTestExpectation? = nil, failure: XCTestExpectation? = nil, reset: XCTestExpectation? = nil) {

self.successExpectation = success
self.failureExpectation = failure
self.resetExpectation = reset
super.init()
}

override func success(_ value: Value) throws {
public override func success(_ value: Value) {

guard let exp = self.successExpectation else {
XCTFail("success should not be called.")
try super.success(value)
return
self.send(value)
return
}
exp.fulfill()
try super.success(value)
self.send(value)
}

override func failure(_ error: Error) {
public override func failure(_ error: Error) {

defer { super.failure(error) }

guard let exp = self.failureExpectation else {
return XCTFail("failure should not be called.")
return XCTFail("failure should not be called.")
}
exp.fulfill()
}

override func reset() {
public override func reset() {

defer { super.reset() }

Expand All @@ -59,7 +59,7 @@ class AssertPipe<Value>: PowerTools.Pipe<Value> {
exp.fulfill()
}

var expectations: [XCTestExpectation] {
public var expectations: [XCTestExpectation] {

var xpt: [XCTestExpectation] = []
if let success = self.successExpectation {
Expand Down
50 changes: 50 additions & 0 deletions Example/Tests/Pipeline/PipeTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
//
// PipeTests.swift
// PowerTools_Tests
//
// Created by Andrea Altea on 16/06/2019.
// Copyright © 2019 CocoaPods. All rights reserved.
//

import XCTest
@testable import PowerTools

class PipeTests: XCTestCase {

var pipe: PowerTools.Pipe<String>!
var assertPipe: AssertPipe<String>!

override func setUp() {
super.setUp()
self.pipe = Pipe()
self.assertPipe = AssertPipe()
self.pipe.nextPipe = assertPipe
}

override func tearDown() {
self.pipe = nil
self.assertPipe = nil
super.tearDown()
}

func testPipelineSucccess() {

assertPipe.successExpectation = expectation(description: "success")
self.pipe.process(.success(""))
wait(for: assertPipe.expectations, timeout: 1.0)
}

func testPipelineReset() {

assertPipe.resetExpectation = expectation(description: "reset")
self.pipe.process(.reset)
wait(for: assertPipe.expectations, timeout: 1.0)
}

func testPipelineFailure() {

assertPipe.failureExpectation = expectation(description: "failure")
self.pipe.process(.failure(PipelineErrors.requiredFailure))
wait(for: assertPipe.expectations, timeout: 1.0)
}
}
98 changes: 93 additions & 5 deletions Example/Tests/Pipeline/PipelineTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,19 @@ import XCTest
import PowerTools

class PipelineTests: XCTestCase {

var pipeline: Pipeline<String>!

override func setUp() {
super.setUp()
self.pipeline = Pipeline()
}

override func tearDown() {
self.pipeline = nil
super.tearDown()
}

func testPipelineLoad() {

let successExp = expectation(description: "success")
Expand All @@ -45,13 +45,101 @@ class PipelineTests: XCTestCase {

func testPipelineFailure() {

self.pipeline.attach(PromisePipe(success: { _ in throw PipelineErrors.requiredFailure }))

self.pipeline.attach(PromisePipe(success: { _ in
return .failure(PipelineErrors.requiredFailure)
}))

let failureExp = expectation(description: "failure")
let assertPipe = AssertPipe<String>(failure: failureExp)
self.pipeline.attach(assertPipe)

self.pipeline.load("")
wait(for: assertPipe.expectations, timeout: 1.0)
}

func testHeadPipe() {

self.pipeline.attach(PromisePipe(success: { value in
XCTAssert(value == "HeadPipe")
return .success(value)
}))
self.pipeline.headPipe = PromisePipe(success: { _ in
return .success("HeadPipe")
})
let successExp = expectation(description: "success")
let assertPipe = AssertPipe<String>(success: successExp)
self.pipeline.attach(assertPipe)
self.pipeline.load("")
wait(for: assertPipe.expectations, timeout: 1.0)
}

func testHeadPipeInit() {

self.pipeline = Pipeline(headPipe: PromisePipe(success: { value in
XCTAssert(value == "HeadPipe")
return .success(value)
}))
self.pipeline.headPipe = PromisePipe(success: { _ in
return .success("HeadPipe")
})

let successExp = expectation(description: "success")
let assertPipe = AssertPipe<String>(success: successExp)
self.pipeline.attach(assertPipe)
self.pipeline.load("")
wait(for: assertPipe.expectations, timeout: 1.0)
}

func testTailPipe() {

let successExp = expectation(description: "success")
self.pipeline.tailPipe = AssertPipe(success: successExp)
self.pipeline.load("")
wait(for: [successExp], timeout: 1.0)
}

func testTailPipeContent() {

let successExp = expectation(description: "success")
self.pipeline.tailPipe = PromisePipe(success: { value in
XCTAssert(value == "Content")
successExp.fulfill()
return nil
})

self.pipeline.attach(PromisePipe(success: { _ in
return .success("Content")
}))
self.pipeline.load("")
wait(for: [successExp], timeout: 1.0)
}

func testTailPipeInit() {

self.pipeline = Pipeline(headPipe: PromisePipe(success: { value in
XCTAssert(value == "HeadPipe")
return .success(value)
}))
self.pipeline.headPipe = PromisePipe(success: { _ in
return .success("HeadPipe")
})

let successExp = expectation(description: "success")
let assertPipe = AssertPipe<String>(success: successExp)
self.pipeline.attach(assertPipe)
self.pipeline.load("")
wait(for: assertPipe.expectations, timeout: 1.0)
}

func testMultipleLinking() {

let successExp = expectation(description: "success")
self.pipeline.attach([
PromisePipe(),
PromisePipe(),
AssertPipe(success: successExp)
])
self.pipeline.load("")
wait(for: [successExp], timeout: 1.0)
}
}
Loading

0 comments on commit f685fbb

Please sign in to comment.