Skip to content

Commit

Permalink
Add modifier event handling tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Econa77 committed May 13, 2020
1 parent 4e2135c commit bf0ab75
Show file tree
Hide file tree
Showing 2 changed files with 131 additions and 0 deletions.
4 changes: 4 additions & 0 deletions Lib/Magnet.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
091D85EC245A917500930473 /* KeyExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091D85E8245A917500930473 /* KeyExtension.swift */; };
091D85ED245A917500930473 /* CollectionExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 091D85E9245A917500930473 /* CollectionExtension.swift */; };
092485A6246B9BEF00F4368A /* ModifierEventHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 092485A5246B9BEF00F4368A /* ModifierEventHandler.swift */; };
092485AC246BA86500F4368A /* ModifierEventHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 092485AB246BA86500F4368A /* ModifierEventHandlerTests.swift */; };
09DEE124245B128C00169BEC /* Sauce.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 091D85CF2459553A00930473 /* Sauce.framework */; };
FA3AA2162315A6A3007EAA1F /* CollectionExtensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA3AA2152315A6A3007EAA1F /* CollectionExtensionTests.swift */; };
FAEC34B31C9059DF004177E2 /* Magnet.h in Headers */ = {isa = PBXBuildFile; fileRef = FAEC34B21C9059DF004177E2 /* Magnet.h */; settings = {ATTRIBUTES = (Public, ); }; };
Expand Down Expand Up @@ -54,6 +55,7 @@
091D85E8245A917500930473 /* KeyExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = KeyExtension.swift; sourceTree = "<group>"; };
091D85E9245A917500930473 /* CollectionExtension.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CollectionExtension.swift; sourceTree = "<group>"; };
092485A5246B9BEF00F4368A /* ModifierEventHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModifierEventHandler.swift; sourceTree = "<group>"; };
092485AB246BA86500F4368A /* ModifierEventHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModifierEventHandlerTests.swift; sourceTree = "<group>"; };
FA3AA2152315A6A3007EAA1F /* CollectionExtensionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CollectionExtensionTests.swift; sourceTree = "<group>"; };
FAEC34AF1C9059DF004177E2 /* Magnet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Magnet.framework; sourceTree = BUILT_PRODUCTS_DIR; };
FAEC34B21C9059DF004177E2 /* Magnet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Magnet.h; sourceTree = "<group>"; };
Expand Down Expand Up @@ -151,6 +153,7 @@
children = (
FA3AA2152315A6A3007EAA1F /* CollectionExtensionTests.swift */,
090077D3245D449F0099B20A /* KeyComboTests.swift */,
092485AB246BA86500F4368A /* ModifierEventHandlerTests.swift */,
FAEC34C01C9059DF004177E2 /* Info.plist */,
);
path = MagnetTests;
Expand Down Expand Up @@ -306,6 +309,7 @@
buildActionMask = 2147483647;
files = (
090077D4245D449F0099B20A /* KeyComboTests.swift in Sources */,
092485AC246BA86500F4368A /* ModifierEventHandlerTests.swift in Sources */,
FA3AA2162315A6A3007EAA1F /* CollectionExtensionTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down
127 changes: 127 additions & 0 deletions Lib/MagnetTests/ModifierEventHandlerTests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
//
// ModifierEventHandlerTests.swift
//
// MagnetTests
// GitHub: https://github.com/clipy
// HP: https://clipy-app.com
//
// Copyright © 2015-2020 Clipy Project.
//

import XCTest
@testable import Magnet

final class ModifierEventHandlerTests: XCTestCase {

private let testTimeInterval = DispatchTimeInterval.milliseconds(100)
private let testQueue = DispatchQueue(label: "com.clipy-app.Magnet")

// MARK: - Tests
func testDoubleTapModifierEvent() {
let eventHandler = ModifierEventHandler(cleanQueue: testQueue)
let expectation = XCTestExpectation(description: "Shift double tapped")
eventHandler.doubleTapped = { tappedModifierFlags in
XCTAssertEqual(tappedModifierFlags, [.shift])
expectation.fulfill()
}
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 0)
eventHandler.handleModifiersEvent(with: [], timestamp: 1)
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 2)
wait(for: [expectation], timeout: 1)
}

func testFilterHandledTimestampModifierEvent() {
let eventHandler = ModifierEventHandler(cleanQueue: testQueue)
eventHandler.doubleTapped = { tappedModifierFlags in
XCTFail()
}
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 0)
eventHandler.handleModifiersEvent(with: [], timestamp: 0)
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 0)
}

func testFilerUnsupportModifierEvent() {
let eventHandler = ModifierEventHandler(cleanQueue: testQueue)
eventHandler.doubleTapped = { tappedModifierFlags in
XCTFail()
}
eventHandler.handleModifiersEvent(with: [.function], timestamp: 0)
eventHandler.handleModifiersEvent(with: [], timestamp: 1)
eventHandler.handleModifiersEvent(with: [.function], timestamp: 2)
}

func testMultiModifierEvent() {
let eventHandler = ModifierEventHandler(cleanQueue: testQueue)
let expectation = XCTestExpectation(description: "Shift double tapped")
var isFirstCalled = false
eventHandler.doubleTapped = { tappedModifierFlags in
if isFirstCalled {
XCTFail()
} else {
XCTAssertEqual(tappedModifierFlags, [.shift])
isFirstCalled = true
}
expectation.fulfill()
}
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 0)
eventHandler.handleModifiersEvent(with: [], timestamp: 1)
eventHandler.handleModifiersEvent(with: [.control], timestamp: 2)
eventHandler.handleModifiersEvent(with: [], timestamp: 3)
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 4)
eventHandler.handleModifiersEvent(with: [], timestamp: 5)
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 6)
wait(for: [expectation], timeout: 1)
}

func testSimultaneouslyPressMultiModifierEvent() {
let eventHandler = ModifierEventHandler(cleanQueue: testQueue)
let expectation = XCTestExpectation(description: "Shift double tapped")
var isFirstCalled = false
eventHandler.doubleTapped = { tappedModifierFlags in
if isFirstCalled {
XCTFail()
} else {
XCTAssertEqual(tappedModifierFlags, [.shift])
isFirstCalled = true
}
expectation.fulfill()
}
eventHandler.handleModifiersEvent(with: [.shift, .control], timestamp: 0)
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 1)
eventHandler.handleModifiersEvent(with: [], timestamp: 2)
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 3)
eventHandler.handleModifiersEvent(with: [], timestamp: 4)
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 5)
wait(for: [expectation], timeout: 1)
}

func testNoCleanModifierEvent() {
let eventHandler = ModifierEventHandler(cleanTimeInterval: testTimeInterval, cleanQueue: testQueue)
let expectation = XCTestExpectation(description: "Shift double tapped")
eventHandler.doubleTapped = { tappedModifierFlags in
XCTAssertEqual(tappedModifierFlags, [.shift])
expectation.fulfill()
}
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 0)
eventHandler.handleModifiersEvent(with: [], timestamp: 1)
testQueue.asyncAfter(deadline: .now() + testTimeInterval - .milliseconds(1)) {
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 2)
}
wait(for: [expectation], timeout: 1)
}

func testCleanModifierEvent() {
let eventHandler = ModifierEventHandler(cleanTimeInterval: testTimeInterval, cleanQueue: testQueue)
let expectation = XCTestExpectation(description: "Shift double tapped")
eventHandler.doubleTapped = { tappedModifierFlags in
XCTFail()
}
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 0)
eventHandler.handleModifiersEvent(with: [], timestamp: 1)
testQueue.asyncAfter(deadline: .now() + testTimeInterval + .milliseconds(1)) {
eventHandler.handleModifiersEvent(with: [.shift], timestamp: 2)
expectation.fulfill()
}
wait(for: [expectation], timeout: 1)
}
}

0 comments on commit bf0ab75

Please sign in to comment.