Best Quick code snippet using has
KVOObservableTests.swift
Source:KVOObservableTests.swift  
1//2//  KVOObservableTests.swift3//  Tests4//5//  Created by Krunoslav Zaher on 5/19/15.6//  Copyright © 2015 Krunoslav Zaher. All rights reserved.7//8import XCTest9import RxSwift10import RxCocoa11#if os(iOS)12    import UIKit13#elseif os(macOS)14    import Cocoa15#endif16final class KVOObservableTests : RxTest {17}18final class TestClass : NSObject {19    @objc dynamic var pr: String? = "0"20}21final class Parent : NSObject {22    var disposeBag: DisposeBag! = DisposeBag()23    @objc dynamic var val: String = ""24    init(callback: @escaping (String?) -> Void) {25        super.init()26        27        self.rx.observe(String.self, "val", options: [.initial, .new], retainSelf: false)28            .subscribe(onNext: callback)29            .disposed(by: disposeBag)30    }31    32    deinit {33        disposeBag = nil34    }35}36final class Child : NSObject {37    let disposeBag = DisposeBag()38    39    init(parent: ParentWithChild, callback: @escaping (String?) -> Void) {40        super.init()41        parent.rx.observe(String.self, "val", options: [.initial, .new], retainSelf: false)42            .subscribe(onNext: callback)43            .disposed(by: disposeBag)44    }45    46    deinit {47        48    }49}50final class ParentWithChild : NSObject {51    @objc dynamic var val: String = ""52    53    var child: Child? = nil54    55    init(callback: @escaping (String?) -> Void) {56        super.init()57        child = Child(parent: self, callback: callback)58    }59}60@objc enum IntEnum: Int {61    typealias RawValue = Int62    case one63    case two64}65@objc enum UIntEnum: UInt {66    case one67    case two68}69@objc enum Int32Enum: Int32 {70    case one71    case two72}73@objc enum UInt32Enum: UInt32 {74    case one75    case two76}77@objc enum Int64Enum: Int64 {78    case one79    case two80}81@objc enum UInt64Enum: UInt64 {82    case one83    case two84}85final class HasStrongProperty : NSObject {86    @objc dynamic var property: NSObject? = nil87    @objc dynamic var frame: CGRect88    @objc dynamic var point: CGPoint89    @objc dynamic var size: CGSize90    @objc dynamic var intEnum: IntEnum = .one91    @objc dynamic var uintEnum: UIntEnum = .one92    @objc dynamic var int32Enum: Int32Enum = .one93    @objc dynamic var uint32Enum: UInt32Enum = .one94    @objc dynamic var int64Enum: Int64Enum = .one95    @objc dynamic var uint64Enum: UInt64Enum = .one96    97    @objc dynamic var integer: Int98    @objc dynamic var uinteger: UInt99    100    override init() {101        self.frame = CGRect(x: 0, y: 0, width: 100, height: 100)102        self.point = CGPoint(x: 3, y: 5)103        self.size = CGSize(width: 1, height: 2)104        105        self.integer = 1106        self.uinteger = 1107        super.init()108    }109}110final class HasWeakProperty : NSObject {111    @objc dynamic weak var property: NSObject? = nil112    113    override init() {114        super.init()115    }116}117// test fast observe118extension KVOObservableTests {119    func test_New() {120        let testClass = TestClass()121        122        let os = testClass.rx.observe(String.self, "pr", options: .new)123        124        var latest: String?125        126        let d = os.subscribe(onNext: { latest = $0 })127        128        XCTAssertTrue(latest == nil)129        130        testClass.pr = "1"131        132        XCTAssertEqual(latest!, "1")133        134        testClass.pr = "2"135        136        XCTAssertEqual(latest!, "2")137        testClass.pr = nil138        139        XCTAssertTrue(latest == nil)140        testClass.pr = "3"141        142        XCTAssertEqual(latest!, "3")143        144        d.dispose()145        146        testClass.pr = "4"147        XCTAssertEqual(latest!, "3")148    }149    150    func test_New_And_Initial() {151        let testClass = TestClass()152        153        let os = testClass.rx.observe(String.self, "pr", options: [.initial, .new])154        155        var latest: String?156        157        let d = os.subscribe(onNext: { latest = $0 })158        159        XCTAssertTrue(latest == "0")160        161        testClass.pr = "1"162        163        XCTAssertEqual(latest ?? "", "1")164        165        testClass.pr = "2"166        167        XCTAssertEqual(latest ?? "", "2")168        169        testClass.pr = nil170        171        XCTAssertTrue(latest == nil)172        173        testClass.pr = "3"174        175        XCTAssertEqual(latest ?? "", "3")176        177        d.dispose()178        179        testClass.pr = "4"180        181        XCTAssertEqual(latest ?? "", "3")182    }183    184    func test_Default() {185        let testClass = TestClass()186        187        let os = testClass.rx.observe(String.self, "pr")188        189        var latest: String?190        191        let d = os.subscribe(onNext: { latest = $0 })192        193        XCTAssertTrue(latest == "0")194        195        testClass.pr = "1"196        197        XCTAssertEqual(latest!, "1")198        199        testClass.pr = "2"200        201        XCTAssertEqual(latest!, "2")202        203        testClass.pr = nil204        205        XCTAssertTrue(latest == nil)206        207        testClass.pr = "3"208        209        XCTAssertEqual(latest!, "3")210        211        d.dispose()212        213        testClass.pr = "4"214        215        XCTAssertEqual(latest!, "3")216    }217    218    func test_ObserveAndDontRetainWorks() {219        var latest: String?220        var isDisposed = false221        222        var parent: Parent! = Parent { n in223            latest = n224        }225        226        _ = parent.rx.deallocated227            .subscribe(onCompleted: {228                isDisposed = true229            })230        XCTAssertTrue(latest == "")231        XCTAssertTrue(isDisposed == false)232        233        parent.val = "1"234        235        XCTAssertTrue(latest == "1")236        XCTAssertTrue(isDisposed == false)237        238        parent = nil239        240        XCTAssertTrue(latest == "1")241        XCTAssertTrue(isDisposed == true)242    }243    244    func test_ObserveAndDontRetainWorks2() {245        var latest: String?246        var isDisposed = false247        248        var parent: ParentWithChild! = ParentWithChild { n in249            latest = n250        }251        252        _ = parent.rx.deallocated253            .subscribe(onCompleted: {254                isDisposed = true255            })256        XCTAssertTrue(latest == "")257        XCTAssertTrue(isDisposed == false)258        259        parent.val = "1"260        261        XCTAssertTrue(latest == "1")262        XCTAssertTrue(isDisposed == false)263        264        parent = nil265        266        XCTAssertTrue(latest == "1")267        XCTAssertTrue(isDisposed == true)268    }269}270#if !DISABLE_SWIZZLING271// test weak observe 272extension KVOObservableTests {273    274    func testObserveWeak_SimpleStrongProperty() {275        var latest: String?276        var isDisposed = false277        278        var root: HasStrongProperty! = HasStrongProperty()279        280        _ = root.rx.observeWeakly(String.self, "property")281            .subscribe(onNext: { n in282                latest = n283            })284        285        _ = root.rx.deallocated286            .subscribe(onCompleted: {287                isDisposed = true288            })289        XCTAssertTrue(latest == nil)290        XCTAssertTrue(!isDisposed)291        292        root.property = "a".duplicate()293        XCTAssertTrue(latest == "a")294        XCTAssertTrue(!isDisposed)295        296        root = nil297        XCTAssertTrue(latest == nil)298        XCTAssertTrue(isDisposed)299    }300    301    func testObserveWeak_SimpleWeakProperty() {302        var latest: String?303        var isDisposed = false304        305        var root: HasWeakProperty! = HasWeakProperty()306        307        _ = root.rx.observeWeakly(String.self, "property")308            .subscribe(onNext: { n in309                latest = n310        })311        312        _ = root.rx.deallocated313            .subscribe(onCompleted: {314                isDisposed = true315        })316        XCTAssertTrue(latest == nil)317        XCTAssertTrue(!isDisposed)318    319        let a: NSString! = "a".duplicate()320        321        root.property = a322        323        XCTAssertTrue(latest == "a")324        XCTAssertTrue(!isDisposed)325        326        root = nil327        328        XCTAssertTrue(latest == nil)329        XCTAssertTrue(isDisposed)330    }331    func testObserveWeak_ObserveFirst_Weak_Strong_Basic() {332        var latest: String?333        var isDisposed = false334        335        var child: HasStrongProperty! = HasStrongProperty()336        337        var root: HasWeakProperty! = HasWeakProperty()338        339        _ = root.rx.observeWeakly(String.self, "property.property")340            .subscribe(onNext: { n in341                latest = n342            })343        344        _ = root.rx.deallocated345            .subscribe(onCompleted: {346                isDisposed = true347            })348        XCTAssertTrue(latest == nil)349        XCTAssertTrue(isDisposed == false)350        351        root.property = child352        353        XCTAssertTrue(latest == nil)354        XCTAssertTrue(isDisposed == false)355        356        let one: NSString! = "1".duplicate()357        358        child.property = one359        360        XCTAssertTrue(latest == "1")361        XCTAssertTrue(isDisposed == false)362        363        root = nil364        child = nil365     366        XCTAssertTrue(latest == nil)367        XCTAssertTrue(isDisposed == true)368    }369    370    func testObserveWeak_Weak_Strong_Observe_Basic() {371        var latest: String?372        var isDisposed = false373        374        var child: HasStrongProperty! = HasStrongProperty()375        376        var root: HasWeakProperty! = HasWeakProperty()377        378        root.property = child379        380        let one: NSString! = "1".duplicate()381        382        child.property = one383        384        XCTAssertTrue(latest == nil)385        XCTAssertTrue(isDisposed == false)386        387        _ = root.rx.observeWeakly(String.self, "property.property")388            .subscribe(onNext: { n in389                latest = n390        })391        392        _ = root.rx.deallocated393            .subscribe(onCompleted: {394                isDisposed = true395        })396        XCTAssertTrue(latest == "1")397        XCTAssertTrue(isDisposed == false)398        399        root = nil400        child = nil401        402        XCTAssertTrue(latest == nil)403        XCTAssertTrue(isDisposed == true)404    }405    406    func testObserveWeak_ObserveFirst_Strong_Weak_Basic() {407        var latest: String?408        var isDisposed = false409        410        var child: HasWeakProperty! = HasWeakProperty()411        412        var root: HasStrongProperty! = HasStrongProperty()413        414        _ = root.rx.observeWeakly(String.self, "property.property")415            .subscribe(onNext: { n in416                latest = n417        })418        419        _ = root.rx.deallocated420            .subscribe(onCompleted: {421                isDisposed = true422        })423        XCTAssertTrue(latest == nil)424        XCTAssertTrue(isDisposed == false)425        426        root.property = child427        428        XCTAssertTrue(latest == nil)429        XCTAssertTrue(isDisposed == false)430        431        let one: NSString! = "1".duplicate()432        433        child.property = one434        435        XCTAssertTrue(latest == "1")436        XCTAssertTrue(isDisposed == false)437        438        root = nil439        child = nil440        441        XCTAssertTrue(latest == nil)442        XCTAssertTrue(isDisposed == true)443    }444    445    func testObserveWeak_Strong_Weak_Observe_Basic() {446        var latest: String?447        var isDisposed = false448        449        var child: HasWeakProperty! = HasWeakProperty()450        451        var root: HasStrongProperty! = HasStrongProperty()452        453        root.property = child454        455        let one: NSString! = "1".duplicate()456        457        child.property = one458        459        XCTAssertTrue(latest == nil)460        XCTAssertTrue(isDisposed == false)461        462        _ = root.rx.observeWeakly(String.self, "property.property")463            .subscribe(onNext: { n in464                latest = n465            })466        467        _ = root.rx.deallocated468            .subscribe(onCompleted: {469                isDisposed = true470        })471        XCTAssertTrue(latest == "1")472        XCTAssertTrue(isDisposed == false)473        474        root = nil475        child = nil476        477        XCTAssertTrue(latest == nil)478        XCTAssertTrue(isDisposed == true)479    }480    481    // compiler won't release weak references otherwise :(482    func _testObserveWeak_Strong_Weak_Observe_NilLastPropertyBecauseOfWeak() -> (HasWeakProperty, NSObject?, Observable<Void>) {483        var dealloc: Observable<Void>! = nil484        let child: HasWeakProperty! = HasWeakProperty()485        var latest: NSObject? = nil486        487        autoreleasepool {488            let root: HasStrongProperty! = HasStrongProperty()489            490            root.property = child491            492            var one: NSObject! = nil493            494            one = NSObject()495            496            child.property = one497            498            XCTAssertTrue(latest == nil)499            500            let observable = root.rx.observeWeakly(NSObject.self, "property.property")501            _ = observable502                .subscribe(onNext: { n in503                    latest = n504                })505            506            XCTAssertTrue(latest! === one)507         508            dealloc = one.rx.deallocating509            510            one = nil511        }512        return (child, latest, dealloc)513    }514    515    func testObserveWeak_Strong_Weak_Observe_NilLastPropertyBecauseOfWeak() {516        var gone = false517        let (child, latest, dealloc) = _testObserveWeak_Strong_Weak_Observe_NilLastPropertyBecauseOfWeak()518        _ = dealloc519            .subscribe(onNext: { n in520                gone = true521            })522        523        XCTAssertTrue(gone)524        XCTAssertTrue(child.property == nil)525        XCTAssertTrue(latest == nil)526    }527    528    func _testObserveWeak_Weak_Weak_Weak_middle_NilifyCorrectly() -> (HasWeakProperty, NSObject?, Observable<Void>) {529        var dealloc: Observable<Void>! = nil530        var middle: HasWeakProperty! = HasWeakProperty()531        var latest: NSObject? = nil532        let root: HasWeakProperty! = HasWeakProperty()533        534        autoreleasepool {535            middle = HasWeakProperty()536            let leaf = HasWeakProperty()537            538            root.property = middle539            middle.property = leaf540            541            XCTAssertTrue(latest == nil)542            543            let observable = root.rx.observeWeakly(NSObject.self, "property.property.property")544            _ = observable545                .subscribe(onNext: { n in546                    latest = n547                })548            549            XCTAssertTrue(latest == nil)550            551            let one = NSObject()552            553            leaf.property = one554            555            XCTAssertTrue(latest === one)556            557            dealloc = middle.rx.deallocating558        }559        return (root!, latest, dealloc)560    }561    562    func testObserveWeak_Weak_Weak_Weak_middle_NilifyCorrectly() {563        let (root, latest, deallocatedMiddle) = _testObserveWeak_Weak_Weak_Weak_middle_NilifyCorrectly()564        565        var gone = false566        567        _ = deallocatedMiddle568            .subscribe(onCompleted: {569                gone = true570            })571        572        XCTAssertTrue(gone)573        XCTAssertTrue(root.property == nil)574        XCTAssertTrue(latest == nil)575    }576    577    func testObserveWeak_TargetDeallocated() {578        var root: HasStrongProperty! = HasStrongProperty()579        580        var latest: String? = nil581        582        root.property = "a".duplicate()583        584        XCTAssertTrue(latest == nil)585        586        _ = root587            .rx.observeWeakly(String.self, "property")588            .subscribe(onNext: { n in589                latest = n590            })591       592        XCTAssertTrue(latest == "a")593     594        var rootDeallocated = false595        596        _ = root597            .rx.deallocated598            .subscribe(onCompleted: {599                rootDeallocated = true600            })601        602        root = nil603        604        XCTAssertTrue(latest == nil)605        XCTAssertTrue(rootDeallocated)606    }607    608    func testObserveWeakWithOptions_ObserveNotInitialValue() {609        var root: HasStrongProperty! = HasStrongProperty()610        611        var latest: String? = nil612        613        root.property = "a".duplicate()614        615        XCTAssertTrue(latest == nil)616        617        _ = root618            .rx.observeWeakly(String.self, "property", options: .new)619            .subscribe(onNext: { n in620                latest = n621            })622        623        XCTAssertTrue(latest == nil)624        625        root.property = "b".duplicate()626        XCTAssertTrue(latest == "b")627        628        var rootDeallocated = false629        630        _ = root631            .rx.deallocated632            .subscribe(onCompleted: {633                rootDeallocated = true634            })635        636        root = nil637        638        XCTAssertTrue(latest == nil)639        XCTAssertTrue(rootDeallocated)640    }641    642    #if os(macOS)643    // just making sure it's all the same for NS extensions644    func testObserve_ObserveNSRect() {645        var root: HasStrongProperty! = HasStrongProperty()646        647        var latest: NSRect? = nil648        649        XCTAssertTrue(latest == nil)650        651        let disposable = root.rx.observe(NSRect.self, "frame")652            .subscribe(onNext: { n in653                latest = n654            })655        XCTAssertTrue(latest == root.frame)656        657        root.frame = NSRect(x: -2, y: 0, width: 0, height: 1)658        659        XCTAssertTrue(latest == NSRect(x: -2, y: 0, width: 0, height: 1))660        661        var rootDeallocated = false662        663        _ = root664            .rx.deallocated665            .subscribe(onCompleted: {666                rootDeallocated = true667            })668        669        root = nil670        671        XCTAssertTrue(latest == NSRect(x: -2, y: 0, width: 0, height: 1))672        XCTAssertTrue(!rootDeallocated)673        674        disposable.dispose()675    }676    #endif677    678    // let's just check for one, otherones should have the same check679    func testObserve_ObserveCGRectForBiggerStructureDoesntCrashPropertyTypeReturnsNil() {680        var root: HasStrongProperty! = HasStrongProperty()681        682        var latest: CGSize? = nil683        684        XCTAssertTrue(latest == nil)685        686        let d = root.rx.observe(CGSize.self, "frame")687            .subscribe(onNext: { n in688                latest = n689            })690        defer {691            d.dispose()692        }693        XCTAssertTrue(latest == nil)694        695        root.size = CGSize(width: 56, height: 1)696        697        XCTAssertTrue(latest == nil)698        699        var rootDeallocated = false700        701        _ = root702            .rx.deallocated703            .subscribe(onCompleted: {704                rootDeallocated = true705            })706        707        root = nil708        709        XCTAssertTrue(latest == nil)710        XCTAssertTrue(!rootDeallocated)711    }712    713    func testObserve_ObserveCGRect() {714        var root: HasStrongProperty! = HasStrongProperty()715        716        var latest: CGRect? = nil717        718        XCTAssertTrue(latest == nil)719        720        let d = root.rx.observe(CGRect.self, "frame")721            .subscribe(onNext: { n in722                latest = n723            })724        defer {725            d.dispose()726        }727        XCTAssertTrue(latest == root.frame)728        729        root.frame = CGRect(x: -2, y: 0, width: 0, height: 1)730        731        XCTAssertTrue(latest == CGRect(x: -2, y: 0, width: 0, height: 1))732        733        var rootDeallocated = false734        735        _ = root736            .rx.deallocated737            .subscribe(onCompleted: {738                rootDeallocated = true739            })740        741        root = nil742        743        XCTAssertTrue(latest == CGRect(x: -2, y: 0, width: 0, height: 1))744        XCTAssertTrue(!rootDeallocated)745    }746    747    func testObserve_ObserveCGSize() {748        var root: HasStrongProperty! = HasStrongProperty()749        750        var latest: CGSize? = nil751        752        XCTAssertTrue(latest == nil)753        754        let d = root.rx.observe(CGSize.self, "size")755            .subscribe(onNext: { n in756                latest = n757            })758        defer {759            d.dispose()760        }761        XCTAssertTrue(latest == root.size)762        763        root.size = CGSize(width: 56, height: 1)764        765        XCTAssertTrue(latest == CGSize(width: 56, height: 1))766        767        var rootDeallocated = false768        769        _ = root770            .rx.deallocated771            .subscribe(onCompleted: {772                rootDeallocated = true773            })774        775        root = nil776        777        XCTAssertTrue(latest == CGSize(width: 56, height: 1))778        XCTAssertTrue(!rootDeallocated)779    }780    781    func testObserve_ObserveCGPoint() {782        var root: HasStrongProperty! = HasStrongProperty()783        784        var latest: CGPoint? = nil785        786        XCTAssertTrue(latest == nil)787        788        let d = root.rx.observe(CGPoint.self, "point")789            .subscribe(onNext: { n in790                latest = n791            })792        defer {793            d.dispose()794        }795        796        XCTAssertTrue(latest == root.point)797        798        root.point = CGPoint(x: -100, y: 1)799        800        XCTAssertTrue(latest == CGPoint(x: -100, y: 1))801        802        var rootDeallocated = false803        804        _ = root805            .rx.deallocated806            .subscribe(onCompleted: {807                rootDeallocated = true808            })809        810        root = nil811        812        XCTAssertTrue(latest == CGPoint(x: -100, y: 1))813        XCTAssertTrue(!rootDeallocated)814    }815    816    817    func testObserveWeak_ObserveCGRect() {818        var root: HasStrongProperty! = HasStrongProperty()819        820        var latest: CGRect? = nil821        822        XCTAssertTrue(latest == nil)823        824        _ = root825            .rx.observeWeakly(CGRect.self, "frame")826            .subscribe(onNext: { n in827                latest = n828            })829        XCTAssertTrue(latest == root.frame)830        831        root.frame = CGRect(x: -2, y: 0, width: 0, height: 1)832        833        XCTAssertTrue(latest == CGRect(x: -2, y: 0, width: 0, height: 1))834        835        var rootDeallocated = false836        837        _ = root838            .rx.deallocated839            .subscribe(onCompleted: {840                rootDeallocated = true841            })842        843        root = nil844        845        XCTAssertTrue(latest == nil)846        XCTAssertTrue(rootDeallocated)847    }848    849    func testObserveWeak_ObserveCGSize() {850        var root: HasStrongProperty! = HasStrongProperty()851        852        var latest: CGSize? = nil853        854        XCTAssertTrue(latest == nil)855        856        _ = root857            .rx.observeWeakly(CGSize.self, "size")858            .subscribe(onNext: { n in859                latest = n860            })861        XCTAssertTrue(latest == root.size)862        863        root.size = CGSize(width: 56, height: 1)864        865        XCTAssertTrue(latest == CGSize(width: 56, height: 1))866        867        var rootDeallocated = false868        869        _ = root870            .rx.deallocated871            .subscribe(onCompleted: {872                rootDeallocated = true873            })874        875        root = nil876        877        XCTAssertTrue(latest == nil)878        XCTAssertTrue(rootDeallocated)879    }880    881    func testObserveWeak_ObserveCGPoint() {882        var root: HasStrongProperty! = HasStrongProperty()883        884        var latest: CGPoint? = nil885        886        XCTAssertTrue(latest == nil)887        888        _ = root889            .rx.observeWeakly(CGPoint.self, "point")890            .subscribe(onNext: { n in891                latest = n892            })893        894        XCTAssertTrue(latest == root.point)895        896        root.point = CGPoint(x: -100, y: 1)897        898        XCTAssertTrue(latest == CGPoint(x: -100, y: 1))899        900        var rootDeallocated = false901        902        _ = root903            .rx.deallocated904            .subscribe(onCompleted: {905                rootDeallocated = true906            })907        908        root = nil909        910        XCTAssertTrue(latest == nil)911        XCTAssertTrue(rootDeallocated)912    }913    914    func testObserveWeak_ObserveInt() {915        var root: HasStrongProperty! = HasStrongProperty()916        917        var latest: Int? = nil918        919        XCTAssertTrue(latest == nil)920        921        _ = root922            .rx.observeWeakly(NSNumber.self, "integer")923            .subscribe(onNext: { n in924                latest = n?.intValue925            })926        XCTAssertTrue(latest == root.integer)927        928        root.integer = 10929        930        XCTAssertTrue(latest == 10)931        932        var rootDeallocated = false933        934        _ = root935            .rx.deallocated936            .subscribe(onCompleted: {937                rootDeallocated = true938            })939        940        root = nil941        942        XCTAssertTrue(latest == nil)943        XCTAssertTrue(rootDeallocated)944    }945    func testObserveWeak_PropertyDoesntExist() {946        var root: HasStrongProperty! = HasStrongProperty()947        948        var lastError: Swift.Error? = nil949        950        _ = root.rx.observeWeakly(NSNumber.self, "notExist")951            .subscribe(onError: { error in952                lastError = error953            })954        955        XCTAssertTrue(lastError != nil)956        lastError = nil957        var rootDeallocated = false958        959        _ = root960            .rx.deallocated961            .subscribe(onCompleted: {962                rootDeallocated = true963            })964        965        root = nil966        967        XCTAssertTrue(rootDeallocated)968    }969    970    func testObserveWeak_HierarchyPropertyDoesntExist() {971        var root: HasStrongProperty! = HasStrongProperty()972        973        var lastError: Swift.Error? = nil974        975        _ = root.rx.observeWeakly(NSNumber.self, "property.notExist")976            .subscribe(onError: { error in977                lastError = error978            })979        980        XCTAssertTrue(lastError == nil)981        982        root.property = HasStrongProperty()983        XCTAssertTrue(lastError != nil)984        985        var rootDeallocated = false986        987        _ = root988            .rx.deallocated989            .subscribe(onCompleted: {990                rootDeallocated = true991            })992        993        root = nil994        995        XCTAssertTrue(rootDeallocated)996    }997}998#endif999// MARK: KVORepresentable1000extension KVOObservableTests {1001    func testObserve_ObserveIntegerRepresentable() {1002        var root: HasStrongProperty! = HasStrongProperty()1003        var latest: Int?1004        XCTAssertTrue(latest == nil)1005        let disposable = root.rx.observe(Int.self, "integer")1006            .subscribe(onNext: { n in1007                latest = n1008            })1009        XCTAssertTrue(latest == 1)1010        root.integer = 21011        XCTAssertTrue(latest == 2)1012        var rootDeallocated = false1013        _ = root1014            .rx.deallocated1015            .subscribe(onCompleted: {1016                rootDeallocated = true1017            })1018        root = nil1019        XCTAssertTrue(latest == 2)1020        XCTAssertTrue(!rootDeallocated)1021        disposable.dispose()1022    }1023    func testObserve_ObserveUIntegerRepresentable() {1024        var root: HasStrongProperty! = HasStrongProperty()1025        var latest: UInt?1026        XCTAssertTrue(latest == nil)1027        let disposable = root.rx.observe(UInt.self, "uinteger")1028            .subscribe(onNext: { n in1029                latest = n1030        })1031        XCTAssertTrue(latest == 1)1032        root.uinteger = 21033        XCTAssertTrue(latest == 2)1034        var rootDeallocated = false1035        _ = root1036            .rx.deallocated1037            .subscribe(onCompleted: {1038                rootDeallocated = true1039            })1040        root = nil1041        XCTAssertTrue(latest == 2)1042        XCTAssertTrue(!rootDeallocated)1043        1044        disposable.dispose()1045    }1046}1047#if !DISABLE_SWIZZLING1048    extension KVOObservableTests {1049        func testObserveWeak_ObserveIntegerRepresentable() {1050            var root: HasStrongProperty! = HasStrongProperty()1051            var latest: Int?1052            XCTAssertTrue(latest == nil)1053            _ = root1054                .rx.observeWeakly(Int.self, "integer")1055                .subscribe(onNext: { n in1056                    latest = n1057                })1058            XCTAssertTrue(latest == 1)1059            root.integer = 21060            XCTAssertTrue(latest == 2)1061            var rootDeallocated = false1062            _ = root1063                .rx.deallocated1064                .subscribe(onCompleted: {1065                    rootDeallocated = true1066                })1067            1068            root = nil1069            1070            XCTAssertTrue(latest == nil)1071            XCTAssertTrue(rootDeallocated)1072        }1073        func testObserveWeak_ObserveUIntegerRepresentable() {1074            var root: HasStrongProperty! = HasStrongProperty()1075            var latest: UInt?1076            XCTAssertTrue(latest == nil)1077            _ = root1078                .rx.observeWeakly(UInt.self, "uinteger")1079                .subscribe(onNext: { n in1080                    latest = n1081                })1082            XCTAssertTrue(latest == 1)1083            root.uinteger = 21084            XCTAssertTrue(latest == 2)1085            var rootDeallocated = false1086            _ = root1087                .rx.deallocated1088                .subscribe(onCompleted: {1089                    rootDeallocated = true1090                })1091            root = nil1092            XCTAssertTrue(latest == nil)1093            XCTAssertTrue(rootDeallocated)1094        }1095    }1096#endif1097// MARK: RawRepresentable1098extension KVOObservableTests {1099    func testObserve_ObserveIntEnum() {1100        var root: HasStrongProperty! = HasStrongProperty()1101        var latest: IntEnum?1102        XCTAssertTrue(latest == nil)1103        let disposable = root.rx.observe(IntEnum.self, "intEnum")1104            .subscribe(onNext: { n in1105                latest = n1106            })1107        XCTAssertTrue(latest == .one)1108        root.intEnum = .two1109        XCTAssertTrue(latest == .two)1110        var rootDeallocated = false1111        _ = root1112            .rx.deallocated1113            .subscribe(onCompleted: {1114                rootDeallocated = true1115            })1116        root = nil1117        XCTAssertTrue(latest == .two)1118        XCTAssertTrue(!rootDeallocated)1119        disposable.dispose()1120    }1121    func testObserve_ObserveInt32Enum() {1122        var root: HasStrongProperty! = HasStrongProperty()1123        var latest: Int32Enum?1124        XCTAssertTrue(latest == nil)1125        let disposable = root.rx.observe(Int32Enum.self, "int32Enum")1126            .subscribe(onNext: { n in1127                latest = n1128        })1129        XCTAssertTrue(latest == .one)1130        root.int32Enum = .two1131        XCTAssertTrue(latest == .two)1132        var rootDeallocated = false1133        _ = root1134            .rx.deallocated1135            .subscribe(onCompleted: {1136                rootDeallocated = true1137            })1138        root = nil1139        XCTAssertTrue(latest == .two)1140        XCTAssertTrue(!rootDeallocated)1141        1142        disposable.dispose()1143    }1144    func testObserve_ObserveInt64Enum() {1145        var root: HasStrongProperty! = HasStrongProperty()1146        var latest: Int64Enum?1147        XCTAssertTrue(latest == nil)1148        let disposable = root.rx.observe(Int64Enum.self, "int64Enum")1149            .subscribe(onNext: { n in1150                latest = n1151        })1152        XCTAssertTrue(latest == .one)1153        root.int64Enum = .two1154        XCTAssertTrue(latest == .two)1155        var rootDeallocated = false1156        _ = root1157            .rx.deallocated1158            .subscribe(onCompleted: {1159                rootDeallocated = true1160            })1161        root = nil1162        XCTAssertTrue(latest == .two)1163        XCTAssertTrue(!rootDeallocated)1164        1165        disposable.dispose()1166    }1167    func testObserve_ObserveUIntEnum() {1168        var root: HasStrongProperty! = HasStrongProperty()1169        var latest: UIntEnum?1170        XCTAssertTrue(latest == nil)1171        let disposable = root.rx.observe(UIntEnum.self, "uintEnum")1172            .subscribe(onNext: { n in1173                latest = n1174            })1175        XCTAssertTrue(latest == .one)1176        root.uintEnum = .two1177        XCTAssertTrue(latest == .two)1178        var rootDeallocated = false1179        _ = root1180            .rx.deallocated1181            .subscribe(onCompleted: {1182                rootDeallocated = true1183            })1184        root = nil1185        XCTAssertTrue(latest == .two)1186        XCTAssertTrue(!rootDeallocated)1187        disposable.dispose()1188    }1189    func testObserve_ObserveUInt32Enum() {1190        var root: HasStrongProperty! = HasStrongProperty()1191        var latest: UInt32Enum?1192        XCTAssertTrue(latest == nil)1193        let disposable = root.rx.observe(UInt32Enum.self, "uint32Enum")1194            .subscribe(onNext: { n in1195                latest = n1196        })1197        XCTAssertTrue(latest == .one)1198        root.uint32Enum = .two1199        XCTAssertTrue(latest == .two)1200        var rootDeallocated = false1201        _ = root1202            .rx.deallocated1203            .subscribe(onCompleted: {1204                rootDeallocated = true1205            })1206        root = nil1207        XCTAssertTrue(latest == .two)1208        XCTAssertTrue(!rootDeallocated)1209        1210        disposable.dispose()1211    }1212    func testObserve_ObserveUInt64Enum() {1213        var root: HasStrongProperty! = HasStrongProperty()1214        var latest: UInt64Enum?1215        XCTAssertTrue(latest == nil)1216        let disposable = root.rx.observe(UInt64Enum.self, "uint64Enum")1217            .subscribe(onNext: { n in1218                latest = n1219        })1220        XCTAssertTrue(latest == .one)1221        root.uint64Enum = .two1222        XCTAssertTrue(latest == .two)1223        var rootDeallocated = false1224        _ = root1225            .rx.deallocated1226            .subscribe(onCompleted: {1227                rootDeallocated = true1228            })1229        root = nil1230        XCTAssertTrue(latest == .two)1231        XCTAssertTrue(!rootDeallocated)1232        1233        disposable.dispose()1234    }1235}1236#if !DISABLE_SWIZZLING1237extension KVOObservableTests {1238    func testObserveWeak_ObserveIntEnum() {1239        var root: HasStrongProperty! = HasStrongProperty()1240        var latest: IntEnum?1241        XCTAssertTrue(latest == nil)1242        _ = root1243            .rx.observeWeakly(IntEnum.self, "intEnum")1244            .subscribe(onNext: { n in1245                latest = n1246            })1247        XCTAssertTrue(latest == .one)1248        root.intEnum = .two1249        XCTAssertTrue(latest == .two)1250        var rootDeallocated = false1251        _ = root1252            .rx.deallocated1253            .subscribe(onCompleted: {1254                rootDeallocated = true1255            })1256        root = nil1257        XCTAssertTrue(latest == nil)1258        XCTAssertTrue(rootDeallocated)1259    }1260    func testObserveWeak_ObserveInt32Enum() {1261        var root: HasStrongProperty! = HasStrongProperty()1262        var latest: Int32Enum?1263        XCTAssertTrue(latest == nil)1264        _ = root1265            .rx.observeWeakly(Int32Enum.self, "int32Enum")1266            .subscribe(onNext: { n in1267                latest = n1268        })1269        XCTAssertTrue(latest == .one)1270        root.int32Enum = .two1271        XCTAssertTrue(latest == .two)1272        var rootDeallocated = false1273        _ = root1274            .rx.deallocated1275            .subscribe(onCompleted: {1276                rootDeallocated = true1277            })1278        root = nil1279        XCTAssertTrue(latest == nil)1280        XCTAssertTrue(rootDeallocated)1281    }1282    func testObserveWeak_ObserveInt64Enum() {1283        var root: HasStrongProperty! = HasStrongProperty()1284        var latest: Int64Enum?1285        XCTAssertTrue(latest == nil)1286        _ = root1287            .rx.observeWeakly(Int64Enum.self, "int64Enum")1288            .subscribe(onNext: { n in1289                latest = n1290        })1291        XCTAssertTrue(latest == .one)1292        root.int64Enum = .two1293        XCTAssertTrue(latest == .two)1294        var rootDeallocated = false1295        _ = root1296            .rx.deallocated1297            .subscribe(onCompleted: {1298                rootDeallocated = true1299            })1300        root = nil1301        XCTAssertTrue(latest == nil)1302        XCTAssertTrue(rootDeallocated)1303    }1304    func testObserveWeak_ObserveUIntEnum() {1305        var root: HasStrongProperty! = HasStrongProperty()1306        var latest: UIntEnum?1307        XCTAssertTrue(latest == nil)1308        _ = root1309            .rx.observeWeakly(UIntEnum.self, "uintEnum")1310            .subscribe(onNext: { n in1311                latest = n1312            })1313        XCTAssertTrue(latest == .one)1314        root.uintEnum = .two1315        XCTAssertTrue(latest == .two)1316        var rootDeallocated = false1317        _ = root1318            .rx.deallocated1319            .subscribe(onCompleted: {1320                rootDeallocated = true1321            })1322        root = nil1323        XCTAssertTrue(latest == nil)1324        XCTAssertTrue(rootDeallocated)1325    }1326    func testObserveWeak_ObserveUInt32Enum() {1327        var root: HasStrongProperty! = HasStrongProperty()1328        var latest: UInt32Enum?1329        XCTAssertTrue(latest == nil)1330        _ = root1331            .rx.observeWeakly(UInt32Enum.self, "uint32Enum")1332            .subscribe(onNext: { n in1333                latest = n1334        })1335        XCTAssertTrue(latest == .one)1336        root.uint32Enum = .two1337        XCTAssertTrue(latest == .two)1338        var rootDeallocated = false1339        _ = root1340            .rx.deallocated1341            .subscribe(onCompleted: {1342                rootDeallocated = true1343            })1344        root = nil1345        XCTAssertTrue(latest == nil)1346        XCTAssertTrue(rootDeallocated)1347    }1348    func testObserveWeak_ObserveUInt64Enum() {1349        var root: HasStrongProperty! = HasStrongProperty()1350        var latest: UInt32Enum?1351        XCTAssertTrue(latest == nil)1352        _ = root1353            .rx.observeWeakly(UInt32Enum.self, "uint64Enum")1354            .subscribe(onNext: { n in1355                latest = n1356        })1357        XCTAssertTrue(latest == .one)1358        root.uint64Enum = .two1359        XCTAssertTrue(latest == .two)1360        var rootDeallocated = false1361        _ = root1362            .rx.deallocated1363            .subscribe(onCompleted: {1364                rootDeallocated = true1365            })1366        root = nil1367        XCTAssertTrue(latest == nil)1368        XCTAssertTrue(rootDeallocated)1369    }1370}1371#endif1372extension NSString {1373    func duplicate() -> NSString {1374        return NSMutableString(string: self)1375    }1376}...Mapper.php
Source:Mapper.php  
...29            'loadedExtensions'        => [],30            'unavailableExtensions'   => [],31            'notLoadedExtensions'     => [],32        ];33        if ($arguments->hasColors()) {34            $result['colors'] = $arguments->colors();35        }36        if ($arguments->hasBootstrap()) {37            $result['bootstrap'] = $arguments->bootstrap();38        }39        if ($arguments->hasCacheResult()) {40            $result['cacheResult'] = $arguments->cacheResult();41        }42        if ($arguments->hasCacheResultFile()) {43            $result['cacheResultFile'] = $arguments->cacheResultFile();44        }45        if ($arguments->hasColumns()) {46            $result['columns'] = $arguments->columns();47        }48        if ($arguments->hasConfiguration()) {49            $result['configuration'] = $arguments->configuration();50        }51        if ($arguments->hasCoverageCacheDirectory()) {52            $result['coverageCacheDirectory'] = $arguments->coverageCacheDirectory();53        }54        if ($arguments->hasWarmCoverageCache()) {55            $result['warmCoverageCache'] = $arguments->warmCoverageCache();56        }57        if ($arguments->hasCoverageClover()) {58            $result['coverageClover'] = $arguments->coverageClover();59        }60        if ($arguments->hasCoverageCobertura()) {61            $result['coverageCobertura'] = $arguments->coverageCobertura();62        }63        if ($arguments->hasCoverageCrap4J()) {64            $result['coverageCrap4J'] = $arguments->coverageCrap4J();65        }66        if ($arguments->hasCoverageHtml()) {67            $result['coverageHtml'] = $arguments->coverageHtml();68        }69        if ($arguments->hasCoveragePhp()) {70            $result['coveragePHP'] = $arguments->coveragePhp();71        }72        if ($arguments->hasCoverageText()) {73            $result['coverageText'] = $arguments->coverageText();74        }75        if ($arguments->hasCoverageTextShowUncoveredFiles()) {76            $result['coverageTextShowUncoveredFiles'] = $arguments->hasCoverageTextShowUncoveredFiles();77        }78        if ($arguments->hasCoverageTextShowOnlySummary()) {79            $result['coverageTextShowOnlySummary'] = $arguments->coverageTextShowOnlySummary();80        }81        if ($arguments->hasCoverageXml()) {82            $result['coverageXml'] = $arguments->coverageXml();83        }84        if ($arguments->hasPathCoverage()) {85            $result['pathCoverage'] = $arguments->pathCoverage();86        }87        if ($arguments->hasDebug()) {88            $result['debug'] = $arguments->debug();89        }90        if ($arguments->hasHelp()) {91            $result['help'] = $arguments->help();92        }93        if ($arguments->hasFilter()) {94            $result['filter'] = $arguments->filter();95        }96        if ($arguments->hasTestSuite()) {97            $result['testsuite'] = $arguments->testSuite();98        }99        if ($arguments->hasGroups()) {100            $result['groups'] = $arguments->groups();101        }102        if ($arguments->hasExcludeGroups()) {103            $result['excludeGroups'] = $arguments->excludeGroups();104        }105        if ($arguments->hasTestsCovering()) {106            $result['testsCovering'] = $arguments->testsCovering();107        }108        if ($arguments->hasTestsUsing()) {109            $result['testsUsing'] = $arguments->testsUsing();110        }111        if ($arguments->hasTestSuffixes()) {112            $result['testSuffixes'] = $arguments->testSuffixes();113        }114        if ($arguments->hasIncludePath()) {115            $result['includePath'] = $arguments->includePath();116        }117        if ($arguments->hasListGroups()) {118            $result['listGroups'] = $arguments->listGroups();119        }120        if ($arguments->hasListSuites()) {121            $result['listSuites'] = $arguments->listSuites();122        }123        if ($arguments->hasListTests()) {124            $result['listTests'] = $arguments->listTests();125        }126        if ($arguments->hasListTestsXml()) {127            $result['listTestsXml'] = $arguments->listTestsXml();128        }129        if ($arguments->hasPrinter()) {130            $result['printer'] = $arguments->printer();131        }132        if ($arguments->hasLoader()) {133            $result['loader'] = $arguments->loader();134        }135        if ($arguments->hasJunitLogfile()) {136            $result['junitLogfile'] = $arguments->junitLogfile();137        }138        if ($arguments->hasTeamcityLogfile()) {139            $result['teamcityLogfile'] = $arguments->teamcityLogfile();140        }141        if ($arguments->hasExecutionOrder()) {142            $result['executionOrder'] = $arguments->executionOrder();143        }144        if ($arguments->hasExecutionOrderDefects()) {145            $result['executionOrderDefects'] = $arguments->executionOrderDefects();146        }147        if ($arguments->hasExtensions()) {148            $result['extensions'] = $arguments->extensions();149        }150        if ($arguments->hasUnavailableExtensions()) {151            $result['unavailableExtensions'] = $arguments->unavailableExtensions();152        }153        if ($arguments->hasResolveDependencies()) {154            $result['resolveDependencies'] = $arguments->resolveDependencies();155        }156        if ($arguments->hasProcessIsolation()) {157            $result['processIsolation'] = $arguments->processIsolation();158        }159        if ($arguments->hasRepeat()) {160            $result['repeat'] = $arguments->repeat();161        }162        if ($arguments->hasStderr()) {163            $result['stderr'] = $arguments->stderr();164        }165        if ($arguments->hasStopOnDefect()) {166            $result['stopOnDefect'] = $arguments->stopOnDefect();167        }168        if ($arguments->hasStopOnError()) {169            $result['stopOnError'] = $arguments->stopOnError();170        }171        if ($arguments->hasStopOnFailure()) {172            $result['stopOnFailure'] = $arguments->stopOnFailure();173        }174        if ($arguments->hasStopOnWarning()) {175            $result['stopOnWarning'] = $arguments->stopOnWarning();176        }177        if ($arguments->hasStopOnIncomplete()) {178            $result['stopOnIncomplete'] = $arguments->stopOnIncomplete();179        }180        if ($arguments->hasStopOnRisky()) {181            $result['stopOnRisky'] = $arguments->stopOnRisky();182        }183        if ($arguments->hasStopOnSkipped()) {184            $result['stopOnSkipped'] = $arguments->stopOnSkipped();185        }186        if ($arguments->hasFailOnEmptyTestSuite()) {187            $result['failOnEmptyTestSuite'] = $arguments->failOnEmptyTestSuite();188        }189        if ($arguments->hasFailOnIncomplete()) {190            $result['failOnIncomplete'] = $arguments->failOnIncomplete();191        }192        if ($arguments->hasFailOnRisky()) {193            $result['failOnRisky'] = $arguments->failOnRisky();194        }195        if ($arguments->hasFailOnSkipped()) {196            $result['failOnSkipped'] = $arguments->failOnSkipped();197        }198        if ($arguments->hasFailOnWarning()) {199            $result['failOnWarning'] = $arguments->failOnWarning();200        }201        if ($arguments->hasTestdoxGroups()) {202            $result['testdoxGroups'] = $arguments->testdoxGroups();203        }204        if ($arguments->hasTestdoxExcludeGroups()) {205            $result['testdoxExcludeGroups'] = $arguments->testdoxExcludeGroups();206        }207        if ($arguments->hasTestdoxHtmlFile()) {208            $result['testdoxHTMLFile'] = $arguments->testdoxHtmlFile();209        }210        if ($arguments->hasTestdoxTextFile()) {211            $result['testdoxTextFile'] = $arguments->testdoxTextFile();212        }213        if ($arguments->hasTestdoxXmlFile()) {214            $result['testdoxXMLFile'] = $arguments->testdoxXmlFile();215        }216        if ($arguments->hasUseDefaultConfiguration()) {217            $result['useDefaultConfiguration'] = $arguments->useDefaultConfiguration();218        }219        if ($arguments->hasNoExtensions()) {220            $result['noExtensions'] = $arguments->noExtensions();221        }222        if ($arguments->hasNoCoverage()) {223            $result['noCoverage'] = $arguments->noCoverage();224        }225        if ($arguments->hasNoLogging()) {226            $result['noLogging'] = $arguments->noLogging();227        }228        if ($arguments->hasNoInteraction()) {229            $result['noInteraction'] = $arguments->noInteraction();230        }231        if ($arguments->hasBackupGlobals()) {232            $result['backupGlobals'] = $arguments->backupGlobals();233        }234        if ($arguments->hasBackupStaticAttributes()) {235            $result['backupStaticAttributes'] = $arguments->backupStaticAttributes();236        }237        if ($arguments->hasVerbose()) {238            $result['verbose'] = $arguments->verbose();239        }240        if ($arguments->hasReportUselessTests()) {241            $result['reportUselessTests'] = $arguments->reportUselessTests();242        }243        if ($arguments->hasStrictCoverage()) {244            $result['strictCoverage'] = $arguments->strictCoverage();245        }246        if ($arguments->hasDisableCodeCoverageIgnore()) {247            $result['disableCodeCoverageIgnore'] = $arguments->disableCodeCoverageIgnore();248        }249        if ($arguments->hasBeStrictAboutChangesToGlobalState()) {250            $result['beStrictAboutChangesToGlobalState'] = $arguments->beStrictAboutChangesToGlobalState();251        }252        if ($arguments->hasDisallowTestOutput()) {253            $result['disallowTestOutput'] = $arguments->disallowTestOutput();254        }255        if ($arguments->hasBeStrictAboutResourceUsageDuringSmallTests()) {256            $result['beStrictAboutResourceUsageDuringSmallTests'] = $arguments->beStrictAboutResourceUsageDuringSmallTests();257        }258        if ($arguments->hasDefaultTimeLimit()) {259            $result['defaultTimeLimit'] = $arguments->defaultTimeLimit();260        }261        if ($arguments->hasEnforceTimeLimit()) {262            $result['enforceTimeLimit'] = $arguments->enforceTimeLimit();263        }264        if ($arguments->hasDisallowTodoAnnotatedTests()) {265            $result['disallowTodoAnnotatedTests'] = $arguments->disallowTodoAnnotatedTests();266        }267        if ($arguments->hasReverseList()) {268            $result['reverseList'] = $arguments->reverseList();269        }270        if ($arguments->hasCoverageFilter()) {271            $result['coverageFilter'] = $arguments->coverageFilter();272        }273        if ($arguments->hasRandomOrderSeed()) {274            $result['randomOrderSeed'] = $arguments->randomOrderSeed();275        }276        if ($arguments->hasXdebugFilterFile()) {277            $result['xdebugFilterFile'] = $arguments->xdebugFilterFile();278        }279        return $result;280    }281}...HasText.swift
Source:HasText.swift  
1extension String {2    public var wmf_hasText: Bool {3        return !isEmpty4    }5    public var wmf_hasNonWhitespaceText: Bool {6        return wmf_hasText && !self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty7    }8    public var wmf_hasAlphanumericText: Bool {9        return wmf_hasText && (self.components(separatedBy: .alphanumerics).count > 1)10    }11}12extension NSAttributedString {13    public var wmf_hasText: Bool {14        return string.wmf_hasText15    }16    public var wmf_hasNonWhitespaceText: Bool {17        return string.wmf_hasNonWhitespaceText18    }19}20extension UILabel {21    public var wmf_hasText: Bool {22        guard let text = text else {23            return false24        }25        return text.wmf_hasText26    }27    @objc public var wmf_hasNonWhitespaceText: Bool {28        guard let text = text else {29            return false30        }31        return text.wmf_hasNonWhitespaceText32    }33    public var wmf_hasAttributedText: Bool {34        guard let attributedText = attributedText else {35            return false36        }37        return attributedText.wmf_hasText38    }39    public var wmf_hasNonWhitespaceAttributedText: Bool {40        guard let attributedText = attributedText else {41            return false42        }43        return attributedText.wmf_hasNonWhitespaceText44    }45    46    public var wmf_hasAnyText: Bool {47        return wmf_hasText || wmf_hasAttributedText48    }49    50    public var wmf_hasAnyNonWhitespaceText: Bool {51        return wmf_hasNonWhitespaceText || wmf_hasNonWhitespaceAttributedText52    }53}54extension UITextView {55    public var wmf_hasAnyNonWhitespaceText: Bool {56        return text?.wmf_hasNonWhitespaceText ?? false || attributedText?.wmf_hasNonWhitespaceText ?? false57    }58}59extension UIButton {60    public var wmf_hasText: Bool {61        guard let label = titleLabel else {62            return false63        }64        return label.wmf_hasText65    }66    67    public var wmf_hasNonWhitespaceText: Bool {68        guard let label = titleLabel else {69            return false70        }71        return label.wmf_hasNonWhitespaceText72    }73    74    public var wmf_hasAttributedText: Bool {75        guard let label = titleLabel else {76            return false77        }78        return label.wmf_hasText79    }80    81    public var wmf_hasNonWhitespaceAttributedText: Bool {82        guard let label = titleLabel else {83            return false84        }85        return label.wmf_hasNonWhitespaceText86    }87    88    public var wmf_hasAnyText: Bool {89        return wmf_hasText || wmf_hasAttributedText90    }91    92    public var wmf_hasAnyNonWhitespaceText: Bool {93        return wmf_hasNonWhitespaceText || wmf_hasNonWhitespaceAttributedText94    }95}96extension UITextField {97    public var wmf_hasText: Bool {98        guard let text = text else {99            return false100        }101        return text.wmf_hasText102    }103    104    public var wmf_hasNonWhitespaceText: Bool {105        guard let text = text else {106            return false107        }108        return text.wmf_hasNonWhitespaceText109    }110    111    public var wmf_hasAttributedText: Bool {112        guard let attributedText = attributedText else {113            return false114        }115        return attributedText.wmf_hasText116    }117    118    public var wmf_hasNonWhitespaceAttributedText: Bool {119        guard let attributedText = attributedText else {120            return false121        }122        return attributedText.wmf_hasNonWhitespaceText123    }124    125    public var wmf_hasAnyText: Bool {126        return wmf_hasText || wmf_hasAttributedText127    }128    129    public var wmf_hasAnyNonWhitespaceText: Bool {130        return wmf_hasNonWhitespaceText || wmf_hasNonWhitespaceAttributedText131    }132}...AudioDevice.swift
Source:AudioDevice.swift  
...12    let objectID: ObjectID13    14    var canMute: Bool {15    16        hasProperty(.mute) && isPropertySettable(.mute)17    }18    19    var muted: Bool {20        21        get {22            23            try! get(from: .mute).boolValue24        }25        26        nonmutating set(mute) {27            28            try! set(AudioObjectPropertyValue(mute), to: .mute)29        }30    }31    32    var hasName: Bool {33    34        hasProperty(.name)35    }36    37    var name: String {38        39        try! get(from: .name).stringValue40    }41    42    var hasModelName: Bool {43        44        hasProperty(.modelName)45    }46    47    var modelName: String {48        49        try! get(from: .modelName).stringValue50    }51    52    var hasManufacturer: Bool {53        54        hasProperty(.manufacturer)55    }56    57    var manufacturer: String {58        59        try! get(from: .manufacturer).stringValue60    }61    62    var hasElementName: Bool {63        64        hasProperty(.elementName)65    }66    67    var elementName: String {68        69        try! get(from: .elementName).stringValue70    }71    72    var hasCategoryName: Bool {73        74        hasProperty(.categoryName)75    }76    77    var categoryName: String {78        79        try! get(from: .elementName).stringValue80    }81    82    var hasNumberName: Bool {83        84        hasProperty(.numberName)85    }86    87    var numberName: String {88        89        try! get(from: .elementName).stringValue90    }91    92    var hasIdentify: Bool {93        94        hasProperty(.identify)95    }96    97    var identify: UInt32 {98        99        try! get(from: .identify).number100    }101    102    var hasSerialNumber: Bool {103        104        hasProperty(.serialNumber)105    }106    107    var serialNumber: String {108        109        try! get(from: .serialNumber).stringValue110    }111    112    var hasFirmwareVersion: Bool {113        114        hasProperty(.firmwareVersion)115    }116    117    var firmwareVersion: String {118        119        try! get(from: .firmwareVersion).stringValue120    }121}122extension AudioDevice {123    124    func hasProperty(_ property: AudioDeviceProperty) -> Bool {125        AudioObjectController.propertyExists(property, on: objectID)126    }127    128    func hasProperty(_ property: AudioObjectProperty) -> Bool {129        AudioObjectController.propertyExists(property, on: objectID)130    }131    132    func isPropertySettable(_ property: AudioDeviceProperty) -> Bool {133        134        do {135            return try AudioObjectController.propertySettable(property, on: objectID)136        }137        catch {138            139            return false140        }141    }142    ...has
Using AI Code Generation
1class Sort {2    let quickSort = QuickSort()3    let mergeSort = MergeSort()4    let heapSort = HeapSort()5    let insertionSort = InsertionSort()6    let bubbleSort = BubbleSort()7    let selectionSort = SelectionSort()8    func sortArray(array:[Int], sortType:SortType) -> [Int] {9        switch sortType {10            return quickSort.sort(array: array)11            return mergeSort.sort(array: array)12            return heapSort.sort(array: array)13            return insertionSort.sort(array: array)14            return bubbleSort.sort(array: array)15            return selectionSort.sort(array: array)16        }17    }18}19enum SortType {20}has
Using AI Code Generation
1class QuickSort {2    init(arr: [Int]) {3    }4    func sort() -> [Int] {5        return quickSort(arr: arr, low: 0, high: arr.count - 1)6    }7    func quickSort(arr: [Int], low: Int, high: Int) -> [Int] {8        if low < high {9            let pi = partition(arr: &arr, low: low, high: high)10            quickSort(arr: &arr, low: low, high: pi - 1)11            quickSort(arr: &arr, low: pi + 1, high: high)12        }13    }14    func partition(arr: inout [Int], low: Int, high: Int) -> Int {15        var i = (low - 1)16        for j in low..<high {17            if arr[j] <= pivot {18                arr.swapAt(i, j)19            }20        }21        arr.swapAt(i + 1, high)22    }23}24class MergeSort {25    init(arr: [Int]) {26    }27    func sort() -> [Int] {28        return mergeSort(arr: arr, low: 0, high: arr.count - 1)29    }30    func mergeSort(arr: [Int], low: Int, high: Int) -> [Int] {31        if low < high {32            let mid = low + (high - low) / 233            mergeSort(arr: &arr, low: low, high: mid)34            mergeSort(arr: &arr, low: mid + 1, high: high)35            merge(arr: &arr, low: low, mid: mid, high: high)36        }37    }38    func merge(arr: inout [Int], low: Int, mid: Int, high: Int) {39        var left = [Int](repeating: 0, count: n1has
Using AI Code Generation
1import Foundation2var array = [Int](count: 1000, repeatedValue: 0)3for i in 0..<array.count {4    array[i] = Int(arc4random_uniform(1000))5}6var quickSort = QuickSort()7quickSort.sort(&array)8for i in 0..<array.count {9    print(array[i])10}11import Foundation12var array = [Int](count: 1000, repeatedValue: 0)13for i in 0..<array.count {14    array[i] = Int(arc4random_uniform(1000))15}16var mergeSort = MergeSort()17mergeSort.sort(&array)18for i in 0..<array.count {19    print(array[i])20}21import Foundation22var array = [Int](count: 1000, repeatedValue: 0)23for i in 0..<array.count {24    array[i] = Int(arc4random_uniform(1000))25}26var insertionSort = InsertionSort()27insertionSort.sort(&array)28for i in 0..<array.count {29    print(array[i])30}31import Foundation32var array = [Int](count: 1000, repeatedValue: 0)33for i in 0..<array.count {34    array[i] = Int(arc4random_uniform(1000))35}36var bubbleSort = BubbleSort()37bubbleSort.sort(&array)38for i in 0..<array.count {39    print(array[i])40}41import Foundation42var array = [Int](count: 1000, repeatedValue: 0)has
Using AI Code Generation
1class QuickSort {2    func quickSort(array: [Int]) -> [Int] {3        guard array.count > 1 else {4        }5        let less = array.filter { $0 < pivot }6        let equal = array.filter { $0 == pivot }7        let greater = array.filter { $0 > pivot }8        return quickSort(array: less) + equal + quickSort(array: greater)9    }10}11class QuickSort {12    func quickSort(array: [Int]) -> [Int] {13        guard array.count > 1 else {14        }15        let less = array.filter { $0 < pivot }16        let equal = array.filter { $0 == pivot }17        let greater = array.filter { $0 > pivot }18        return quickSort(array: less) + equal + quickSort(array: greater)19    }20}21class QuickSort {22    func quickSort(array: [Int]) -> [Int] {23        guard array.count > 1 else {24        }25        let less = array.filter { $0 < pivot }26        let equal = array.filter { $0 == pivot }27        let greater = array.filter { $0 > pivot }28        return quickSort(array: less) + equal + quickSort(array: greater)29    }30}31class QuickSort {32    func quickSort(array: [Int]) -> [Int] {33        guard array.count > 1 else {34        }35        let less = array.filter { $0 < pivot }36        let equal = array.filter { $0 == pivot }37        let greater = array.filter { $0 > pivot }38        return quickSort(array: less) + equal + quickSort(array: greater)39    }40}Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
