/*
@test %I% %E%
@bug 6315717
@summary verifies that modifiers are correct for standard (1, 2, 3, wheel) mouse buttons
@author Andrei Dmitriev : area=awt.mouse
@run main MouseModifiersUnitTest_Standard
*/
//the test verifies:
// 1) verifies that modifiers are correct for standard (1, 2, 3) mouse buttons
// TODO: 2) verifies that modifiers are correct for wheel
// TODO: 3)
// Case1. the test posts BUTTONx_MASK and verifies that paramString() contains correct modifiers and exModifiers
// Case2. the test posts BUTTONx_DOWN_MASK and verifies that paramString() contains correct modifiers and exModifiers
// Case3. the test posts getMaskForButton(n) and verifies that paramString() contains correct modifiers and exModifiers
// repeat all cases with SHIFT/ALT/CTRL modifiers verify that paramString() contains correct modifiers and exModifiers
// I'm verifying button, modifiers and extModifiers for now.
public class MouseModifiersUnitTest_Standard {
// static String testModifier = "NONE";
static Frame f;
final static int [] mouseButtons = new int [] {MouseEvent.BUTTON1_MASK, MouseEvent.BUTTON2_MASK, MouseEvent.BUTTON3_MASK};
// BUTTON1, 2, 3 press-release.
final static int [] modifiersStandardTestNONE = new int[] {MouseEvent.BUTTON1_MASK, MouseEvent.BUTTON1_MASK, MouseEvent.BUTTON1_MASK,
// BUTTON1, 2, 3 press-release with shift modifier
final static int [] modifiersStandardTestSHIFT = new int[] {MouseEvent.BUTTON1_MASK|InputEvent.SHIFT_MASK, MouseEvent.BUTTON1_MASK|InputEvent.SHIFT_MASK, MouseEvent.BUTTON1_MASK|InputEvent.SHIFT_MASK,
MouseEvent.BUTTON2_MASK|InputEvent.SHIFT_MASK, MouseEvent.BUTTON2_MASK|InputEvent.SHIFT_MASK, MouseEvent.BUTTON2_MASK|InputEvent.SHIFT_MASK,
MouseEvent.BUTTON3_MASK|InputEvent.SHIFT_MASK, MouseEvent.BUTTON3_MASK|InputEvent.SHIFT_MASK, MouseEvent.BUTTON3_MASK|InputEvent.SHIFT_MASK };
final static int [] modifiersExStandardTestSHIFT = new int[] {MouseEvent.BUTTON1_DOWN_MASK|InputEvent.SHIFT_DOWN_MASK, InputEvent.SHIFT_DOWN_MASK, InputEvent.SHIFT_DOWN_MASK,
MouseEvent.BUTTON2_DOWN_MASK|InputEvent.SHIFT_DOWN_MASK, InputEvent.SHIFT_DOWN_MASK, InputEvent.SHIFT_DOWN_MASK,
MouseEvent.BUTTON3_DOWN_MASK|InputEvent.SHIFT_DOWN_MASK, InputEvent.SHIFT_DOWN_MASK, InputEvent.SHIFT_DOWN_MASK};
// BUTTON1, 2, 3 press-release with CTRL modifier
final static int [] modifiersStandardTestCTRL = new int[] {MouseEvent.BUTTON1_MASK|InputEvent.CTRL_MASK, MouseEvent.BUTTON1_MASK|InputEvent.CTRL_MASK, MouseEvent.BUTTON1_MASK|InputEvent.CTRL_MASK,
MouseEvent.BUTTON2_MASK|InputEvent.CTRL_MASK, MouseEvent.BUTTON2_MASK|InputEvent.CTRL_MASK, MouseEvent.BUTTON2_MASK|InputEvent.CTRL_MASK,
MouseEvent.BUTTON3_MASK|InputEvent.CTRL_MASK, MouseEvent.BUTTON3_MASK|InputEvent.CTRL_MASK, MouseEvent.BUTTON3_MASK|InputEvent.CTRL_MASK };
final static int [] modifiersExStandardTestCTRL = new int[] {MouseEvent.BUTTON1_DOWN_MASK|InputEvent.CTRL_DOWN_MASK, InputEvent.CTRL_DOWN_MASK, InputEvent.CTRL_DOWN_MASK,
MouseEvent.BUTTON2_DOWN_MASK|InputEvent.CTRL_DOWN_MASK, InputEvent.CTRL_DOWN_MASK, InputEvent.CTRL_DOWN_MASK,
MouseEvent.BUTTON3_DOWN_MASK|InputEvent.CTRL_DOWN_MASK, InputEvent.CTRL_DOWN_MASK, InputEvent.CTRL_DOWN_MASK};
// BUTTON1, 2, 3 press-release with ALT modifier
final static int [] modifiersStandardTestALT = new int[] {MouseEvent.BUTTON1_MASK|InputEvent.ALT_MASK, MouseEvent.BUTTON1_MASK|InputEvent.ALT_MASK, MouseEvent.BUTTON1_MASK|InputEvent.ALT_MASK,
MouseEvent.BUTTON2_MASK|InputEvent.ALT_MASK, MouseEvent.BUTTON2_MASK|InputEvent.ALT_MASK, MouseEvent.BUTTON2_MASK|InputEvent.ALT_MASK,
MouseEvent.BUTTON3_MASK|InputEvent.ALT_MASK, MouseEvent.BUTTON3_MASK|InputEvent.ALT_MASK, MouseEvent.BUTTON3_MASK|InputEvent.ALT_MASK };
final static int [] modifiersExStandardTestALT = new int[] {MouseEvent.BUTTON1_DOWN_MASK|InputEvent.ALT_DOWN_MASK, InputEvent.ALT_DOWN_MASK, InputEvent.ALT_DOWN_MASK,
MouseEvent.BUTTON2_DOWN_MASK|InputEvent.ALT_DOWN_MASK, InputEvent.ALT_DOWN_MASK, InputEvent.ALT_DOWN_MASK,
MouseEvent.BUTTON3_DOWN_MASK|InputEvent.ALT_DOWN_MASK, InputEvent.ALT_DOWN_MASK, InputEvent.ALT_DOWN_MASK};
initParams(s);
initAdapters();
f = new Frame();
f.setLayout(new FlowLayout());
f.addMouseWheelListener(new MouseWheelListener() {
public void mouseWheelMoved(MouseWheelEvent e) {
}
});
f.setVisible(true);
try {
robot.mouseMove(f.getLocationOnScreen().x + f.getWidth()/2, f.getLocationOnScreen().y + f.getHeight()/2);
if (autorun) {
//testing buttons 1, 2, 3 only
//testing buttons 1, 2, 3 with SHIFT, CTRL, ALT keyboard modifiers
} else {
switch (testModifier){
case SHIFT:
break;
case CTRL:
break;
case ALT:
break;
default: //NONE inclusive
}
}
} catch (Exception e){
throw new RuntimeException("Test failed.");
}
}
public static void initAdapters(){
}
/*======================================================================*/
// int index = (button - 4)*3;
dumpValues(button, modifiers, curStandardModifiers[index], modifiersEx, curStandardExModifiers[index]);
if (debug){
} else {
throw new RuntimeException("Test failed : Pressed. modifiers != modifiersStandard");
}
}
// System.out.println(">>>>>>>>>>>>>>> Pressed. modifiersEx "+modifiersEx +" : "+!= curStandardExModifiers");
if (debug){
} else {
throw new RuntimeException("Test failed : Pressed. modifiersEx != curStandardExModifiers");
}
}
}
throw new RuntimeException("Test failed : Clicked. button is absent in paramString()");
}
throw new RuntimeException("Test failed : Clicked. button in paramString() doesn't equal to button being pressed.");
}
}
throw new RuntimeException("Test failed : Pressed. extModifiers == null");
}
switch (testModifier){
case SHIFT:{
ethalon = "Shift+";
break;
}
case ALT:{
ethalon = "Alt+";
break;
}
case CTRL:{
ethalon = "Ctrl+";
break;
}
default: {
ethalon = "";
}
System.out.println("Test failed : Pressed. extModifiers = " +h.get("extModifiers")+" instead of : "+ethalon);
throw new RuntimeException("Test failed : Pressed. extModifiers = " +h.get("extModifiers")+" instead of : "+ethalon);
}
}
}
// none of modifiers should be null
throw new RuntimeException("Test failed : modifiers == null");
}
//check that ButtonX is there
} else {
}
//Check all explicitly pressed modifires
// boolean altIncluded = false; //don't duplicate Alt when ALT is pressed and BUTTON2_MASK.
boolean altIncluded = false;
switch (testModifier){
case SHIFT:{
excplicitModifier = "Shift";
break;
}
case ALT:{
excplicitModifier = "Alt";
altIncluded = true; //there should be only on "Alt" for two modifiers. So check it.
break;
}
case CTRL:{
excplicitModifier = "Ctrl";
break;
}
}
} else {
System.out.println("Test failed : modifiers doesn't contain explicit modifier "+excplicitModifier + " in "+ h.get("modifiers"));
throw new RuntimeException("Test failed : modifiers doesn't contain explicit modifier "+excplicitModifier + " in "+ h.get("modifiers"));
}
}
//Button 2 and 3 reports about Alt+Button2 and Meta+Button3 respectively.
//Check these values too
switch (button){
//BUTTON1 with ALT reports about Alt+Button1+Button2.
//We should fix this but I would not change this.
case 1: {
//Alt+Button1+Button2:
// 1) we already handled "Alt" in excplicitModifier
// 2) we already took "Button1" in buttonEthalon
// 3) so "Button2" is only remained.
// This should only happen when ALT+Button1 is pressed
if (altIncluded){
extraModifiers = "Button2";
}
break;
}
case 2: {
//Alt+Button2 report about "Alt+Button2".
extraModifiers = "Alt";
break;
}
case 3: {
//ALT+BUTTON3 reports about "Alt+Meta+Button2+Button3"
// This should only happen when ALT+Button3 is pressed
extraModifiers = "Meta";
if (altIncluded){
extraModifiersButton3 = "Button2";
}
break;
}
}//switch
} else {
//we may already removed "Alt" when filtered explicit modifiers.
//Here is no failure in this case.
if (!altIncluded) {
System.out.println("Test failed : modifiers doesn't contain a modifier from BUTTON2 or BUTTON3 "+extraModifiers + " in "+ h.get("modifiers"));
throw new RuntimeException("Test failed : modifiers doesn't contain a modifier from BUTTON2 or BUTTON3 "+extraModifiers + " in "+ h.get("modifiers"));
}
}
}
} else {
System.out.println("Test failed : modifiers doesn't contain a modifier from BUTTON2 or BUTTON3 "+extraModifiersButton3 + " in "+ h.get("modifiers"));
throw new RuntimeException("Test failed : modifiers doesn't contain a modifier from BUTTON2 or BUTTON3 "+extraModifiersButton3 + " in "+ h.get("modifiers"));
}
}
//the length of vector should now be zero
if (!modifierElements.isEmpty()){
System.out.println("Test failed : there is some more elements in modifiers that shouldn't be there: "+h.get("modifiers"));
throw new RuntimeException("Test failed : there is some more elements in modifiers that shouldn't be there: "+h.get("modifiers"));
}
}
switch (testModifier){
case SHIFT:{
ethalon = "Shift+";
break;
}
case ALT:{
ethalon = "Alt+";
break;
}
case CTRL:{
ethalon = "Ctrl+";
break;
}
default: {
System.out.println("Test failed : Released. extModifiers != null but no modifiers keys are pressed");
throw new RuntimeException("Test failed : Released. extModifiers != null but no modifiers keys are pressed");
} else {
//no modifiers
return;
}
}
}
System.out.println("Test failed : Released. extModifiers = "+ h.get("extModifiers") +" instead of : "+ethalon);
throw new RuntimeException("Test failed : Released. extModifiers = "+ h.get("extModifiers") +" instead of : "+ethalon);
}
}
// int index = (button - 4)*3 + 1;
dumpValues(button, modifiers, curStandardModifiers[index], modifiersEx, curStandardExModifiers[index]);
if (debug){
} else {
throw new RuntimeException("Test failed : Released. modifiers != modifiersStandard");
}
}
if (debug){
} else {
throw new RuntimeException("Test failed : Released. modifiersEx != curStandardExModifiers");
}
}
}
// int index = (button - 4)*3 + 2;
dumpValues(button, modifiers, curStandardModifiers[index], modifiersEx, curStandardExModifiers[index]);
if (debug){
} else {
throw new RuntimeException("Test failed : Clicked. modifiers != modifiersStandard");
}
}
if (debug){
} else {
throw new RuntimeException("Test failed : Clicked. modifiersEx != curStandardExModifiers");
}
}
}
/*======================================================================*/
while (st.hasMoreTokens()){
// System.out.println("PARSER : "+tmp);
}
}
return params;
}
while (st.hasMoreTokens()){
}
return modifiers;
}
//test BUTTON1, 2 and 3 without any modifiers keys
public static void testPlainButtons(){
for (int button : mouseButtons){
}
}
//test BUTTON1, 2 and 3 with SHIFT key
public static void testButtonsWithShift(){
for (int button : mouseButtons){
}
}
//test BUTTON1, 2 and 3 with CTRL key
public static void testButtonsWithControl(){
for (int button : mouseButtons){
}
}
//test BUTTON1, 2 and 3 with ALT key
public static void testButtonsWithAlt(){
for (int button : mouseButtons){
}
}
if (s.length != 3){
autorun = true;
debug = false;
testModifier = NONE;
} else {
testModifier = NONE;
}
}
testModifier = CTRL;
}
testModifier = ALT;
}
}
}
public static void dumpValues(int button, int modifiers, int modifiersStandard, int modifiersEx, int modifiersExStandard){
System.out.println("Button = "+button + "Modifiers = "+ modifiers + " standard = "+ modifiersStandard);
}
int [] curStandardExModifiers;
switch (testModifier){
case SHIFT:
break;
case CTRL:
break;
case ALT:
break;
default: //NONE by default
}
return curStandardExModifiers;
}
int [] curStandardModifiers;
switch (testModifier){
case SHIFT:
break;
case CTRL:
break;
case ALT:
break;
default: //NONE by default
}
return curStandardModifiers;
}
}
/* A class that invoke appropriate verification
* routine with current modifier.
*/
int modifier;
}
} else {
MouseModifiersUnitTest_Standard.checkPressedModifiersTest(modifier, e); // e.getButton(), e.getModifiers(), e.getModifiersEx(),
}
}
} else {
MouseModifiersUnitTest_Standard.checkReleasedModifiersTest(modifier, e); // e.getButton(), e.getModifiers(), e.getModifiersEx()
}
}
} else {
MouseModifiersUnitTest_Standard.checkClickedModifiersTest(modifier, e); //e.getButton(), e.getModifiers(), e.getModifiersEx()
}
}
}