This repository has been archived by the owner on Jul 14, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Felix Jendrusch
committed
Apr 20, 2015
1 parent
fba7c16
commit 0c946f1
Showing
7 changed files
with
174 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
// Copyright (c) 2015 Felix Jendrusch. All rights reserved. | ||
|
||
import Quick | ||
import Nimble | ||
|
||
import Result | ||
import Monocle | ||
import Pistachio | ||
|
||
class LensExtensionsSpec: QuickSpec { | ||
override func spec() { | ||
describe("Lifted lenses") { | ||
context("for results") { | ||
let counter = Counter(count: 1) | ||
let error = NSError() | ||
|
||
let lifted: Lens<Result<Counter, NSError>, Result<Int, NSError>> = lift(CounterLenses.count) | ||
|
||
it("should get values") { | ||
let result = get(lifted, Result.success(counter)) | ||
|
||
expect(result.value).to(equal(1)) | ||
} | ||
|
||
it("should return structure failures on get") { | ||
let result = get(lifted, Result.failure(error)) | ||
|
||
expect(result.error).to(beIdenticalTo(error)) | ||
} | ||
|
||
it("should set values") { | ||
let result = set(lifted, Result.success(counter), Result.success(1)) | ||
|
||
expect(result.value?.count).to(equal(1)) | ||
} | ||
|
||
it("should return structure failures on set") { | ||
let result = set(lifted, Result.failure(error), Result.success(1)) | ||
|
||
expect(result.error).to(beIdenticalTo(error)) | ||
} | ||
|
||
it("should return value failures on set") { | ||
let result = set(lifted, Result.success(counter), Result.failure(error)) | ||
|
||
expect(result.error).to(beIdenticalTo(error)) | ||
} | ||
} | ||
} | ||
|
||
describe("Mapped lenses") { | ||
let counter = Counter(count: 0) | ||
|
||
let mapped = map(CounterLenses.count, AnyObjectValueTransformers.int) | ||
|
||
it("should get values") { | ||
let result = get(mapped, Result.success(counter)) | ||
|
||
expect(result.value as? Int).to(equal(0)) | ||
} | ||
|
||
it("should set values") { | ||
let result = set(mapped, Result.success(counter), Result.success(2)) | ||
|
||
expect(result.value?.count).to(equal(2)) | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
// Copyright (c) 2015 Felix Jendrusch. All rights reserved. | ||
|
||
import ValueTransformer | ||
import Monocle | ||
import Pistachio | ||
|
||
struct Counter: Equatable { | ||
var count: Int | ||
} | ||
|
||
func == (lhs: Counter, rhs: Counter) -> Bool { | ||
return lhs.count == rhs.count | ||
} | ||
|
||
struct CounterLenses { | ||
static let count = Lens(get: { $0.count }, set: { (inout counter: Counter, count) in | ||
counter.count = count | ||
}) | ||
} | ||
|
||
struct CounterAdapters { | ||
static let anyObject = DictionaryAdapter(specification: [ | ||
"count": map(CounterLenses.count, AnyObjectValueTransformers.int) | ||
], dictionaryTransformer: AnyObjectValueTransformers.dictionary, value: Counter(count: 0)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
// Copyright (c) 2015 Felix Jendrusch. All rights reserved. | ||
|
||
import Quick | ||
import Nimble | ||
|
||
import Pistachio | ||
|
||
class LazyAdapterSpec: QuickSpec { | ||
override func spec() { | ||
describe("A LazyAdapter") { | ||
let adapter = NodeAdapters.anyObject | ||
|
||
it("should transform a value") { | ||
let result = adapter.transform(Node(children: [ Node(children: []) ])) | ||
|
||
expect(((result.value as? [String: AnyObject])?["children"] as? [AnyObject])?.count).to(equal(1)) | ||
} | ||
|
||
it("should reverse transform a value") { | ||
let result = adapter.reverseTransform([ "children": [ [ "children": [] ] ] ]) | ||
|
||
expect(result.value).to(equal(Node(children: [ Node(children: []) ]))) | ||
} | ||
} | ||
} | ||
} |