/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* 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 org.kie.workbench.common.stunner.bpmn.client.forms.widgets;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwtmockito.GwtMockito;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mock;
import static org.junit.Assert.*;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Matchers.anyChar;
import static org.mockito.Matchers.anySet;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.*;
@RunWith(Parameterized.class)
public class VariableNameTextBoxTest {
private static final String ALPHA_NUM_REGEXP = "^[a-zA-Z0-9\\-\\.\\_]*$";
private static final String ERROR_MESSAGE = "some error";
private static final String ERROR_REMOVED = "some error reg exp";
private static final String ERROR_TYPED = "some error reg exp2";
private static final Set<String> INVALID_VALUES = new HashSet<String>();
@Captor
private ArgumentCaptor<BlurHandler> blurCaptor;
@Captor
ArgumentCaptor<KeyPressHandler> keyPressCaptor;
@Mock
private BlurEvent blurEvent;
@Mock
private KeyPressEvent keyPressEvent;
@Mock
private NativeEvent nativeEvent;
private boolean caseSensitive;
private VariableNameTextBox textBox;
@Parameterized.Parameters
public static Collection<Boolean[]> caseSensitivity() {
return Arrays.asList(new Boolean[][]{{true}, {false}});
}
public VariableNameTextBoxTest(boolean caseSensitive) {
this.caseSensitive = caseSensitive;
}
@Before
public void init() {
GwtMockito.initMocks(this);
textBox = GWT.create(VariableNameTextBox.class);
doCallRealMethod().when(textBox).setRegExp(anyString(),
anyString(),
anyString());
doCallRealMethod().when(textBox).setInvalidValues(anySet(),
anyBoolean(),
anyString());
doCallRealMethod().when(textBox).isValidValue(anyString(),
anyBoolean());
doCallRealMethod().when(textBox).setText(anyString());
doCallRealMethod().when(textBox).testForInvalidValue(anyString());
doCallRealMethod().when(textBox).makeValidValue(anyString());
doCallRealMethod().when(textBox).getInvalidCharsInName(anyString());
doCallRealMethod().when(textBox).isValidChar(anyChar());
doCallRealMethod().when(textBox).setup();
doCallRealMethod().when(textBox).addBlurHandler(any(BlurHandler.class));
doCallRealMethod().when(textBox).addKeyPressHandler(any(KeyPressHandler.class));
textBox.setRegExp(ALPHA_NUM_REGEXP,
ERROR_REMOVED,
ERROR_TYPED);
INVALID_VALUES.clear();
INVALID_VALUES.add("abc");
INVALID_VALUES.add("CdE");
INVALID_VALUES.add("a#$%1");
textBox.setInvalidValues(INVALID_VALUES,
caseSensitive,
ERROR_MESSAGE);
}
@Test
public void testSetup() {
when(textBox.getKeyCodeFromKeyPressEvent(any(KeyPressEvent.class))).thenReturn(64);
when(keyPressEvent.isControlKeyDown()).thenReturn(false);
when(keyPressEvent.isShiftKeyDown()).thenReturn(true);
when(keyPressEvent.getCharCode()).thenReturn('@');
when(textBox.getCursorPos()).thenReturn(4);
when(textBox.getSelectionLength()).thenReturn(0);
when(textBox.getValue()).thenReturn("ab12");
when(textBox.getText()).thenReturn("ab12@");
textBox.setup();
verify(textBox,
times(1)).addBlurHandler(blurCaptor.capture());
verify(textBox,
times(1)).addKeyPressHandler(keyPressCaptor.capture());
BlurHandler blurHandler = blurCaptor.getValue();
blurHandler.onBlur(blurEvent);
verify(textBox,
times(1)).isValidValue("ab12@",
true);
verify(textBox,
times(1)).makeValidValue("ab12@");
verify(textBox,
times(1)).setValue("ab12");
KeyPressHandler keyPressHandler = keyPressCaptor.getValue();
keyPressHandler.onKeyPress(keyPressEvent);
verify(keyPressEvent,
times(1)).preventDefault();
verify(textBox,
times(1)).isValidValue("ab12@",
false);
verify(textBox,
times(1)).fireValidationError(ERROR_REMOVED + ": @");
verify(textBox,
times(1)).fireValidationError(ERROR_TYPED + ": @");
}
@Test
public void testMakeValid() {
String makeValidResult;
makeValidResult = textBox.makeValidValue(null);
assertEquals("",
makeValidResult);
makeValidResult = textBox.makeValidValue("");
assertEquals("",
makeValidResult);
makeValidResult = textBox.makeValidValue("aBc");
if (caseSensitive) {
assertEquals("aBc",
makeValidResult);
} else {
assertEquals("",
makeValidResult);
}
makeValidResult = textBox.makeValidValue("CdE");
assertEquals("",
makeValidResult);
makeValidResult = textBox.makeValidValue("c");
assertEquals("c",
makeValidResult);
makeValidResult = textBox.makeValidValue("a#b$2%1");
assertEquals("ab21",
makeValidResult);
}
@Test
public void testIsValidValue() {
String isValidResult;
isValidResult = textBox.isValidValue("a",
true);
assertEquals(null,
isValidResult);
isValidResult = textBox.isValidValue("a",
false);
assertEquals(null,
isValidResult);
isValidResult = textBox.isValidValue("aBc",
true);
if (caseSensitive) {
assertEquals(null,
isValidResult);
} else {
assertEquals(ERROR_MESSAGE,
isValidResult);
}
isValidResult = textBox.isValidValue("aBc",
false);
assertEquals(null,
isValidResult);
isValidResult = textBox.isValidValue("CdE",
true);
assertEquals(ERROR_MESSAGE,
isValidResult);
isValidResult = textBox.isValidValue("CdE",
false);
assertEquals(null,
isValidResult);
isValidResult = textBox.isValidValue("a#$%1",
true);
assertEquals(ERROR_MESSAGE,
isValidResult);
isValidResult = textBox.isValidValue("a#$%1",
false);
assertEquals(ERROR_TYPED + ": #$%",
isValidResult);
}
}