001: /*******************************************************************************
002: * Portions created by Sebastian Thomschke are copyright (c) 2005-2007 Sebastian
003: * Thomschke.
004: *
005: * All Rights Reserved. This program and the accompanying materials
006: * are made available under the terms of the Eclipse Public License v1.0
007: * which accompanies this distribution, and is available at
008: * http://www.eclipse.org/legal/epl-v10.html
009: *
010: * Contributors:
011: * Sebastian Thomschke - initial implementation.
012: *******************************************************************************/package net.sf.oval.test.validator;
013:
014: import java.util.List;
015:
016: import junit.framework.TestCase;
017: import net.sf.oval.ConstraintViolation;
018: import net.sf.oval.Validator;
019: import net.sf.oval.configuration.annotation.IsInvariant;
020: import net.sf.oval.constraint.Length;
021: import net.sf.oval.constraint.NotNull;
022: import net.sf.oval.exception.InvalidConfigurationException;
023: import net.sf.oval.exception.ValidationFailedException;
024: import net.sf.oval.guard.SuppressOValWarnings;
025:
026: /**
027: * @author Sebastian Thomschke
028: */
029: public class InvariantMethodConstraintsValidationTest extends TestCase {
030: public static class TestEntity {
031: public String name;
032:
033: @IsInvariant
034: @NotNull(message="NOT_NULL")
035: @Length(max=4,message="LENGTH")
036: public String getName() {
037: return name;
038: }
039: }
040:
041: public static class TestEntityInvalidConfig extends TestEntity {
042: /**
043: * the @NotNull annotation should lead to a "OVal API usage violation 5" warning by the ApiUsageAuditor
044: * because class is not guarded
045: */
046: public TestEntityInvalidConfig(@NotNull
047: final String defaultValue) {
048: //
049: }
050:
051: /**
052: * the @NotNull annotation should lead to a "OVal API usage violation 2" warning by the ApiUsageAuditor
053: * because class is not guarded
054: */
055: @NotNull
056: public String doSomething(final String value) {
057: return null;
058: }
059:
060: /**
061: * the @NotNull annotation should lead to a "OVal API usage violation 5" warning by the ApiUsageAuditor
062: * because class is not guarded
063: */
064: public String doSomething(final String value, @NotNull
065: final String defaultValue) {
066: return null;
067: }
068:
069: /**
070: * the @NotNull annotation should not lead to a "OVal API usage violation 2" warning by the ApiUsageAuditor,
071: */
072: @NotNull
073: @SuppressOValWarnings
074: public String doSomething2(final String value) {
075: return null;
076: }
077:
078: /**
079: * the @NotNull annotation should lead to a "OVal API usage violation 3" warning by the ApiUsageAuditor
080: * because @IsInvariant is missing
081: */
082: @NotNull
083: public String getSomething() {
084: return null;
085: }
086: }
087:
088: public void testMethodReturnValueConstraintValidation() {
089: final Validator validator = new Validator();
090:
091: {
092: final TestEntity t = new TestEntity();
093:
094: List<ConstraintViolation> violations = validator
095: .validate(t);
096: assertTrue(violations.size() == 1);
097: assertTrue(violations.get(0).getMessage()
098: .equals("NOT_NULL"));
099:
100: t.name = "wqerwqer";
101: violations = validator.validate(t);
102: assertTrue(violations.size() == 1);
103: assertTrue(violations.get(0).getMessage().equals("LENGTH"));
104: }
105:
106: // Invalid Config Exception test
107: {
108: try {
109: final TestEntityInvalidConfig t = new TestEntityInvalidConfig(
110: null);
111: validator.validate(t);
112: fail();
113: } catch (final ValidationFailedException e) {
114: assert e.getCause() instanceof InvalidConfigurationException;
115: }
116: }
117: }
118: }
|