Swiftgram/submodules/SSignalKit/SwiftSignalKitTests/SwiftSignalKitBasicTests.swift
Peter 971273e8f8 Add 'submodules/SSignalKit/' from commit '359b2ee7c9f20f99f221f78e307369ef5ad0ece2'
git-subtree-dir: submodules/SSignalKit
git-subtree-mainline: 4459dc5b47e7db4ea1adb3a43a4324d1c2f9feab
git-subtree-split: 359b2ee7c9f20f99f221f78e307369ef5ad0ece2
2019-06-11 18:57:57 +01:00

282 lines
10 KiB
Swift

import UIKit
import XCTest
import SwiftSignalKit
class SwiftSignalKitTests: XCTestCase {
override func setUp() {
super.setUp()
}
override func tearDown() {
super.tearDown()
}
func testActionDisposableDisposed() {
var deallocated = false
var disposed = false
if true {
var object: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated)
let disposable = ActionDisposable(action: { [object] () -> Void in
let _ = object.debugDescription
disposed = true
})
object = nil
XCTAssertFalse(deallocated, "deallocated != false")
disposable.dispose()
}
XCTAssertTrue(deallocated, "deallocated != true")
XCTAssertTrue(disposed, "disposed != true")
}
func testActionDisposableNotDisposed() {
var deallocated = false
var disposed = false
if true {
let object: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated)
let _ = ActionDisposable(action: { [object] () -> Void in
let _ = object.debugDescription
disposed = true
})
}
XCTAssertTrue(deallocated, "deallocated != true")
XCTAssertFalse(disposed, "disposed != false")
}
func testMetaDisposableDisposed() {
var deallocated = false
var disposed = false
if true {
let object: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated)
let disposable = ActionDisposable(action: { [object] () -> Void in
let _ = object.debugDescription
disposed = true
})
let metaDisposable = MetaDisposable()
metaDisposable.set(disposable)
metaDisposable.dispose()
}
XCTAssertTrue(deallocated, "deallocated != true")
XCTAssertTrue(disposed, "disposed != true")
}
func testMetaDisposableDisposedMultipleTimes() {
var deallocated1 = false
var disposed1 = false
var deallocated2 = false
var disposed2 = false
if true {
let object1: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated1)
let actionDisposable1 = ActionDisposable(action: { [object1] () -> Void in
let _ = object1.debugDescription
disposed1 = true
})
let object2: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated2)
let actionDisposable2 = ActionDisposable(action: { [object2] () -> Void in
let _ = object2.debugDescription
disposed2 = true
})
let metaDisposable = MetaDisposable()
metaDisposable.set(actionDisposable1)
metaDisposable.set(actionDisposable2)
metaDisposable.dispose()
}
XCTAssertTrue(deallocated1, "deallocated1 != true")
XCTAssertTrue(disposed1, "disposed1 != true")
XCTAssertTrue(deallocated2, "deallocated2 != true")
XCTAssertTrue(disposed2, "disposed2 != true")
}
func testMetaDisposableNotDisposed() {
var deallocated = false
var disposed = false
if true {
let object: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated)
let disposable = ActionDisposable(action: { [object] () -> Void in
let _ = object.debugDescription
disposed = true
})
let metaDisposable = MetaDisposable()
metaDisposable.set(disposable)
}
XCTAssertTrue(deallocated, "deallocated != true")
XCTAssertFalse(disposed, "disposed != false")
}
func testDisposableSetSingleDisposed() {
var deallocated = false
var disposed = false
if true {
let object: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated)
let disposable = ActionDisposable(action: { [object] () -> Void in
let _ = object.debugDescription
disposed = true
})
let disposableSet = DisposableSet()
disposableSet.add(disposable)
disposableSet.dispose()
}
XCTAssertTrue(deallocated, "deallocated != true")
XCTAssertTrue(disposed, "disposed != true")
}
func testDisposableSetMultipleDisposed() {
var deallocated1 = false
var disposed1 = false
var deallocated2 = false
var disposed2 = false
if true {
let object1: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated1)
let actionDisposable1 = ActionDisposable(action: { [object1] () -> Void in
let _ = object1.debugDescription
disposed1 = true
})
let object2: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated2)
let actionDisposable2 = ActionDisposable(action: { [object2] () -> Void in
let _ = object2.debugDescription
disposed2 = true
})
let disposableSet = DisposableSet()
disposableSet.add(actionDisposable1)
disposableSet.add(actionDisposable2)
disposableSet.dispose()
}
XCTAssertTrue(deallocated1, "deallocated1 != true")
XCTAssertTrue(disposed1, "disposed1 != true")
XCTAssertTrue(deallocated2, "deallocated2 != true")
XCTAssertTrue(disposed2, "disposed2 != true")
}
func testDisposableSetSingleNotDisposed() {
var deallocated = false
var disposed = false
if true {
let object: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated)
let disposable = ActionDisposable(action: { [object] () -> Void in
let _ = object.debugDescription
disposed = true
})
let disposableSet = DisposableSet()
disposableSet.add(disposable)
}
XCTAssertTrue(deallocated, "deallocated != true")
XCTAssertFalse(disposed, "disposed != false")
}
func testDisposableSetMultipleNotDisposed() {
var deallocated1 = false
var disposed1 = false
var deallocated2 = false
var disposed2 = false
if true {
let object1: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated1)
let actionDisposable1 = ActionDisposable(action: { [object1] () -> Void in
let _ = object1.debugDescription
disposed1 = true
})
let object2: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated2)
let actionDisposable2 = ActionDisposable(action: { [object2] () -> Void in
let _ = object2.debugDescription
disposed2 = true
})
let disposableSet = DisposableSet()
disposableSet.add(actionDisposable1)
disposableSet.add(actionDisposable2)
}
XCTAssertTrue(deallocated1, "deallocated1 != true")
XCTAssertFalse(disposed1, "disposed1 != false")
XCTAssertTrue(deallocated2, "deallocated2 != true")
XCTAssertFalse(disposed2, "disposed2 != false")
}
func testMetaDisposableAlreadyDisposed() {
var deallocated1 = false
var disposed1 = false
var deallocated2 = false
var disposed2 = false
if true {
let object1: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated1)
let actionDisposable1 = ActionDisposable(action: { [object1] () -> Void in
let _ = object1.debugDescription
disposed1 = true
})
let object2: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated2)
let actionDisposable2 = ActionDisposable(action: { [object2] () -> Void in
let _ = object2.debugDescription
disposed2 = true
})
let metaDisposable = MetaDisposable()
metaDisposable.set(actionDisposable1)
metaDisposable.dispose()
metaDisposable.set(actionDisposable2)
}
XCTAssertTrue(deallocated1, "deallocated1 != true")
XCTAssertTrue(disposed1, "disposed1 != true")
XCTAssertTrue(deallocated2, "deallocated2 != true")
XCTAssertTrue(disposed2, "disposed2 != true")
}
func testDisposableSetAlreadyDisposed() {
var deallocated1 = false
var disposed1 = false
var deallocated2 = false
var disposed2 = false
if true {
let object1: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated1)
let actionDisposable1 = ActionDisposable(action: { [object1] () -> Void in
let _ = object1.debugDescription
disposed1 = true
})
let object2: DeallocatingObject? = DeallocatingObject(deallocated: &deallocated2)
let actionDisposable2 = ActionDisposable(action: { [object2] () -> Void in
let _ = object2.debugDescription
disposed2 = true
})
let disposableSet = DisposableSet()
disposableSet.add(actionDisposable1)
disposableSet.dispose()
disposableSet.add(actionDisposable2)
}
XCTAssertTrue(deallocated1, "deallocated1 != true")
XCTAssertTrue(disposed1, "disposed1 != true")
XCTAssertTrue(deallocated2, "deallocated2 != true")
XCTAssertTrue(disposed2, "disposed2 != true")
}
func testDelayed1() {
var flag = false
let signal = Signal<Signal<Void, NoError>, NoError> { subscriber in
Queue.concurrentDefaultQueue().after(0.1, {
subscriber.putNext(Signal { susbcriber2 in
return ActionDisposable {
flag = true
}
})
})
return EmptyDisposable
} |> switchToLatest
let disposable = signal.start()
disposable.dispose()
usleep(1000000 * 20)
XCTAssert(flag == true)
}
}