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.guard;
013:
014: import junit.framework.TestCase;
015: import net.sf.oval.ConstraintViolation;
016: import net.sf.oval.constraint.Length;
017: import net.sf.oval.constraint.NotNull;
018: import net.sf.oval.context.ConstructorParameterContext;
019: import net.sf.oval.exception.ConstraintsViolatedException;
020: import net.sf.oval.guard.Guard;
021:
022: /**
023: * @author Sebastian Thomschke
024: */
025: public class GuardingWithoutGuardedAnnotationTest extends TestCase {
026: public static class TestEntity {
027: @SuppressWarnings("unused")
028: @NotNull(message="NOT_NULL")
029: private String name = "";
030:
031: /**
032: * Constructor 1
033: *
034: * @param name
035: */
036: public TestEntity(@NotNull(message="NOT_NULL")
037: final String name) {
038: this .name = name;
039: }
040:
041: /**
042: * Constructor 2
043: *
044: * @param name
045: * @param bla
046: */
047: public TestEntity(final String name, final int bla) {
048: this .name = name;
049: }
050:
051: public void setName(@NotNull(message="NOT_NULL")
052: @Length(max=4,message="LENGTH")
053: final String name) {
054: this .name = name;
055: }
056: }
057:
058: public void testConstructorParameterConstraints() {
059: final Guard guard = new Guard();
060: guard.setInvariantsEnabled(TestEntity.class, true);
061: GuardingWithoutGuardedAnnotationAspect.aspectOf().setGuard(
062: guard);
063:
064: /*
065: * Testing Constructor 1
066: */
067: try {
068: new TestEntity(null);
069: fail();
070: } catch (final ConstraintsViolatedException e) {
071: final ConstraintViolation[] violations = e
072: .getConstraintViolations();
073: assertTrue(violations != null && violations.length == 1);
074: assertTrue(violations[0].getMessage().equals("NOT_NULL"));
075: assertTrue(violations[0].getContext() instanceof ConstructorParameterContext);
076: }
077:
078: new TestEntity("test");
079:
080: /*
081: * Testing Constructor 2
082: */
083: try {
084: new TestEntity(null, 100);
085: fail(); // invariant check on name fails
086: } catch (final ConstraintsViolatedException ex) {
087: // expected
088: }
089: }
090:
091: public void testMethodParameterConstraints() {
092: final Guard guard = new Guard();
093: guard.setInvariantsEnabled(TestEntity.class, true);
094: GuardingWithoutGuardedAnnotationAspect.aspectOf().setGuard(
095: guard);
096:
097: try {
098: final TestEntity t1 = new TestEntity("");
099: t1.setName(null);
100: fail();
101: } catch (final ConstraintsViolatedException e) {
102: final ConstraintViolation[] violations = e
103: .getConstraintViolations();
104: assertTrue(violations != null && violations.length > 0);
105: assertTrue(violations[0].getMessage().equals("NOT_NULL"));
106: }
107:
108: try {
109: final TestEntity t1 = new TestEntity("");
110: t1.setName("12345678");
111: fail();
112: } catch (final ConstraintsViolatedException e) {
113: final ConstraintViolation[] violations = e
114: .getConstraintViolations();
115: assertTrue(violations != null && violations.length > 0);
116: assertTrue(violations[0].getMessage().equals("LENGTH"));
117: }
118: }
119: }
|