| /* | |
| * Copyright 2012 Google Inc. | |
| * | |
| * 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.google.gwt.validation.example.client; | |
| import com.google.gwt.core.client.GWT; | |
| import com.google.gwt.editor.client.Editor; | |
| import com.google.gwt.editor.client.EditorError; | |
| import com.google.gwt.editor.client.SimpleBeanEditorDriver; | |
| import com.google.gwt.editor.ui.client.ValueBoxEditorDecorator; | |
| import com.google.gwt.junit.client.GWTTestCase; | |
| import com.google.gwt.user.client.ui.Composite; | |
| import com.google.gwt.user.client.ui.TextBox; | |
| import java.util.List; | |
| import java.util.Set; | |
| import javax.validation.ConstraintViolation; | |
| import javax.validation.Validation; | |
| import javax.validation.Validator; | |
| /** | |
| * Tests for {@link Book}. | |
| */ | |
| public class BookTest extends GWTTestCase { | |
| private Author author; | |
| private Book book; | |
| private BookWidget bookWidget; | |
| private Driver driver; | |
| private Validator validator; | |
| @Override | |
| public String getModuleName() { | |
| return "com.google.gwt.validation.example.ValidationExample"; | |
| } | |
| public void testValidate_emptyAuthorLastName() { | |
| initValidBook(); | |
| author.setLastName(""); | |
| Set<ConstraintViolation<Book>> violations = validator.validate(book); | |
| assertEquals(1, violations.size()); | |
| ConstraintViolation<Book> violation = violations.iterator().next(); | |
| assertEquals(author, violation.getLeafBean()); | |
| assertEquals(book, violation.getRootBean()); | |
| assertEquals("author.lastName", violation.getPropertyPath().toString()); | |
| } | |
| public void testValidate_valid() { | |
| initValidBook(); | |
| Set<ConstraintViolation<Book>> violations = validator.validate(book); | |
| assertTrue(violations.isEmpty()); | |
| } | |
| public void testErrorDisplay_noErrors() { | |
| initValidBook(); | |
| driver.initialize(bookWidget); | |
| driver.edit(book); | |
| assertEquals("Smith", bookWidget.author.lastName.asEditor().getValue()); | |
| Set<ConstraintViolation<Book>> violations = validator.validate(book); | |
| assertTrue(violations.isEmpty()); | |
| driver.setConstraintViolations(doHorribleCast(violations)); | |
| } | |
| public void testErrorDisplay_lastNameError() { | |
| initValidBook(); | |
| driver.initialize(bookWidget); | |
| driver.edit(book); | |
| bookWidget.author.lastName.asEditor().setValue(""); | |
| driver.flush(); | |
| assertEquals(null, author.getLastName()); | |
| Set<ConstraintViolation<Book>> violations = validator.validate(book); | |
| assertEquals(1, violations.size()); | |
| driver.setConstraintViolations(doHorribleCast(violations)); | |
| List<EditorError> errors = bookWidget.author.errors; | |
| // Note: Is the fact that there are 2 errors here (rather than just one) also a bug? | |
| assertEquals(2, errors.size()); | |
| EditorError error = errors.get(0); | |
| assertEquals(bookWidget.author.lastName.asEditor(), error.getEditor()); | |
| // There is a bug here - error.getPath() throws a StringIndexOutOfBoundsException. | |
| // The pathPrefixLength is set in ErrorCollector line 63. It breaks the toString() method | |
| // of SimpleError as well. | |
| assertEquals("author.lastName", error.getAbsolutePath()); | |
| } | |
| @Override | |
| protected final void gwtSetUp() throws Exception { | |
| super.gwtSetUp(); | |
| author = new Author(); | |
| book = new Book(); | |
| validator = Validation.buildDefaultValidatorFactory().getValidator(); | |
| bookWidget = new BookWidget(); | |
| driver = GWT.create(Driver.class); | |
| } | |
| protected void initValidBook() { | |
| author.setFirstName("John"); | |
| author.setLastName("Smith"); | |
| author.setCompany("Google"); | |
| book.setAuthor(author); | |
| book.setTitle("JSR-303 Validation in GWT"); | |
| } | |
| @SuppressWarnings("unchecked") | |
| private Iterable<ConstraintViolation<?>> doHorribleCast(Object o) { | |
| return (Iterable<ConstraintViolation<?>>) o; | |
| } | |
| interface Driver extends SimpleBeanEditorDriver<Book, BookWidget> { } | |
| class BookWidget extends Composite implements Editor<Book> { | |
| AuthorWidget author = new AuthorWidget(); | |
| } | |
| class AuthorWidget extends Composite implements Editor<Author> { | |
| ValueBoxEditorDecorator<String> lastName; | |
| List<EditorError> errors; | |
| AuthorWidget() { | |
| lastName = new ValueBoxEditorDecorator<String>() { | |
| @Override | |
| public void showErrors(List<EditorError> errors) { | |
| super.showErrors(errors); | |
| AuthorWidget.this.errors = errors; | |
| } | |
| }; | |
| lastName.setValueBox(new TextBox()); | |
| } | |
| } | |
| } |