package org.javabuilders.swing.test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.text.MessageFormat;
import java.util.ResourceBundle;
import javax.swing.JTextField;
import org.javabuilders.BuildException;
import org.javabuilders.BuildResult;
import org.javabuilders.Builder;
import org.javabuilders.BuilderConfig;
import org.javabuilders.handler.validation.BuilderValidators;
import org.javabuilders.handler.validation.ValidationMessageList;
import org.javabuilders.swing.SwingJavaBuilder;
import org.junit.Test;
/**
* Unit tests for validations
*/
public class ValidationsTest {
private String base =
"JPanel(name=panel): \n" +
" - JLabel(name=label,text=label.field)\n" +
" - JTextField(name=field)\n";
private BuilderConfig config = SwingJavaBuilder.getConfig();
private ResourceBundle bundle = ResourceBundle.getBundle("TestResources");
private String fieldLabel = bundle.getString("message.label.field");
private static final String FIELD = "field";
@Test
public void mandatoryTest() throws IOException, BuildException {
String test = base +
"validate: \n" +
" - field.text: {label: message.label.field, mandatory: true}";
BuildResult result = Builder.buildFromString(config, this, test, bundle);
ValidationMessageList list = result.getValidationMessages();
//test missing
assertEquals(1,list.size());
assertFalse(result.validate(false));
testMessage(result, list.get(0).getMessage(),BuilderValidators.getDefaultMandatoryMessage(),fieldLabel);
//assure passes if valid
JTextField field = (JTextField)result.get(FIELD);
field.setText("Some text");
list = result.getValidationMessages();
assertEquals(0, list.size());
assertTrue(result.validate(false));
}
@Test
public void minLengthTest() throws IOException, BuildException {
String test = base +
"validate: \n" +
" - field.text: {label: Field, minLength: 5}";
BuildResult result = Builder.buildFromString(config, this, test);
ValidationMessageList list = result.getValidationMessages();
//assure passes if valid
JTextField field = (JTextField)result.get(FIELD);
field.setText("12345");
list = result.getValidationMessages();
assertEquals(0, list.size());
assertTrue(result.validate(false));
field.setText("12345 232323");
list = result.getValidationMessages();
assertEquals(0, list.size());
assertTrue(result.validate(false));
}
@Test
public void maxLengthTest() throws IOException, BuildException {
String test = base +
"validate: \n" +
" - field.text: {label: Field, maxLength: 5}";
BuildResult result = Builder.buildFromString(config, this, test);
//test invalid
JTextField field = (JTextField)result.get(FIELD);
field.setText("123456");
ValidationMessageList list = result.getValidationMessages();
assertEquals(1,list.size());
assertFalse(result.validate(false));
testMessage(result, list.get(0).getMessage(),BuilderValidators.getDefaultMaxLengthMessage(),fieldLabel,5);
//assure passes if valid
field.setText("1234");
list = result.getValidationMessages();
assertEquals(0, list.size());
assertTrue(result.validate(false));
field.setText("");
list = result.getValidationMessages();
assertEquals(0, list.size());
assertTrue(result.validate(false));
}
@Test
public void dateFormatTest() throws IOException, BuildException {
String test = base +
"validate: \n" +
" - field.text: {label: Field, dateFormat: dd/MM/yyyy}";
BuildResult result = Builder.buildFromString(config, this, test);
//test invalid
JTextField field = (JTextField)result.get(FIELD);
field.setText("45/45/9999");
ValidationMessageList list = result.getValidationMessages();
assertEquals(1,list.size());
assertFalse(result.validate(false));
testMessage(result, list.get(0).getMessage(),BuilderValidators.getDefaultDateFormatMessage(),fieldLabel,
"dd/MM/yyyy");
//assure passes if valid
field.setText("31/12/2006");
list = result.getValidationMessages();
assertEquals(0, list.size());
assertTrue(result.validate(false));
}
//common method to test messages are formatted correctly
private void testMessage(BuildResult r, String actual, String format, Object...arguments) {
String pattern = r.getResource(format);
String expected = MessageFormat.format(pattern, arguments);
assertEquals(expected, actual);
}
}