summaryrefslogtreecommitdiff
path: root/platform/platform-tests/testSrc/com/intellij/openapi/keymap/impl/ModifierKeyDoubleClickHandlerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/platform-tests/testSrc/com/intellij/openapi/keymap/impl/ModifierKeyDoubleClickHandlerTest.java')
-rw-r--r--platform/platform-tests/testSrc/com/intellij/openapi/keymap/impl/ModifierKeyDoubleClickHandlerTest.java169
1 files changed, 169 insertions, 0 deletions
diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/keymap/impl/ModifierKeyDoubleClickHandlerTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/keymap/impl/ModifierKeyDoubleClickHandlerTest.java
new file mode 100644
index 000000000000..490aa294974d
--- /dev/null
+++ b/platform/platform-tests/testSrc/com/intellij/openapi/keymap/impl/ModifierKeyDoubleClickHandlerTest.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright 2000-2014 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.openapi.keymap.impl;
+
+import com.intellij.ide.IdeEventQueue;
+import com.intellij.openapi.actionSystem.ActionManager;
+import com.intellij.openapi.actionSystem.AnAction;
+import com.intellij.openapi.actionSystem.AnActionEvent;
+import com.intellij.openapi.actionSystem.KeyboardShortcut;
+import com.intellij.openapi.keymap.KeymapManager;
+import com.intellij.openapi.util.Clock;
+import com.intellij.testFramework.LightPlatformTestCase;
+
+import javax.swing.*;
+import java.awt.event.InputEvent;
+import java.awt.event.KeyEvent;
+
+public class ModifierKeyDoubleClickHandlerTest extends LightPlatformTestCase {
+ private static final String MY_SHIFT_SHIFT_ACTION = "ModifierKeyDoubleClickHandlerTest.action1";
+ private static final String MY_SHIFT_KEY_ACTION = "ModifierKeyDoubleClickHandlerTest.action2";
+ private static final String MY_SHIFT_SHIFT_KEY_ACTION = "ModifierKeyDoubleClickHandlerTest.action3";
+
+ public static final KeyboardShortcut SHIFT_KEY_SHORTCUT = new KeyboardShortcut(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE,
+ InputEvent.SHIFT_MASK),
+ null);
+
+ private final JComponent myComponent = new JPanel();
+
+ private long myCurrentTime;
+ private int myShiftShiftActionInvocationCount;
+ private int myShiftKeyActionInvocationCount;
+ private int myShiftShiftKeyActionInvocationCount;
+
+ @Override
+ public void setUp() throws Exception {
+ super.setUp();
+ Clock.setTime(0);
+ ActionManager.getInstance().registerAction(MY_SHIFT_SHIFT_ACTION, new AnAction() {
+ @Override
+ public void actionPerformed(AnActionEvent e) {
+ myShiftShiftActionInvocationCount++;
+ }
+ });
+ ActionManager.getInstance().registerAction(MY_SHIFT_KEY_ACTION, new AnAction() {
+ @Override
+ public void actionPerformed(AnActionEvent e) {
+ myShiftKeyActionInvocationCount++;
+ }
+ });
+ ActionManager.getInstance().registerAction(MY_SHIFT_SHIFT_KEY_ACTION, new AnAction() {
+ @Override
+ public void actionPerformed(AnActionEvent e) {
+ myShiftShiftKeyActionInvocationCount++;
+ }
+ });
+ KeymapManager.getInstance().getActiveKeymap().addShortcut(MY_SHIFT_KEY_ACTION, SHIFT_KEY_SHORTCUT);
+ ModifierKeyDoubleClickHandler.getInstance().registerAction(MY_SHIFT_SHIFT_ACTION, KeyEvent.VK_SHIFT, -1);
+ ModifierKeyDoubleClickHandler.getInstance().registerAction(MY_SHIFT_SHIFT_KEY_ACTION, KeyEvent.VK_SHIFT, KeyEvent.VK_BACK_SPACE);
+ }
+
+ @Override
+ public void tearDown() throws Exception {
+ ModifierKeyDoubleClickHandler.getInstance().unregisterAction(MY_SHIFT_SHIFT_KEY_ACTION);
+ ModifierKeyDoubleClickHandler.getInstance().unregisterAction(MY_SHIFT_SHIFT_ACTION);
+ KeymapManager.getInstance().getActiveKeymap().removeShortcut(MY_SHIFT_KEY_ACTION, SHIFT_KEY_SHORTCUT);
+ ActionManager.getInstance().unregisterAction(MY_SHIFT_SHIFT_KEY_ACTION);
+ ActionManager.getInstance().unregisterAction(MY_SHIFT_KEY_ACTION);
+ ActionManager.getInstance().unregisterAction(MY_SHIFT_SHIFT_ACTION);
+ Clock.reset();
+ super.tearDown();
+ }
+
+ public void testShiftShiftSuccessfulCase() {
+ press();
+ release();
+ press();
+ assertInvocationCounts(0, 0, 0);
+ release();
+ assertInvocationCounts(0, 1, 0);
+ }
+
+ public void testLongSecondClick() {
+ press();
+ release();
+ press();
+ timeStep(400);
+ release();
+ assertInvocationCounts(0, 0, 0);
+ }
+
+ public void testShiftShiftKeySuccessfulCase() {
+ press();
+ release();
+ press();
+ key();
+ assertInvocationCounts(0, 0, 1);
+ release();
+ assertInvocationCounts(0, 0, 1);
+ }
+
+ public void testShiftKey() {
+ press();
+ key();
+ assertInvocationCounts(1, 0, 0);
+ release();
+ }
+
+ public void assertInvocationCounts(int shiftKeyCount, int shiftShiftCount, int shiftShiftKeyCount) {
+ assertEquals(shiftKeyCount, myShiftKeyActionInvocationCount);
+ assertEquals(shiftShiftCount, myShiftShiftActionInvocationCount);
+ assertEquals(shiftShiftKeyCount, myShiftShiftKeyActionInvocationCount);
+ }
+
+ private void press() {
+ IdeEventQueue.getInstance().dispatchEvent(new KeyEvent(myComponent,
+ KeyEvent.KEY_PRESSED,
+ Clock.getTime(),
+ InputEvent.SHIFT_MASK,
+ KeyEvent.VK_SHIFT,
+ KeyEvent.CHAR_UNDEFINED));
+ }
+
+ private void release() {
+ IdeEventQueue.getInstance().dispatchEvent(new KeyEvent(myComponent,
+ KeyEvent.KEY_RELEASED,
+ Clock.getTime(),
+ 0,
+ KeyEvent.VK_SHIFT,
+ KeyEvent.CHAR_UNDEFINED));
+ }
+
+ private void key() {
+ IdeEventQueue.getInstance().dispatchEvent(new KeyEvent(myComponent,
+ KeyEvent.KEY_PRESSED,
+ Clock.getTime(),
+ InputEvent.SHIFT_MASK,
+ KeyEvent.VK_BACK_SPACE,
+ '\b'));
+ IdeEventQueue.getInstance().dispatchEvent(new KeyEvent(myComponent,
+ KeyEvent.KEY_TYPED,
+ Clock.getTime(),
+ InputEvent.SHIFT_MASK,
+ 0,
+ '\b'));
+ IdeEventQueue.getInstance().dispatchEvent(new KeyEvent(myComponent,
+ KeyEvent.KEY_RELEASED,
+ Clock.getTime(),
+ InputEvent.SHIFT_MASK,
+ KeyEvent.VK_BACK_SPACE,
+ '\b'));
+ }
+
+ private void timeStep(long step) {
+ Clock.setTime(myCurrentTime += step);
+ }
+}