Skip to content

Commit

Permalink
Create PanGestureOverlayTranslationDriverTests
Browse files Browse the repository at this point in the history
  • Loading branch information
gaetanzanella committed Apr 21, 2021
1 parent 80ab88d commit d50800c
Show file tree
Hide file tree
Showing 5 changed files with 147 additions and 38 deletions.
8 changes: 8 additions & 0 deletions OverlayContainer.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@
E79AE411262F095000BFFBF3 /* RushingForwardTargetNotchPolicyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79AE40B262F094600BFFBF3 /* RushingForwardTargetNotchPolicyTests.swift */; };
E79AE41A262F12E800BFFBF3 /* ScrollViewOverlayTranslationDriverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79AE414262F12DF00BFFBF3 /* ScrollViewOverlayTranslationDriverTests.swift */; };
E79AE426262F40A800BFFBF3 /* ScrollViewEmulator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79AE41E262F40A000BFFBF3 /* ScrollViewEmulator.swift */; };
E79AE42F2630282800BFFBF3 /* PanGestureOverlayTranslationDriverTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79AE4292630282400BFFBF3 /* PanGestureOverlayTranslationDriverTests.swift */; };
E79AE438263029AE00BFFBF3 /* FakeOverlayTranslationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E79AE4322630286F00BFFBF3 /* FakeOverlayTranslationController.swift */; };
E79D75E126035ED900C942F7 /* Quick.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E79D75DF26035ED900C942F7 /* Quick.xcframework */; };
E79D75E226035ED900C942F7 /* Nimble.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = E79D75E026035ED900C942F7 /* Nimble.xcframework */; };
E7A6A3AC24460D1A00E51F7A /* OverlayContainerSheetDismissalPolicyTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7A6A3AA24460B5E00E51F7A /* OverlayContainerSheetDismissalPolicyTest.swift */; };
Expand Down Expand Up @@ -123,6 +125,8 @@
E79AE40B262F094600BFFBF3 /* RushingForwardTargetNotchPolicyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RushingForwardTargetNotchPolicyTests.swift; sourceTree = "<group>"; };
E79AE414262F12DF00BFFBF3 /* ScrollViewOverlayTranslationDriverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollViewOverlayTranslationDriverTests.swift; sourceTree = "<group>"; };
E79AE41E262F40A000BFFBF3 /* ScrollViewEmulator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollViewEmulator.swift; sourceTree = "<group>"; };
E79AE4292630282400BFFBF3 /* PanGestureOverlayTranslationDriverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PanGestureOverlayTranslationDriverTests.swift; sourceTree = "<group>"; };
E79AE4322630286F00BFFBF3 /* FakeOverlayTranslationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeOverlayTranslationController.swift; sourceTree = "<group>"; };
E79D75DF26035ED900C942F7 /* Quick.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Quick.xcframework; path = Carthage/Build/Quick.xcframework; sourceTree = "<group>"; };
E79D75E026035ED900C942F7 /* Nimble.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Nimble.xcframework; path = Carthage/Build/Nimble.xcframework; sourceTree = "<group>"; };
E7A6A3AA24460B5E00E51F7A /* OverlayContainerSheetDismissalPolicyTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverlayContainerSheetDismissalPolicyTest.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -278,6 +282,7 @@
E7A6A3AA24460B5E00E51F7A /* OverlayContainerSheetDismissalPolicyTest.swift */,
E79AE40B262F094600BFFBF3 /* RushingForwardTargetNotchPolicyTests.swift */,
E79AE414262F12DF00BFFBF3 /* ScrollViewOverlayTranslationDriverTests.swift */,
E79AE4292630282400BFFBF3 /* PanGestureOverlayTranslationDriverTests.swift */,
E78485C52201E66500DE64C3 /* Info.plist */,
);
path = Tests;
Expand All @@ -287,6 +292,7 @@
isa = PBXGroup;
children = (
E79AE41E262F40A000BFFBF3 /* ScrollViewEmulator.swift */,
E79AE4322630286F00BFFBF3 /* FakeOverlayTranslationController.swift */,
);
path = Utils;
sourceTree = "<group>";
Expand Down Expand Up @@ -466,6 +472,8 @@
E79AE426262F40A800BFFBF3 /* ScrollViewEmulator.swift in Sources */,
E78486532201EA9400DE64C3 /* OverlayInsertionTest.swift in Sources */,
E79AE41A262F12E800BFFBF3 /* ScrollViewOverlayTranslationDriverTests.swift in Sources */,
E79AE42F2630282800BFFBF3 /* PanGestureOverlayTranslationDriverTests.swift in Sources */,
E79AE438263029AE00BFFBF3 /* FakeOverlayTranslationController.swift in Sources */,
E78486542201EA9400DE64C3 /* OverlayNotchHeightTest.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,10 @@ class PanGestureOverlayTranslationDriver: NSObject,
}
case .changed:
controller.dragOverlay(withOffset: translation.y, usesFunction: true)
case .failed, .ended:
case .failed, .ended, .cancelled:
let velocity = sender.velocity(in: nil)
controller.endOverlayTranslation(withVelocity: velocity)
case .cancelled, .possible:
case .possible:
break
@unknown default:
break
Expand Down
90 changes: 90 additions & 0 deletions Tests/PanGestureOverlayTranslationDriverTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
//
// PanGestureOverlayTranslationDriverTests.swift
// OverlayContainer
//
// Created by Gaétan Zanella on 21/04/2021.
// Copyright © 2021 Gaétan Zanella. All rights reserved.
//

import Quick
import Nimble
@testable import OverlayContainer

class FakeOverlayTranslationGestureRecognizer: OverlayTranslationGestureRecognizer {

var isCancelled = false

var mutableView: UIView?

var translation: CGPoint = .zero

override var view: UIView? {
mutableView
}

override func translation(in view: UIView?) -> CGPoint {
translation
}

func changeState(_ state: State) {
self.state = state
(target as! NSObject).perform(action, with: self)
}

private var target: Any!
private var action: Selector!

override func addTarget(_ target: Any, action: Selector) {
self.target = target
self.action = action
}

override func cancel() {
isCancelled = true
}
}

class PanGestureOverlayTranslationDriverTests: QuickSpec {

override func spec() {

var controller: FakeOverlayTranslationController!
var gesture: FakeOverlayTranslationGestureRecognizer!
var driver: PanGestureOverlayTranslationDriver!

beforeEach {
controller = FakeOverlayTranslationController()
gesture = FakeOverlayTranslationGestureRecognizer()
driver = PanGestureOverlayTranslationDriver(
translationController: controller,
panGestureRecognizer: gesture
)
let view = UIView()
gesture.mutableView = view
}

it("should not drag not draggable content") {
controller.isDraggable = false
XCTAssertFalse(driver.gestureRecognizerShouldBegin(gesture))
}

it("should drag draggable content") {
controller.isDraggable = true
XCTAssertTrue(driver.gestureRecognizerShouldBegin(gesture))
}

it("should drag overlay according to the translation") {
XCTAssertFalse(controller.isInTranslation)
gesture.changeState(.began)
XCTAssertTrue(controller.isInTranslation)
gesture.translation.y = -100
gesture.changeState(.changed)
XCTAssertEqual(controller.translationHeight, 100)
gesture.translation.y = -90
gesture.changeState(.changed)
XCTAssertEqual(controller.translationHeight, 90)
gesture.changeState(.ended)
XCTAssertFalse(controller.isInTranslation)
}
}
}
36 changes: 0 additions & 36 deletions Tests/ScrollViewOverlayTranslationDriverTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -156,39 +156,3 @@ class ScrollViewOverlayTranslationDriverTests: QuickSpec {
}
}

private class FakeOverlayTranslationController: OverlayTranslationController {

var lastTranslationEndNotchIndex: Int = 0

private var initialTranslationHeight: CGFloat = 0.0
var translationHeight: CGFloat = 0.0

var translationPosition: OverlayTranslationPosition = .bottom

var isDraggable = true

private(set) var isInTranslation = false

var hasReachedANotch = false

func isDraggable(at point: CGPoint, in coordinateSpace: UICoordinateSpace) -> Bool {
isDraggable
}

func overlayHasReachedANotch() -> Bool {
hasReachedANotch
}

func startOverlayTranslation() {
initialTranslationHeight = translationHeight
isInTranslation = true
}

func dragOverlay(withOffset offset: CGFloat, usesFunction: Bool) {
translationHeight = initialTranslationHeight - offset
}

func endOverlayTranslation(withVelocity velocity: CGPoint) {
isInTranslation = false
}
}
47 changes: 47 additions & 0 deletions Tests/Utils/FakeOverlayTranslationController.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
//
// FakeOverlayTranslationController.swift
// OverlayContainer_Tests
//
// Created by Gaétan Zanella on 21/04/2021.
// Copyright © 2021 Gaétan Zanella. All rights reserved.
//

import Foundation
@testable import OverlayContainer

class FakeOverlayTranslationController: OverlayTranslationController {

var lastTranslationEndNotchIndex: Int = 0

private var initialTranslationHeight: CGFloat = 0.0
var translationHeight: CGFloat = 0.0

var translationPosition: OverlayTranslationPosition = .bottom

var isDraggable = true

private(set) var isInTranslation = false

var hasReachedANotch = false

func isDraggable(at point: CGPoint, in coordinateSpace: UICoordinateSpace) -> Bool {
isDraggable
}

func overlayHasReachedANotch() -> Bool {
hasReachedANotch
}

func startOverlayTranslation() {
initialTranslationHeight = translationHeight
isInTranslation = true
}

func dragOverlay(withOffset offset: CGFloat, usesFunction: Bool) {
translationHeight = initialTranslationHeight - offset
}

func endOverlayTranslation(withVelocity velocity: CGPoint) {
isInTranslation = false
}
}

0 comments on commit d50800c

Please sign in to comment.