@@ -73,22 +73,22 @@ final class EmojiStatusMenuTests: XCTestCase {
7373 func testDuplicateClicksSharePendingRequest ( ) { let c = Context ( ) ; let r = Row ( c ) ; let menu = r . menu ( ) ! ; menu . handler ( ) ; menu . handler ( ) ; XCTAssertEqual ( c . engine . accountData . requests . count , 1 ) }
7474 func testNewChoiceAfterCompletion ( ) { let c = Context ( ) ; let r = Row ( c ) ; let menu = r . menu ( ) ! ; menu . handler ( ) ; c . engine . accountData . requests [ 0 ] . accept ( ) ; menu . handler ( ) ; XCTAssertEqual ( c . engine . accountData . requests . count , 2 ) ; c . engine . accountData . requests [ 1 ] . accept ( ) ; XCTAssertEqual ( c . window . messages , [ " Success " , " Success " ] ) }
7575 func testOldDisposalCannotClearNewRequest ( ) { let c = Context ( ) ; let r = Row ( c ) ; let menu = r . menu ( ) ! ; menu . handler ( ) ; c . engine . accountData . requests [ 0 ] . accept ( ) ; menu . handler ( ) ; Queue . main . drain ( ) ; menu . handler ( ) ; XCTAssertEqual ( c . engine . accountData . requests . count , 2 ) }
76- func testProgressCancellationIsSilentAndRetryable ( ) { let c = Context ( ) ; let r = Row ( c ) ; let menu = r . menu ( ) ! ; menu . handler ( ) ; XCTAssertEqual ( Progress . pending . count , 1 ) ; Progress . pending . first ? . dispose ( ) ; Queue . main . drain ( ) ; menu . handler ( ) ; XCTAssertEqual ( c . engine . accountData . requests . count , 2 ) ; XCTAssertTrue ( c . engine . accountData . requests [ 0 ] . disposed ) ; XCTAssertTrue ( c . window . messages . isEmpty ) }
76+ func testProgressCancellationIsSilentAndRetryable ( ) { let c = Context ( ) ; let r = Row ( c ) ; let menu = r . menu ( ) ! ; menu . handler ( ) ; XCTAssertEqual ( Progress . pending . count , 1 ) ; Progress . pending . first ? . dispose ( ) ; Queue . main . drain ( ) ; menu . handler ( ) ; XCTAssertEqual ( c . engine . accountData . requests . count , 2 ) ; XCTAssertFalse ( c . engine . accountData . requests [ 0 ] . disposed ) ; XCTAssertTrue ( c . window . messages . isEmpty ) }
7777 func testLateSuccessAfterCancellationIsIgnored ( ) { let c = Context ( ) ; let r = Row ( c ) ; r . menu ( ) ! . handler ( ) ; Progress . pending . first ? . dispose ( ) ; Queue . main . drain ( ) ; c . engine . accountData . requests [ 0 ] . accept ( ) ; XCTAssertTrue ( c . window . messages . isEmpty ) }
78- func testRowReleaseCancelsRequest ( ) { let c = Context ( ) ; var r : Row ? = Row ( c ) ; weak var weakRow = r ; r ! . menu ( ) ! . handler ( ) ; r = nil ; XCTAssertNil ( weakRow ) ; XCTAssertTrue ( c . engine . accountData . requests [ 0 ] . disposed ) ; c . engine . accountData . requests [ 0 ] . accept ( ) ; XCTAssertTrue ( c . window . messages . isEmpty ) }
78+ func testRowReleaseKeepsRequest ( ) { let c = Context ( ) ; var r : Row ? = Row ( c ) ; weak var weakRow = r ; r ! . menu ( ) ! . handler ( ) ; r = nil ; XCTAssertNil ( weakRow ) ; XCTAssertFalse ( c . engine . accountData . requests [ 0 ] . disposed ) ; c . engine . accountData . requests [ 0 ] . accept ( ) ; XCTAssertTrue ( c . window . messages . isEmpty ) }
7979 func testRetainedMenuDoesNotKeepRowOrContextAlive ( ) { var c : Context ? = Context ( ) ; var r : Row ? = Row ( c ! ) ; weak var weakContext = c ; weak var weakRow = r ; let menu = r ! . menu ( ) ! ; r = nil ; c = nil ; XCTAssertNil ( weakRow ) ; XCTAssertNil ( weakContext ) ; menu . handler ( ) }
80- func testPendingRequestDoesNotKeepContextAlive ( ) { var c : Context ? = Context ( ) ; var r : Row ? = Row ( c ! ) ; let engine = c ! . engine ; weak var weakContext = c ; r ! . menu ( ) ! . handler ( ) ; r = nil ; c = nil ; XCTAssertNil ( weakContext ) ; XCTAssertTrue ( engine . accountData . requests [ 0 ] . disposed ) }
80+ func testPendingRequestDoesNotKeepContextAlive ( ) { var c : Context ? = Context ( ) ; var r : Row ? = Row ( c ! ) ; let engine = c ! . engine ; weak var weakContext = c ; r ! . menu ( ) ! . handler ( ) ; r = nil ; c = nil ; XCTAssertNil ( weakContext ) ; XCTAssertFalse ( engine . accountData . requests [ 0 ] . disposed ) }
8181 func testWindowReplacementSuppressesFeedback ( ) { let c = Context ( ) ; let r = Row ( c ) ; let old = c . window ; r . menu ( ) ! . handler ( ) ; c . window = Window ( ) ; c . engine . accountData . requests [ 0 ] . accept ( ) ; XCTAssertTrue ( old . messages . isEmpty ) ; XCTAssertTrue ( c . window . messages . isEmpty ) }
8282 func testPremiumIsCheckedAtInvocation ( ) { let c = Context ( ) ; let r = Row ( c ) ; let menu = r . menu ( ) ! ; c . isPremium = false ; menu . handler ( ) ; XCTAssertTrue ( c . engine . accountData . requests . isEmpty ) }
8383 func testNonPremiumHasNoMenuAction ( ) { let c = Context ( ) ; c . isPremium = false ; XCTAssertNil ( Row ( c ) . menu ( ) ) }
84- func testOnlyPanelOffersAction ( ) { let r = Row ( Context ( ) ) ; for mode in [ Row . Mode . preview , . statuses ] { r . mode = mode ; XCTAssertNil ( r . menu ( ) ) } }
84+ func testPanelAndPreviewOfferAction ( ) { let r = Row ( Context ( ) ) ; for mode in [ Row . Mode . panel , . preview ] { r . mode = mode ; XCTAssertNotNil ( r . menu ( ) ) } ; r . mode = . statuses ; XCTAssertNil ( r . menu ( ) ) }
8585 func testBuiltinEmojiHasNoStatusAction ( ) { let r = Row ( Context ( ) ) ; ( r . view as! EmojiesSectionRowView ) . itemUnderMouse = ( . init ( file : TelegramMediaFile ( custom : false ) ) , 0 ) ; XCTAssertNil ( r . menu ( ) ) }
8686 func testFileRevalidatedAtInvocation ( ) { let c = Context ( ) ; let r = Row ( c ) ; let file = ( r . view as! EmojiesSectionRowView ) . itemUnderMouse ! . 0 . file ; let menu = r . menu ( ) ! ; file . isCustomEmoji = false ; menu . handler ( ) ; XCTAssertTrue ( c . engine . accountData . requests . isEmpty ) }
8787 func testExactFileAndIndefiniteExpiration ( ) { let c = Context ( ) ; let r = Row ( c ) ; r . menu ( ) ! . handler ( ) ; XCTAssertEqual ( c . engine . accountData . requests [ 0 ] . file ? . id , 10 ) ; XCTAssertNil ( c . engine . accountData . requests [ 0 ] . expiry ) }
8888 func testSynchronousSuccessAllowsNextChoice ( ) { let c = Context ( ) ; let r = Row ( c ) ; c . engine . accountData . onSubscribe = { $0 . accept ( ) } ; let menu = r . menu ( ) ! ; menu . handler ( ) ; menu . handler ( ) ; XCTAssertEqual ( c . window . messages , [ " Success " , " Success " ] ) ; XCTAssertTrue ( c . engine . accountData . requests . allSatisfy { $0 . disposed } ) }
8989 func testDuplicateTerminalEventsDoNotRepeatToast ( ) { let c = Context ( ) ; let r = Row ( c ) ; r . menu ( ) ! . handler ( ) ; let q = c . engine . accountData . requests [ 0 ] ; q . accept ( ) ; q . accept ( ) ; q . reject ( ) ; XCTAssertEqual ( c . window . messages , [ " Success " ] ) }
90- func testResetDuringDisposalSuppressesFeedback ( ) { let c = Context ( ) ; let a = EmojiStatusMenuAction ( ) ; a . perform ( context : c , file : TelegramMediaFile ( ) , window : c . window , canPresent : { true } ) ; c . engine . accountData . requests [ 0 ] . onDispose = { a . reset ( ) } ; c . engine . accountData . requests [ 0 ] . accept ( ) ; XCTAssertTrue ( c . window . messages . isEmpty ) }
90+ func testCompletedRequestIsReleased ( ) { let c = Context ( ) ; let a = EmojiStatusMenuAction ( ) ; a . perform ( context : c , file : TelegramMediaFile ( ) , window : c . window , canPresent : { true } ) ; c . engine . accountData . requests [ 0 ] . accept ( ) ; XCTAssertTrue ( c . engine . accountData . requests [ 0 ] . disposed ) ; XCTAssertEqual ( c . window . messages , [ " Success " ] ) }
9191 func testResetDuringPresentationCheckSuppressesFeedback ( ) { let c = Context ( ) ; let a = EmojiStatusMenuAction ( ) ; var checks = 0 ; a . perform ( context : c , file : TelegramMediaFile ( ) , window : c . window , canPresent : { checks += 1 ; if checks > 1 { a . reset ( ) } ; return true } ) ; c . engine . accountData . requests [ 0 ] . accept ( ) ; XCTAssertTrue ( c . window . messages . isEmpty ) }
92- func testReentrantNewRequestSurvivesOldCompletion ( ) { let c = Context ( ) ; let a = EmojiStatusMenuAction ( ) ; a . perform ( context : c , file : TelegramMediaFile ( ) , window : c . window , canPresent : { true } ) ; c . engine . accountData . requests [ 0 ] . onDispose = { a . reset ( ) ; a . perform ( context : c , file : TelegramMediaFile ( 20 ) , window : c . window , canPresent : { true } ) } ; c . engine . accountData . requests [ 0 ] . accept ( ) ; Queue . main . drain ( ) ; XCTAssertEqual ( c . engine . accountData . requests . count , 2 ) ; XCTAssertFalse ( c . engine . accountData . requests [ 1 ] . disposed ) ; XCTAssertTrue ( c . window . messages . isEmpty ) ; c . engine . accountData . requests [ 1 ] . accept ( ) ; XCTAssertEqual ( c . window . messages , [ " Success " ] ) }
92+ func testReentrantNewRequestSurvivesOldCompletion ( ) { let c = Context ( ) ; let a = EmojiStatusMenuAction ( ) ; var checks = 0 ; a . perform ( context : c , file : TelegramMediaFile ( ) , window : c . window , canPresent : { checks += 1 ; if checks == 2 { a . reset ( ) ; a . perform ( context : c , file : TelegramMediaFile ( 20 ) , window : c . window , canPresent : { true } ) } ; return true } ) ; c . engine . accountData . requests [ 0 ] . accept ( ) ; Queue . main . drain ( ) ; XCTAssertEqual ( c . engine . accountData . requests . count , 2 ) ; XCTAssertFalse ( c . engine . accountData . requests [ 1 ] . disposed ) ; XCTAssertTrue ( c . window . messages . isEmpty ) ; c . engine . accountData . requests [ 1 ] . accept ( ) ; XCTAssertEqual ( c . window . messages , [ " Success " ] ) }
9393 func testUnavailablePresentationDoesNotStart ( ) { let c = Context ( ) ; let a = EmojiStatusMenuAction ( ) ; a . perform ( context : c , file : TelegramMediaFile ( ) , window : c . window , canPresent : { false } ) ; XCTAssertTrue ( c . engine . accountData . requests . isEmpty ) }
9494}
0 commit comments