Update the test case which fix the compatible on macOS 10.14's simulator
This commit is contained in:
parent
f193c612b1
commit
7ae9429dc5
|
@ -1,6 +1,6 @@
|
||||||
# SDWebImageSwiftUI
|
# SDWebImageSwiftUI
|
||||||
|
|
||||||
[](https://travis-ci.com/SDWebImage/SDWebImageSwiftUI)
|
[](https://travis-ci.org/SDWebImage/SDWebImageSwiftUI)
|
||||||
[](https://cocoapods.org/pods/SDWebImageSwiftUI)
|
[](https://cocoapods.org/pods/SDWebImageSwiftUI)
|
||||||
[](https://cocoapods.org/pods/SDWebImageSwiftUI)
|
[](https://cocoapods.org/pods/SDWebImageSwiftUI)
|
||||||
[](https://cocoapods.org/pods/SDWebImageSwiftUI)
|
[](https://cocoapods.org/pods/SDWebImageSwiftUI)
|
||||||
|
|
|
@ -94,10 +94,9 @@ class AnimatedImageTests: XCTestCase {
|
||||||
|
|
||||||
func testAnimatedImageBinding() throws {
|
func testAnimatedImageBinding() throws {
|
||||||
let expectation = self.expectation(description: "AnimatedImage binding control")
|
let expectation = self.expectation(description: "AnimatedImage binding control")
|
||||||
var viewUpdateCount = 0
|
var isStopped = false
|
||||||
// Use wrapper to make the @Binding works
|
// Use wrapper to make the @Binding works
|
||||||
let wrapperView = AnimatedImage.WrapperView(name: "TestLoopCount.gif", bundle: TestUtils.testImageBundle(), isAnimating: true) { wrapperView, view, context in
|
let wrapperView = AnimatedImage.WrapperView(name: "TestLoopCount.gif", bundle: TestUtils.testImageBundle(), isAnimating: true) { wrapperView, view, context in
|
||||||
viewUpdateCount += 1
|
|
||||||
guard let animatedImageView = view as? SDAnimatedImageView else {
|
guard let animatedImageView = view as? SDAnimatedImageView else {
|
||||||
XCTFail("AnimatedImage's view should be SDAnimatedImageView")
|
XCTFail("AnimatedImage's view should be SDAnimatedImageView")
|
||||||
return
|
return
|
||||||
|
@ -108,33 +107,32 @@ class AnimatedImageTests: XCTestCase {
|
||||||
} else {
|
} else {
|
||||||
XCTFail("AnimatedImage's image should be SDAnimatedImage")
|
XCTFail("AnimatedImage's image should be SDAnimatedImage")
|
||||||
}
|
}
|
||||||
// View update times before stable from SwiftUI, different behavior for AppKit/UIKit
|
// Wait 1 second for SwiftUI's own `updateUIView` callback finished.
|
||||||
#if os(macOS)
|
// It's suck that the actual callback behavior is different on different iOS version or Simulator version, so I can assume which is the last callback using the callback count.
|
||||||
let stableViewUpdateCount = 1
|
if !isStopped {
|
||||||
#else
|
// # SwiftUI's own updateUIView call
|
||||||
let stableViewUpdateCount = 2
|
|
||||||
#endif
|
|
||||||
switch viewUpdateCount {
|
|
||||||
case stableViewUpdateCount:
|
|
||||||
// #1 SwiftUI's own updateUIView call
|
|
||||||
#if os(iOS) || os(tvOS)
|
#if os(iOS) || os(tvOS)
|
||||||
XCTAssertTrue(animatedImageView.isAnimating)
|
XCTAssertTrue(animatedImageView.isAnimating)
|
||||||
#else
|
#else
|
||||||
XCTAssertTrue(animatedImageView.animates)
|
XCTAssertTrue(animatedImageView.animates)
|
||||||
#endif
|
#endif
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
|
||||||
|
if !isStopped {
|
||||||
|
isStopped = true
|
||||||
wrapperView.isAnimating = false
|
wrapperView.isAnimating = false
|
||||||
|
} else {
|
||||||
|
// Extra `updateUIView` from SwiftUI, ignore
|
||||||
|
// During my test, iOS 13.3 (on macOS 10.15 simulator) called 2 times, iOS 13.0.0 (on macOS 10.15 simulator) called 1 time. iOS 13.3.3 (on macOS 10.14 simulator) called 2 times. Unregulated at all. Thanks Apple :)
|
||||||
}
|
}
|
||||||
case stableViewUpdateCount + 1:
|
}
|
||||||
// #3 AnimatedImage's isAnimating @Binding trigger update (from above)
|
} else {
|
||||||
|
// # AnimatedImage's isAnimating @Binding trigger update (from above)
|
||||||
#if os(iOS) || os(tvOS)
|
#if os(iOS) || os(tvOS)
|
||||||
XCTAssertFalse(animatedImageView.isAnimating)
|
XCTAssertFalse(animatedImageView.isAnimating)
|
||||||
#else
|
#else
|
||||||
XCTAssertFalse(animatedImageView.animates)
|
XCTAssertFalse(animatedImageView.animates)
|
||||||
#endif
|
#endif
|
||||||
expectation.fulfill()
|
expectation.fulfill()
|
||||||
default: break
|
|
||||||
// do not care
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ViewHosting.host(view: wrapperView)
|
ViewHosting.host(view: wrapperView)
|
||||||
|
|
Loading…
Reference in New Issue