diff --git a/src/main/java/com/github/britter/beanvalidators/file/AbsoluteConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/AbsoluteConstraintValidator.java index 7adefb8..7fcd3a9 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/AbsoluteConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/AbsoluteConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class AbsoluteConstraintValidator implements ConstraintValidator { +public class AbsoluteConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(Absolute constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/AbstractFileConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/AbstractFileConstraintValidator.java new file mode 100644 index 0000000..f443a3c --- /dev/null +++ b/src/main/java/com/github/britter/beanvalidators/file/AbstractFileConstraintValidator.java @@ -0,0 +1,37 @@ +package com.github.britter.beanvalidators.file; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import javax.validation.ValidationException; +import java.io.File; +import java.lang.annotation.Annotation; + +import org.apache.commons.lang3.StringUtils; + +abstract class AbstractFileConstraintValidator implements ConstraintValidator { + + private Class constraintAnnotation; + + @Override + public void initialize(A constraintAnnotation) { + this.constraintAnnotation = constraintAnnotation.annotationType(); + } + + @Override + public boolean isValid(Object value, ConstraintValidatorContext context) { + if (value == null) { + return true; + } + if (value instanceof File) { + return isValid((File) value, context); + } else if (value instanceof String) { + String str = (String) value; + return StringUtils.isBlank(str) || isValid(new File(str), context); + } else { + throw new ValidationException("@" + constraintAnnotation.getSimpleName() + + " can not be applied to instances of " + value.getClass()); + } + } + + public abstract boolean isValid(File value, ConstraintValidatorContext context); +} diff --git a/src/main/java/com/github/britter/beanvalidators/file/DirectoryConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/DirectoryConstraintValidator.java index e124b13..0346fb1 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/DirectoryConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/DirectoryConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class DirectoryConstraintValidator implements ConstraintValidator { +public class DirectoryConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(Directory constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/ExecutableConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/ExecutableConstraintValidator.java index b2f8234..b84c5ae 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/ExecutableConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/ExecutableConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class ExecutableConstraintValidator implements ConstraintValidator { +public class ExecutableConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(Executable constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/ExistingConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/ExistingConstraintValidator.java index be1129d..bfd5c48 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/ExistingConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/ExistingConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class ExistingConstraintValidator implements ConstraintValidator { +public class ExistingConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(Existing constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/FileConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/FileConstraintValidator.java index b5c2050..5584af6 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/FileConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/FileConstraintValidator.java @@ -15,13 +15,13 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; -public class FileConstraintValidator implements ConstraintValidator { +public class FileConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(File constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/HiddenConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/HiddenConstraintValidator.java index 40472ac..45be7fa 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/HiddenConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/HiddenConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class HiddenConstraintValidator implements ConstraintValidator { +public class HiddenConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(Hidden constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/NotAbsoluteConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/NotAbsoluteConstraintValidator.java index d0ab9ef..fd1b806 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/NotAbsoluteConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/NotAbsoluteConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class NotAbsoluteConstraintValidator implements ConstraintValidator { +public class NotAbsoluteConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(NotAbsolute constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/NotDirectoryConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/NotDirectoryConstraintValidator.java index 5214d93..2621580 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/NotDirectoryConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/NotDirectoryConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class NotDirectoryConstraintValidator implements ConstraintValidator { +public class NotDirectoryConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(NotDirectory constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/NotExecutableConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/NotExecutableConstraintValidator.java index 699c7aa..c450294 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/NotExecutableConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/NotExecutableConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class NotExecutableConstraintValidator implements ConstraintValidator { +public class NotExecutableConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(NotExecutable constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/NotExistingConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/NotExistingConstraintValidator.java index 08fb7aa..c55d382 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/NotExistingConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/NotExistingConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class NotExistingConstraintValidator implements ConstraintValidator { +public class NotExistingConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(NotExisting constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/NotFileConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/NotFileConstraintValidator.java index 1c78c57..7563caa 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/NotFileConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/NotFileConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class NotFileConstraintValidator implements ConstraintValidator { +public class NotFileConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(NotFile constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/NotHiddenConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/NotHiddenConstraintValidator.java index 8f2f653..f6cecd7 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/NotHiddenConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/NotHiddenConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class NotHiddenConstraintValidator implements ConstraintValidator { +public class NotHiddenConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(NotHidden constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/NotReadableConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/NotReadableConstraintValidator.java index 9002d82..ae683ca 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/NotReadableConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/NotReadableConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class NotReadableConstraintValidator implements ConstraintValidator { +public class NotReadableConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(NotReadable constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/NotWritableConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/NotWritableConstraintValidator.java index ae307ed..92bf117 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/NotWritableConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/NotWritableConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class NotWritableConstraintValidator implements ConstraintValidator { +public class NotWritableConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(NotWritable constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/ReadableConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/ReadableConstraintValidator.java index f0ff503..0e15881 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/ReadableConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/ReadableConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class ReadableConstraintValidator implements ConstraintValidator { +public class ReadableConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(Readable constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/main/java/com/github/britter/beanvalidators/file/WritableConstraintValidator.java b/src/main/java/com/github/britter/beanvalidators/file/WritableConstraintValidator.java index 52c8c17..cffaff6 100644 --- a/src/main/java/com/github/britter/beanvalidators/file/WritableConstraintValidator.java +++ b/src/main/java/com/github/britter/beanvalidators/file/WritableConstraintValidator.java @@ -15,14 +15,14 @@ */ package com.github.britter.beanvalidators.file; -import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import java.io.File; -public class WritableConstraintValidator implements ConstraintValidator { +public class WritableConstraintValidator extends AbstractFileConstraintValidator { @Override public void initialize(Writable constraintAnnotation) { + super.initialize(constraintAnnotation); } @Override diff --git a/src/test/java/com/github/britter/beanvalidators/file/AbsoluteTest.java b/src/test/java/com/github/britter/beanvalidators/file/AbsoluteTest.java index 677e1cf..39b641f 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/AbsoluteTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/AbsoluteTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -64,8 +65,31 @@ public void shouldNotValidateNonExistingFile() throws Exception { validator.assertViolation("file"); } + @Test + public void shouldValidateAbsolutePathString() throws Exception { + fileBean.path = "/absolute/path"; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateRelativePathString() throws Exception { + fileBean.path = "is/not/absolute"; + + validator.assertViolation("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenWrongTypeIsAnnotated() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @Absolute private File file; + @Absolute + private String path; + @Absolute + private Object object = new Object(); } } diff --git a/src/test/java/com/github/britter/beanvalidators/file/AbstractFileConstraintValidatorTest.java b/src/test/java/com/github/britter/beanvalidators/file/AbstractFileConstraintValidatorTest.java new file mode 100644 index 0000000..84146cb --- /dev/null +++ b/src/test/java/com/github/britter/beanvalidators/file/AbstractFileConstraintValidatorTest.java @@ -0,0 +1,106 @@ +/* + * Copyright 2015 Benedikt Ritter + * + * 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.github.britter.beanvalidators.file; + +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; +import static org.junit.Assert.assertThat; + +import javax.validation.ConstraintValidatorContext; +import javax.validation.ValidationException; +import java.io.File; +import java.lang.annotation.Annotation; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.rules.TemporaryFolder; + +public class AbstractFileConstraintValidatorTest { + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Rule + public TemporaryFolder tmpFolder = new TemporaryFolder(); + + private AbstractFileConstraintValidatorImpl validator; + + @Before + public void setUp() throws Exception { + validator = new AbstractFileConstraintValidatorImpl(); + validator.initialize(new TestAnnotation()); + } + + @Test + public void shouldValidateNull() throws Exception { + assertThat(validator.isValid((Object) null, null), is(true)); + } + + @Test + public void shouldPassFileObjectsToSubclass() throws Exception { + File file = tmpFolder.newFile(); + validator.isValid(((Object) file), null); + + assertThat(validator.validatedFile, is(equalTo(file))); + } + + @Test + public void shouldValidateBlankString() throws Exception { + assertThat(validator.isValid(" ", null), is(true)); + } + + @Test + public void shouldNotPassAnythingToSubclassForBlankString() throws Exception { + validator.isValid(" ", null); + + assertThat(validator.validatedFile, is(nullValue())); + } + + @Test + public void shouldConstructFileInstanceFromString() throws Exception { + validator.isValid("/test/file", null); + + assertThat(validator.validatedFile.getAbsolutePath(), is("/test/file")); + } + + @Test + public void shouldConstructErrorMessageWhenDifferentTypeIsAnnotated() throws Exception { + thrown.expect(ValidationException.class); + thrown.expectMessage("@Absolute can not be applied to instances of class java.lang.Object"); + + validator.isValid(new Object(), null); + } + + private static final class AbstractFileConstraintValidatorImpl extends AbstractFileConstraintValidator { + private File validatedFile; + + @Override + public boolean isValid(File value, ConstraintValidatorContext context) { + this.validatedFile = value; + return true; + } + } + + private static final class TestAnnotation implements Annotation { + @Override + public Class annotationType() { + return Absolute.class; + } + } +} \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/DirectoryTest.java b/src/test/java/com/github/britter/beanvalidators/file/DirectoryTest.java index 53800c9..cb38d57 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/DirectoryTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/DirectoryTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -57,8 +58,38 @@ public void shouldNotValidateFile() throws Exception { validator.assertViolation("dir"); } + @Test + public void shouldValidateBlankString() throws Exception { + fileBean.path = " "; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateStringRepresentingFile() throws Exception { + fileBean.path = tmpFolder.newFile().getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenOtherTypeIsAnnotated() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @Directory private File dir; + @Directory + private String path; + @Directory + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/ExecutableTest.java b/src/test/java/com/github/britter/beanvalidators/file/ExecutableTest.java index 1e2ecfa..e4e8262 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/ExecutableTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/ExecutableTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -65,8 +66,49 @@ public void shouldNotValidateUnexecutableFile() throws Exception { validator.assertViolation("file"); } + @Test + public void shouldValidateBlankString() throws Exception { + fileBean.path = " "; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingExecutableDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingExecutableFile() throws Exception { + File file = tmpFolder.newFile(); + file.setExecutable(true); + fileBean.path = file.getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateStringRepresentingNonExecutableFile() throws Exception { + File file = tmpFolder.newFile(); + file.setExecutable(false); + fileBean.path = file.getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenOtherTypeIsAnnotated() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @Executable private File file; + @Executable + private String path; + @Executable + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/ExistingTest.java b/src/test/java/com/github/britter/beanvalidators/file/ExistingTest.java index c16ce68..3b15745 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/ExistingTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/ExistingTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -64,8 +65,45 @@ public void shouldNotValidateNonExistingFile() throws Exception { validator.assertViolation("file"); } + @Test + public void shouldValidateBlankString() throws Exception { + fileBean.path = " "; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingExistingFile() throws Exception { + fileBean.path = tmpFolder.newFile().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingExistingDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateNonExistingPath() throws Exception { + fileBean.path = "/should/not/exist"; + + validator.assertViolation("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenAppliedToOtherTypes() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @Existing private File file; + @Existing + private String path; + @Existing + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/FileTest.java b/src/test/java/com/github/britter/beanvalidators/file/FileTest.java index 480e90e..359832f 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/FileTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/FileTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -64,8 +65,38 @@ public void shouldNotValidateNonExistingFile() throws Exception { validator.assertViolation("file"); } + @Test + public void shouldNotValidateStringRepresentingDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test + public void shouldValidateStringRepresentingFile() throws Exception { + fileBean.path = tmpFolder.newFile().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateStringRepresentingNonExistingFile() throws Exception { + fileBean.path = "/should/not/exist"; + + validator.assertViolation("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenAppliedToOtherTypes() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @com.github.britter.beanvalidators.file.File private File file; + @com.github.britter.beanvalidators.file.File + private String path; + @com.github.britter.beanvalidators.file.File + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/HiddenTest.java b/src/test/java/com/github/britter/beanvalidators/file/HiddenTest.java index 5e610b0..0252229 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/HiddenTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/HiddenTest.java @@ -19,6 +19,7 @@ import static org.junit.Assert.assertThat; import javax.validation.ConstraintViolation; +import javax.validation.ValidationException; import java.io.File; import java.util.Set; @@ -78,8 +79,52 @@ public void shouldValidateHiddenFile() throws Exception { validator.assertNoViolations("file"); } + @Test + public void shouldNotValidateStringRepresendingUnhiddenFile() throws Exception { + fileBean.path = tmpFolder.newFile().getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test + public void shouldNotValidateStringRepresentingUnhiddenDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test + public void shouldValidateBlankString() throws Exception { + fileBean.path = " "; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingHiddenFile() throws Exception { + fileBean.path = tmpFolder.newFile(".hidden").getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingHiddenDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder(".hidde").getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenAppliedToOtherTypes() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @Hidden private File file; + @Hidden + private String path; + @Hidden + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/NotAbsoluteTest.java b/src/test/java/com/github/britter/beanvalidators/file/NotAbsoluteTest.java index 7df89f8..20243b5 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/NotAbsoluteTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/NotAbsoluteTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -64,8 +65,38 @@ public void shouldValidateNonExistingFile() throws Exception { validator.assertNoViolations("file"); } + @Test + public void shouldValidateBlankString() throws Exception { + fileBean.path = " "; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingNonAbsolutePath() throws Exception { + fileBean.path = "is/not/absolute"; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateStringRepresentingAbsolutePath() throws Exception { + fileBean.path = "/is/absolute"; + + validator.assertViolation("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenAppliedToOtherTypes() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @NotAbsolute private File file; + @NotAbsolute + private String path; + @NotAbsolute + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/NotDirectoryTest.java b/src/test/java/com/github/britter/beanvalidators/file/NotDirectoryTest.java index f81a5ba..4efedc1 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/NotDirectoryTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/NotDirectoryTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -57,8 +58,38 @@ public void shouldValidateFile() throws Exception { validator.assertNoViolations("dir"); } + @Test + public void shouldValidateBlankString() throws Exception { + fileBean.path = " "; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingFile() throws Exception { + fileBean.path = tmpFolder.newFile().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateStringRepresentingDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenOtherTypeisAnnotated() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @NotDirectory private File dir; + @NotDirectory + private String path; + @NotDirectory + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/NotExecutableTest.java b/src/test/java/com/github/britter/beanvalidators/file/NotExecutableTest.java index bed9469..98e4385 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/NotExecutableTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/NotExecutableTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -81,8 +82,56 @@ public void shouldValidateUnexecutableNonExistingFile() throws Exception { validator.assertNoViolations("file"); } + @Test + public void shouldValidateBlankString() throws Exception { + fileBean.path = " "; + + validator.validate("path"); + } + + @Test + public void shouldNotValidateStringRepresentingExecutableDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test + public void shouldNotValidateStringRepresentingExecutableFile() throws Exception { + File file = tmpFolder.newFile(); + file.setExecutable(true); + fileBean.path = file.getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test + public void shouldValidateStringRepresentingNonExecutableFile() throws Exception { + fileBean.path = tmpFolder.newFile().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingNonExecutableDirectory() throws Exception { + File dir = tmpFolder.newFolder(); + dir.setExecutable(false); + fileBean.path = dir.getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenAppliedToOtherTypes() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @NotExecutable private File file; + @NotExecutable + private String path; + @NotExecutable + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/NotExistingTest.java b/src/test/java/com/github/britter/beanvalidators/file/NotExistingTest.java index 86dd266..2d90404 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/NotExistingTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/NotExistingTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -64,8 +65,45 @@ public void shouldValidateNonExistingFile() throws Exception { validator.assertNoViolations("file"); } + @Test + public void shouldValidateBlankString() throws Exception { + fileBean.path = " "; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateStringRepresentingExistingDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test + public void shouldNotValidateStringRepresentingExistingFile() throws Exception { + fileBean.path = tmpFolder.newFile().getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test + public void shouldValidateStringRepresentingNonExistingFile() throws Exception { + fileBean.path = "/should/not/exist"; + + validator.assertNoViolations("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenAppliedToOtherTypes() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @NotExisting private File file; + @NotExisting + private String path; + @NotExisting + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/NotFileTest.java b/src/test/java/com/github/britter/beanvalidators/file/NotFileTest.java index bd3c07e..a5211f6 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/NotFileTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/NotFileTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -64,8 +65,45 @@ public void shouldValidateNonExistingFile() throws Exception { validator.assertNoViolations("file"); } + @Test + public void shouldValidateBlankString() throws Exception { + fileBean.path = " "; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateStringRepresentingFile() throws Exception { + fileBean.path = tmpFolder.newFile().getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test + public void shouldValidateStringRepresentingNonExistingFile() throws Exception { + fileBean.path = "/should/not/exist"; + + validator.assertNoViolations("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenAppliedToOtherTypes() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @NotFile private File file; + @NotFile + private String path; + @NotFile + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/NotHiddenTest.java b/src/test/java/com/github/britter/beanvalidators/file/NotHiddenTest.java index 09c2d96..70595de 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/NotHiddenTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/NotHiddenTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -71,8 +72,52 @@ public void shouldNotValidateHiddenFile() throws Exception { validator.assertViolation("file"); } + @Test + public void shouldValidateBlankString() throws Exception { + fileBean.path = " "; + + validator.validate("path"); + } + + @Test + public void shouldValidateStringRepresentingDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingFile() throws Exception { + fileBean.path = tmpFolder.newFile().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateStringRepresentingHiddenDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder(".hidden").getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test + public void shouldNotValidateStringRepresentingHiddenFile() throws Exception { + fileBean.path = tmpFolder.newFile(".hidden").getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenAppliedToOtherTypes() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @NotHidden private File file; + @NotHidden + private String path; + @NotHidden + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/NotReadableTest.java b/src/test/java/com/github/britter/beanvalidators/file/NotReadableTest.java index 5ddb65d..97fdc8b 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/NotReadableTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/NotReadableTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -65,8 +66,45 @@ public void shouldNotValidateReadableFile() throws Exception { validator.assertViolation("file"); } + @Test + public void shouldValidateBlankString() throws Exception { + fileBean.path = " "; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingNonExistingFile() throws Exception { + fileBean.path = "/should/not/exist"; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateStringRepresentingDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test + public void shouldNotValidateStringRepresentingFile() throws Exception { + fileBean.path = tmpFolder.newFile().getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenOtherTypesAreAnnotated() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @NotReadable private File file; + @NotReadable + private String path; + @NotReadable + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/NotWritableTest.java b/src/test/java/com/github/britter/beanvalidators/file/NotWritableTest.java index 9dd04f6..ad59519 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/NotWritableTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/NotWritableTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -64,9 +65,45 @@ public void shouldNotValidateWriteableFile() throws Exception { validator.assertViolation("file"); } + @Test + public void shouldValidateBlankString() throws Exception { + fileBean.path = " "; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingUnwritableFile() throws Exception { + fileBean.path = "/should/not/exist"; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateStringRepresentingWritableDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test + public void shouldNotValidateStringRepresentingWritableFile() throws Exception { + fileBean.path = tmpFolder.newFile().getAbsolutePath(); + + validator.assertViolation("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenOtherTypeIsAnnotated() throws Exception { + validator.validate("object"); + } private static final class FileBean { @NotWritable private File file; + @NotWritable + private String path; + @NotWritable + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/ReadableTest.java b/src/test/java/com/github/britter/beanvalidators/file/ReadableTest.java index 8bcea30..50e78dc 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/ReadableTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/ReadableTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -64,8 +65,45 @@ public void shouldNotValidateUnreadableFile() throws Exception { validator.assertViolation("file"); } + @Test + public void shouldValidateBlanKString() throws Exception { + fileBean.path = " "; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingReadableDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingReadableFile() throws Exception { + fileBean.path = tmpFolder.newFile().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateStringRepresentingNonExistingFile() throws Exception { + fileBean.path = "/should/not/exist"; + + validator.assertViolation("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenAppliedToOtherTypes() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @Readable private File file; + @Readable + private String path; + @Readable + private Object object = new Object(); } } \ No newline at end of file diff --git a/src/test/java/com/github/britter/beanvalidators/file/WritableTest.java b/src/test/java/com/github/britter/beanvalidators/file/WritableTest.java index b8d0c2e..843401f 100644 --- a/src/test/java/com/github/britter/beanvalidators/file/WritableTest.java +++ b/src/test/java/com/github/britter/beanvalidators/file/WritableTest.java @@ -15,6 +15,7 @@ */ package com.github.britter.beanvalidators.file; +import javax.validation.ValidationException; import java.io.File; import com.github.britter.beanvalidators.ValidationWrapper; @@ -64,8 +65,45 @@ public void shouldNotValidateUnwritableFile() throws Exception { validator.assertViolation("file"); } + @Test + public void shouldValidateBlankStrings() throws Exception { + fileBean.path = " "; + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingWritableDirectory() throws Exception { + fileBean.path = tmpFolder.newFolder().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldValidateStringRepresentingWritableFile() throws Exception { + fileBean.path = tmpFolder.newFile().getAbsolutePath(); + + validator.assertNoViolations("path"); + } + + @Test + public void shouldNotValidateStringRepresentingNonExistingFile() throws Exception { + fileBean.path = "/should/not/exist"; + + validator.assertViolation("path"); + } + + @Test(expected = ValidationException.class) + public void shouldThrowExceptionWhenAppliedToOtherTypes() throws Exception { + validator.validate("object"); + } + private static final class FileBean { @Writable private File file; + @Writable + private String path; + @Writable + private Object object = new Object(); } } \ No newline at end of file