Skip to content

Commit

Permalink
fixing issue vidageek#45 - Set final fields
Browse files Browse the repository at this point in the history
  • Loading branch information
jonasabreu committed Oct 31, 2009
1 parent 2102a28 commit 66be676
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 72 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import java.lang.reflect.Field;

import net.vidageek.mirror.dsl.Mirror;
import net.vidageek.mirror.fixtures.ChildFixture;
import net.vidageek.mirror.fixtures.FieldFixture;
import net.vidageek.mirror.fixtures.SuperClassFixture;
Expand Down Expand Up @@ -177,4 +178,12 @@ public void testSetAccessible(final ReflectionProvider r) {

}

@Theory
public void testSetFinalFields(final ReflectionProvider r) {
final FieldFixture fixture = new FieldFixture(0);
Field field = new Mirror(provider).on(FieldFixture.class).reflect().field("finalField");
r.getFieldReflectionProvider(fixture, FieldFixture.class, field).setValue(2);
Assert.assertEquals(2, new Mirror(provider).on(fixture).get().field("finalField"));
}

}
4 changes: 0 additions & 4 deletions src/main/java/net/vidageek/mirror/set/FieldSetterByField.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,6 @@ public FieldSetterByField(final ReflectionProvider provider, final Object target
throw new IllegalArgumentException("field declaring class (" + field.getDeclaringClass().getName()
+ ") doesn't match clazz " + clazz.getName());
}
if (Modifier.isFinal(field.getModifiers())) {
throw new MirrorException("Field " + field.getName() + " from class " + clazz.getName()
+ " cannot be set because it's final.");
}
this.provider = provider;
this.target = target;
this.clazz = clazz;
Expand Down
115 changes: 56 additions & 59 deletions src/test/java/net/vidageek/mirror/set/FieldSetterByFieldTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import junit.framework.Assert;
import net.vidageek.mirror.dsl.Mirror;
import net.vidageek.mirror.exception.MirrorException;
import net.vidageek.mirror.fixtures.ChildFixture;
import net.vidageek.mirror.fixtures.FieldFixture;
import net.vidageek.mirror.fixtures.SuperClassFixture;
Expand All @@ -23,87 +22,85 @@
*/
public class FieldSetterByFieldTest {

private ReflectionProvider provider;
private ReflectionProvider provider;

@Before
public void setup() {
provider = new DefaultMirrorReflectionProvider();
}
@Before
public void setup() {
provider = new DefaultMirrorReflectionProvider();
}

@Test(expected = IllegalArgumentException.class)
public void testThatThrowsExceptionIfClassIsNull() {
Field field = new Mirror(provider).on(FieldFixture.class).reflect().field("field");
@Test(expected = IllegalArgumentException.class)
public void testThatThrowsExceptionIfClassIsNull() {
Field field = new Mirror(provider).on(FieldFixture.class).reflect().field("field");

new FieldSetterByField(provider, new Object(), null, field);
}
new FieldSetterByField(provider, new Object(), null, field);
}

@Test(expected = IllegalArgumentException.class)
public void testThatThrowsExceptionIfFieldIsNull() {
new FieldSetterByField(provider, new Object(), FieldFixture.class, null);
}
@Test(expected = IllegalArgumentException.class)
public void testThatThrowsExceptionIfFieldIsNull() {
new FieldSetterByField(provider, new Object(), FieldFixture.class, null);
}

/*
* Test to avoid bug #57, descripted at
* http://bugs.vidageek.net/bug.php?op=show&bugid=57
*/
@Test(expected = IllegalArgumentException.class)
public void testThatThrowsExceptionIfFieldDeclaringClassIsNotAssignableFromClass() {
Field field = new Mirror(provider).on(ChildFixture.class).reflect().field("integer");
/*
* Test to avoid bug #57, descripted at
* http://bugs.vidageek.net/bug.php?op=show&bugid=57
*/
@Test(expected = IllegalArgumentException.class)
public void testThatThrowsExceptionIfFieldDeclaringClassIsNotAssignableFromClass() {
Field field = new Mirror(provider).on(ChildFixture.class).reflect().field("integer");

new FieldSetterByField(provider, new Object(), SuperClassFixture.class, field);
}
new FieldSetterByField(provider, new Object(), SuperClassFixture.class, field);
}

@Test(expected = MirrorException.class)
public void testThatThrowsExceptionIfFieldIsFinalAndStatic() {
new FieldSetterByField(provider, new FieldFixture(0), FieldFixture.class, new Mirror(provider)
.on(FieldFixture.class).reflect().field("STATIC_FINAL_FIELD"));
}
@Test
public void testThatCanSetFieldIfFieldIsFinal() {
final FieldFixture fixture = new FieldFixture(0);
new FieldSetterByField(provider, fixture, FieldFixture.class, new Mirror(provider)
.on(FieldFixture.class)
.reflect()
.field("finalField")).withValue(2);
Assert.assertEquals(2, new Mirror(new DefaultMirrorReflectionProvider()).on(fixture).get().field("finalField"));
}

@Test(expected = MirrorException.class)
public void testThatThrowsExceptionIfFieldIsFinal() {
new FieldSetterByField(provider, new FieldFixture(0), FieldFixture.class, new Mirror(provider)
.on(FieldFixture.class).reflect().field("finalField"));
}
@Test(expected = IllegalArgumentException.class)
public void testThatThrowsIllegalArgumentExceptionIfValueTypeDoesntMatchFieldType() {

@Test(expected = IllegalArgumentException.class)
public void testThatThrowsIllegalArgumentExceptionIfValueTypeDoesntMatchFieldType() {
Field field = new Mirror(provider).on(FieldFixture.class).reflect().field("field");

Field field = new Mirror(provider).on(FieldFixture.class).reflect().field("field");
new FieldSetterByField(provider, new FieldFixture(0), FieldFixture.class, field).withValue("string");

new FieldSetterByField(provider, new FieldFixture(0), FieldFixture.class, field).withValue("string");
}

}
@Test
public void testThatDoesntThrowsExceptionIfTypeIsAssignableFromValue() {

@Test
public void testThatDoesntThrowsExceptionIfTypeIsAssignableFromValue() {
Field field = new Mirror(provider).on(FieldFixture.class).reflect().field("superType");

Field field = new Mirror(provider).on(FieldFixture.class).reflect().field("superType");
new FieldSetterByField(provider, new FieldFixture(0), FieldFixture.class, field).withValue("string");

new FieldSetterByField(provider, new FieldFixture(0), FieldFixture.class, field).withValue("string");
}

}
@Test
public void testThatCanSetNullValueOnReferenceField() {
Mirror mirror = new Mirror(provider);
Field field = mirror.on(FieldFixture.class).reflect().field("referenceField");

@Test
public void testThatCanSetNullValueOnReferenceField() {
Mirror mirror = new Mirror(provider);
Field field = mirror.on(FieldFixture.class).reflect().field("referenceField");
FieldFixture target = new FieldFixture(0);
target.referenceField = new Object();

FieldFixture target = new FieldFixture(0);
target.referenceField = new Object();
new FieldSetterByField(provider, target, FieldFixture.class, field).withValue(null);

new FieldSetterByField(provider, target, FieldFixture.class, field).withValue(null);
Assert.assertEquals(null, target.referenceField);

Assert.assertEquals(null, target.referenceField);
}

}
@Test(expected = IllegalArgumentException.class)
public void testThatCantSetNullValueOnPrimitiveField() {

@Test(expected = IllegalArgumentException.class)
public void testThatCantSetNullValueOnPrimitiveField() {
Field field = new Mirror(provider).on(FieldFixture.class).reflect().field("field");

Field field = new Mirror(provider).on(FieldFixture.class).reflect().field("field");
new FieldSetterByField(provider, new FieldFixture(0), FieldFixture.class, field).withValue(null);

new FieldSetterByField(provider, new FieldFixture(0), FieldFixture.class, field).withValue(null);

}
}

}
16 changes: 7 additions & 9 deletions src/test/java/net/vidageek/mirror/set/FieldSetterByNameTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package net.vidageek.mirror.set;

import net.vidageek.mirror.exception.MirrorException;
import junit.framework.Assert;
import net.vidageek.mirror.dsl.Mirror;
import net.vidageek.mirror.fixtures.FieldFixture;
import net.vidageek.mirror.provider.ReflectionProvider;
import net.vidageek.mirror.provider.java.DefaultMirrorReflectionProvider;
Expand Down Expand Up @@ -36,13 +37,10 @@ public void testThatThrowsExceptionIfClassIsNull() {
new FieldSetterByName(provider, "field", new Object(), null);
}

@Test(expected = MirrorException.class)
public void testThatThrowsExceptionIfFieldIsFinalAndStatic() {
new FieldSetterByName(provider, "STATIC_FINAL_FIELD", new FieldFixture(0), FieldFixture.class).withValue(0);
}

@Test(expected = MirrorException.class)
public void testThatThrowsExceptionIfFieldIsFinal() {
new FieldSetterByName(provider, "finalField", new FieldFixture(0), FieldFixture.class).withValue(0);
@Test
public void testThatCanSetFieldIfFieldIsFinal() {
final FieldFixture fixture = new FieldFixture(0);
new FieldSetterByName(provider, "finalField", fixture, FieldFixture.class).withValue(2);
Assert.assertEquals(2, new Mirror(provider).on(fixture).get().field("finalField"));
}
}

0 comments on commit 66be676

Please sign in to comment.