From bb760dde1411e751ff0074f3ed742fb65c9acf61 Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 14:39:53 +0200 Subject: [PATCH 01/17] Add common base class for file validators --- .../file/AbstractFileConstraintValidator.java | 37 ++++++ .../AbstractFileConstraintValidatorTest.java | 106 ++++++++++++++++++ 2 files changed, 143 insertions(+) create mode 100644 src/main/java/com/github/britter/beanvalidators/file/AbstractFileConstraintValidator.java create mode 100644 src/test/java/com/github/britter/beanvalidators/file/AbstractFileConstraintValidatorTest.java 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/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 From 5cd4f5ea99ea288c3e5dde4275506b2726dc7db3 Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 14:51:50 +0200 Subject: [PATCH 02/17] Allow @Absolute to be applied to Strings --- .../file/AbsoluteConstraintValidator.java | 4 ++-- .../beanvalidators/file/AbsoluteTest.java | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) 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/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(); } } From 0517b07eda367afcc53233d9299319d015438f62 Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 15:04:40 +0200 Subject: [PATCH 03/17] Allow @Directory to be applied to Strings --- .../file/DirectoryConstraintValidator.java | 4 +-- .../beanvalidators/file/DirectoryTest.java | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) 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/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 From a80d7f0a8f84586c336349e46f099a7a535b94f7 Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 15:11:12 +0200 Subject: [PATCH 04/17] Allow @Executable to be applied to Strings --- .../file/ExecutableConstraintValidator.java | 4 +- .../beanvalidators/file/ExecutableTest.java | 42 +++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) 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/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 From cfecb46fdb373187cba0537d4d885cf2c96a6bab Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 16:06:51 +0200 Subject: [PATCH 05/17] Allow @Existing to be applied to Strings --- .../file/ExistingConstraintValidator.java | 4 +- .../beanvalidators/file/ExistingTest.java | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) 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/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 From c151136bc3e05e32f75e98b1e4c2119430f7e3c6 Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 16:16:27 +0200 Subject: [PATCH 06/17] Allow @File to be applied to Strings --- .../file/FileConstraintValidator.java | 4 +-- .../britter/beanvalidators/file/FileTest.java | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) 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/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 From 52e7c9d610f762a774264d7150da5cf724e9691e Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 16:22:26 +0200 Subject: [PATCH 07/17] Allow @Hidden to be applied to Strings --- .../file/HiddenConstraintValidator.java | 4 +- .../beanvalidators/file/HiddenTest.java | 45 +++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) 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/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 From 68a0b2f2cc5667660a7761c0ff4f1a7d0d130f7c Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 16:28:39 +0200 Subject: [PATCH 08/17] Allow @NotAbsolute to be applied to Strings --- .../file/NotAbsoluteConstraintValidator.java | 4 +-- .../beanvalidators/file/NotAbsoluteTest.java | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) 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/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 From a0c635d3c4c874dcaf090b38a5cc6d4026d0449f Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 16:33:43 +0200 Subject: [PATCH 09/17] Allow @NotDirectoy to be applied to Strings --- .../file/NotDirectoryConstraintValidator.java | 4 +-- .../beanvalidators/file/NotDirectoryTest.java | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) 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/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 From ec91e8f2b44efa89b75079daa290f3262939efb7 Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 16:38:58 +0200 Subject: [PATCH 10/17] Allow @NotExecutable to be applied to Strings --- .../NotExecutableConstraintValidator.java | 4 +- .../file/NotExecutableTest.java | 49 +++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) 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/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 From 1824b19e5134adbd7b255305a52e426eb04d513e Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 16:46:03 +0200 Subject: [PATCH 11/17] Allow @NotExisting to be applied to Strings --- .../file/NotExistingConstraintValidator.java | 4 +- .../beanvalidators/file/NotExistingTest.java | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) 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/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 From f1500cdfccaee483f9e756a83fed888413b13e55 Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 16:49:56 +0200 Subject: [PATCH 12/17] Allow @NotFile to be applied to Strings --- .../file/NotFileConstraintValidator.java | 4 +- .../beanvalidators/file/NotFileTest.java | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) 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/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 From 3ee8ff596af3440baabfad5f1910a2bcb37e7825 Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 16:54:55 +0200 Subject: [PATCH 13/17] Allow @NotHidden to be applied to Strings --- .../file/NotHiddenConstraintValidator.java | 4 +- .../beanvalidators/file/NotHiddenTest.java | 45 +++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) 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/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 From 846fac573616825d5f85a11c714900c5405d0f28 Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 16:59:25 +0200 Subject: [PATCH 14/17] Allow @NotReadable to be applied to Strings --- .../file/NotReadableConstraintValidator.java | 4 +- .../beanvalidators/file/NotReadableTest.java | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) 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/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 From d39577f612061c4f3bcce3b0fb6557120d300bff Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 17:03:21 +0200 Subject: [PATCH 15/17] Allow @NotWritable to be applied to Strings --- .../file/NotWritableConstraintValidator.java | 4 +- .../beanvalidators/file/NotWritableTest.java | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+), 2 deletions(-) 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/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 From b8296997c14af4b53fcd143c4ec52d5feb9275d0 Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 17:07:09 +0200 Subject: [PATCH 16/17] Allow @Readable to be applied to Strings --- .../file/ReadableConstraintValidator.java | 4 +- .../beanvalidators/file/ReadableTest.java | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) 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/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 From a50bd2e7b79db364959577bb3ab2c3f901a2bf0a Mon Sep 17 00:00:00 2001 From: Benedikt Ritter Date: Sat, 1 Aug 2015 17:11:19 +0200 Subject: [PATCH 17/17] Allow @Wirtable to be applied to String --- .../file/WritableConstraintValidator.java | 4 +- .../beanvalidators/file/WritableTest.java | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) 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/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