Skip to content

Instantly share code, notes, and snippets.

View laiso's full-sized avatar
☀️

laiso laiso

☀️
View GitHub Profile
class AmountSettingViewModelSpec: QuickSpec {
override func spec() {
var viewModel: AmountSettingViewModel!
beforeEach {
viewModel = AmountSettingViewModel(amountText: Observable<String>.just("120"),
submitButtonTap: Observable<Void>.just())
}
it("should be button ebanled") {
let enable = try! viewModel.submitButtonEnable.toBlocking().single()
@laiso
laiso / CodePiece.swift
Created February 6, 2017 09:27
ログイン成否のテスト書けそうな気がしてきた気がする #CodePiece
import Quick
import Nimble
import RxTest
import RxBlocking
import RxSwift
import RxCocoa
import Result
@testable import customer
class SigninViewModelSpec: QuickSpec {
@laiso
laiso / CodePiece.swift
Created January 27, 2017 03:56
うーんこういう風に書きたい #CodePiece
let request = UserAPIRequest(id: 1) // APIKit
let username = URLSession.shared.rx.object(request: request)
.map { user in // Himotoki
return user.name
}
class PersonSpec: QuickSpec {
override func spec() {
describe("Person"){
describe("成人判定") {
itBehavesLike("is成人") {
let p = Person(name: "_", age: 21)
return ["person": p]
}
itBehavesLike("is成人") { ["person": Person(name: "_", age: 999)] }
itBehavesLike("not成人") { ["person": Person(name: "_", age: 19)] }
@laiso
laiso / CodePiece.swift
Created January 13, 2017 05:04
こんなかんじ・・? #CodePiece
extension Charge {
static var stubObjects: [Charge] {
let JSON = json(from: "Fixtures/charges.json")
return try! decodeArray(JSON, rootKeyPath: "data")
}
}
struct MockWebAPI: HomeAPIProtocol {
func getCharges() -> Observable<[Charge]> {
return Observable.from(Charge.stubObjects)
@laiso
laiso / CodePiece.swift
Created January 10, 2017 11:28
これこれ #CodePiece
class HomeViewModel {
let charges = Variable<[Charge]>([])
let didAppear = PublishSubject<Void>()
let disposeBag = DisposeBag()
init(with state: AppState) {
guard let api = state.webAPI else { fatalError("error") }
let _ = didAppear.flatMapLatest { api.getCharges() }
@laiso
laiso / CodePiece.swift
Created January 4, 2017 17:55
はー libmemcached の初期化処理が通らん…… #CodePiece
import Foundation
import CLibmemcached
struct Memcached {
func connection() -> UnsafeMutablePointer<memcached_st> {
let memc1 = CLibmemcached.memcached_create(nil)
assert(memc1 != nil) // OK
let config = "--SERVER=localhost:11211"
var configPtr = [Int8](config.utf8CString)
@laiso
laiso / gist:8ea236df2ca6840e176c5fa589854d40
Created December 22, 2016 15:23
docker run --rm --volume="$(pwd):/app" --workdir=/app -it ibmcom/swift-ubuntu swift test
Compile Swift Module 'Quick' (21 sources)
Compile Swift Module 'Nimble' (45 sources)
Compile Swift Module 'Result' (2 sources)
Compile Swift Module 'ReactiveSwift' (19 sources)
Compile Swift Module 'ReactiveSwiftTests' (18 sources)
/app/Tests/ReactiveSwiftTests/SchedulerSpec.swift:92:5: error: value of type 'Expectation<[Int]>' (aka 'Expectation<Array<Int>>') has no member 'toEventually'
expect(values).toEventually(equal([ 0 ]))
^~~~~~~~~~~~~~ ~~~~~~~~~~~~
/app/Tests/ReactiveSwiftTests/SchedulerSpec.swift:109:5: error: value of type 'Expectation<[Int]>' (aka 'Expectation<Array<Int>>') has no member 'toEventually'
expect(values).toEventually(equal([ 0, 1, 2 ]))
@laiso
laiso / CodePiece.swift
Last active December 8, 2016 05:45
RxBlocking, 復帰したらログインするていうテストがこう書けて便利じゃん #CodePiece
let authenticationNeeded = try! viewModel.authenticationNeeded.asObservable().toBlocking()
expect(try! authenticationNeeded.first()).to(beFalse())
state.notificationCenter.post(name: Notification.Name.UIApplicationDidBecomeActive, object: nil)
expect(try! authenticationNeeded.last()).to(beTrue())
#!/usr/bin/env ruby
require "open-uri"
class Converter
RE_MD_IMAGE = /\!\[.*\]\((http.+)\)/
RE_TAG_IMAGE = /<img .*src="(http.+?)".+?>/
def initialize(file, conf)
@conf = conf