mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 14:45:21 +00:00
Add 'submodules/SSignalKit/' from commit '359b2ee7c9f20f99f221f78e307369ef5ad0ece2'
git-subtree-dir: submodules/SSignalKit git-subtree-mainline:4459dc5b47git-subtree-split:359b2ee7c9
This commit is contained in:
@@ -0,0 +1,281 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user