Skip to content
This repository was archived by the owner on Dec 15, 2021. It is now read-only.

Commit 47e29c5

Browse files
committed
Merge pull request #18 from wilkinsona/master
Tests to reproduce the problem described in SPR-9155
2 parents dbf678c + d2ca864 commit 47e29c5

File tree

12 files changed

+321
-0
lines changed

12 files changed

+321
-0
lines changed

SPR-9155/pom.xml

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
<groupId>org.springframework.issues</groupId>
5+
<artifactId>SPR-9155</artifactId>
6+
<version>1.0-SNAPSHOT</version>
7+
<packaging>jar</packaging>
8+
<dependencies>
9+
<dependency>
10+
<groupId>org.springframework</groupId>
11+
<artifactId>spring-context</artifactId>
12+
<version>3.2.0.BUILD-SNAPSHOT</version>
13+
</dependency>
14+
<dependency>
15+
<groupId>log4j</groupId>
16+
<artifactId>log4j</artifactId>
17+
<version>1.2.16</version>
18+
</dependency>
19+
<dependency>
20+
<groupId>junit</groupId>
21+
<artifactId>junit</artifactId>
22+
<version>4.8</version>
23+
<scope>test</scope>
24+
</dependency>
25+
</dependencies>
26+
<repositories>
27+
<repository>
28+
<id>spring-maven-snapshot</id>
29+
<name>Springframework Maven Snapshot Repository</name>
30+
<url>http://repo.springsource.org/snapshot</url>
31+
<snapshots><enabled>true</enabled></snapshots>
32+
</repository>
33+
</repositories>
34+
<properties>
35+
<project.build.sourceEncoding>UTF8</project.build.sourceEncoding>
36+
</properties>
37+
<build>
38+
<plugins>
39+
<plugin>
40+
<artifactId>maven-compiler-plugin</artifactId>
41+
<version>2.3.2</version>
42+
<configuration>
43+
<source>1.6</source>
44+
<target>1.6</target>
45+
</configuration>
46+
</plugin>
47+
<plugin>
48+
<artifactId>maven-surefire-plugin</artifactId>
49+
<version>2.7.2</version>
50+
<configuration>
51+
<includes>
52+
<include>**/*Tests.java</include>
53+
</includes>
54+
<excludes>
55+
<exclude>**/*Abstract*.java</exclude>
56+
</excludes>
57+
</configuration>
58+
</plugin>
59+
</plugins>
60+
</build>
61+
</project>
62+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.springframework.issues;
2+
3+
import java.util.Set;
4+
5+
public abstract class Alpha {
6+
7+
private final Bravo bravo;
8+
9+
private final Set<Charlie> charlie;
10+
11+
private final Set<Delta> delta;
12+
13+
protected Alpha(Bravo bravo, Set<Charlie> charlie, Set<Delta> delta) {
14+
this.bravo = bravo;
15+
this.charlie = charlie;
16+
this.delta = delta;
17+
}
18+
19+
public final Bravo getBravo() {
20+
return bravo;
21+
}
22+
23+
public final Set<Charlie> getCharlie() {
24+
return charlie;
25+
}
26+
27+
public final Set<Delta> getDelta() {
28+
return delta;
29+
}
30+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.springframework.issues;
2+
3+
public class Bravo {
4+
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.springframework.issues;
2+
3+
public class Charlie {
4+
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.springframework.issues;
2+
3+
public class Delta {
4+
5+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.springframework.issues;
2+
3+
import java.util.Collections;
4+
import java.util.Set;
5+
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
8+
public final class FourConstructorsAlpha extends Alpha {
9+
10+
@Autowired(required=false)
11+
public FourConstructorsAlpha(Bravo bravo) {
12+
this(bravo, Collections.<Charlie>emptySet(), Collections.<Delta>emptySet());
13+
}
14+
15+
@Autowired(required=false)
16+
public FourConstructorsAlpha(Bravo bravo, Set<Charlie> charlies) {
17+
this(bravo, charlies, Collections.<Delta>emptySet());
18+
}
19+
20+
@Autowired(required=false)
21+
public FourConstructorsAlpha(Set<Delta> deltas, Bravo bravo) {
22+
this(bravo, Collections.<Charlie>emptySet(), deltas);
23+
}
24+
25+
@Autowired(required=false)
26+
public FourConstructorsAlpha(Bravo bravo, Set<Charlie> charlies, Set<Delta> deltas) {
27+
super(bravo, charlies, deltas);
28+
}
29+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package org.springframework.issues;
2+
3+
import java.util.Set;
4+
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
7+
public final class OneConstructorAlpha extends Alpha {
8+
9+
@Autowired(required=false)
10+
public OneConstructorAlpha(Bravo bravo, Set<Charlie> charlies, Set<Delta> deltas) {
11+
super(bravo, charlies, deltas);
12+
}
13+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.springframework.issues;
2+
3+
import java.util.Collections;
4+
import java.util.Set;
5+
6+
import org.springframework.beans.factory.annotation.Autowired;
7+
8+
public final class TwoConstructorsAlpha extends Alpha {
9+
10+
@Autowired(required=false)
11+
public TwoConstructorsAlpha(Bravo bravo) {
12+
this(bravo, Collections.<Charlie>emptySet(), Collections.<Delta>emptySet());
13+
}
14+
15+
@Autowired(required=false)
16+
public TwoConstructorsAlpha(Bravo bravo, Set<Charlie> charlies, Set<Delta> deltas) {
17+
super(bravo, charlies, deltas);
18+
}
19+
}

SPR-9155/src/main/resources/.gitignore

Whitespace-only changes.
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package org.springframework.issues;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertNotNull;
5+
6+
import org.junit.Test;
7+
import org.springframework.context.support.GenericXmlApplicationContext;
8+
9+
/**
10+
* Unit test that reproduces an issue reported against SPR JIRA. @Test methods within
11+
* need not pass with the green bar! Rather they should fail in such a way that
12+
* demonstrates the reported issue.
13+
*/
14+
public class ReproTests {
15+
16+
@Test
17+
public void singleConstructorNoCharlieNoDelta() {
18+
Alpha alpha = createAndRefreshApplicationContext("one-constructor");
19+
assertNotNull(alpha.getBravo());
20+
}
21+
22+
@Test
23+
public void singleConstructorJustCharlie() {
24+
Alpha alpha = createAndRefreshApplicationContext("one-constructor", "charlie");
25+
assertJustCharlie(alpha);
26+
}
27+
28+
@Test
29+
public void singleConstructorJustDelta() {
30+
Alpha alpha = createAndRefreshApplicationContext("one-constructor", "delta");
31+
assertJustDelta(alpha);
32+
}
33+
34+
@Test
35+
public void singleConstructorCharlieAndDelta() {
36+
Alpha alpha = createAndRefreshApplicationContext("one-constructor", "charlie", "delta");
37+
assertCharlieAndDelta(alpha);
38+
}
39+
40+
@Test
41+
public void twoConstructorsNoCharlieNoDelta() {
42+
Alpha alpha = createAndRefreshApplicationContext("two-constructors");
43+
assertNotNull(alpha.getBravo());
44+
}
45+
46+
@Test
47+
public void twoConstructorsJustCharlie() {
48+
Alpha alpha = createAndRefreshApplicationContext("two-constructors", "charlie");
49+
assertJustCharlie(alpha);
50+
}
51+
52+
@Test
53+
public void twoConstructorsJustDelta() {
54+
Alpha alpha = createAndRefreshApplicationContext("two-constructors", "delta");
55+
assertJustDelta(alpha);
56+
}
57+
58+
@Test
59+
public void twoConstructorsCharlieAndDelta() {
60+
Alpha alpha = createAndRefreshApplicationContext("two-constructors", "charlie", "delta");
61+
assertCharlieAndDelta(alpha);
62+
}
63+
64+
@Test
65+
public void fourConstructorsNoCharlieNoDelta() {
66+
Alpha alpha = createAndRefreshApplicationContext("four-constructors");
67+
assertNotNull(alpha.getBravo());
68+
}
69+
70+
@Test
71+
public void fourConstructorsJustCharlie() {
72+
Alpha alpha = createAndRefreshApplicationContext("four-constructors", "charlie");
73+
assertJustCharlie(alpha);
74+
}
75+
76+
@Test
77+
public void fourConstructorsJustDelta() {
78+
Alpha alpha = createAndRefreshApplicationContext("four-constructors", "delta");
79+
assertJustDelta(alpha);
80+
}
81+
82+
@Test
83+
public void fourConstructorsCharlieAndDelta() {
84+
Alpha alpha = createAndRefreshApplicationContext("four-constructors", "charlie", "delta");
85+
assertCharlieAndDelta(alpha);
86+
}
87+
88+
private void assertJustDelta(Alpha alpha) {
89+
assertNotNull(alpha.getBravo());
90+
assertNotNull(alpha.getDelta());
91+
assertEquals(1, alpha.getDelta().size());
92+
}
93+
94+
private void assertJustCharlie(Alpha alpha) {
95+
assertNotNull(alpha.getBravo());
96+
assertNotNull(alpha.getCharlie());
97+
assertEquals(1, alpha.getCharlie().size());
98+
}
99+
100+
private void assertCharlieAndDelta(Alpha alpha) {
101+
assertJustCharlie(alpha);
102+
assertNotNull(alpha.getDelta());
103+
assertEquals(1, alpha.getDelta().size());
104+
}
105+
106+
private Alpha createAndRefreshApplicationContext(String... profiles) {
107+
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
108+
ctx.getEnvironment().setActiveProfiles(profiles);
109+
ctx.load("classpath:org/springframework/issues/ReproTests-context.xml");
110+
ctx.refresh();
111+
112+
return ctx.getBean(Alpha.class);
113+
}
114+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
log4j.rootCategory=ERROR, stdout
2+
3+
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
4+
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
5+
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
6+
7+
log4j.category.org.springframework=WARN
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?xml version="1.0" encoding="ISO-8859-1"?>
2+
<beans xmlns="http://www.springframework.org/schema/beans"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xmlns:context="http://www.springframework.org/schema/context"
5+
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
6+
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
7+
8+
<context:annotation-config/>
9+
10+
<bean class="org.springframework.issues.Bravo"/>
11+
12+
<beans profile="one-constructor">
13+
<bean class="org.springframework.issues.OneConstructorAlpha"/>
14+
</beans>
15+
16+
<beans profile="two-constructors">
17+
<bean class="org.springframework.issues.TwoConstructorsAlpha"/>
18+
</beans>
19+
20+
<beans profile="four-constructors">
21+
<bean class="org.springframework.issues.FourConstructorsAlpha"/>
22+
</beans>
23+
24+
<beans profile="charlie">
25+
<bean class="org.springframework.issues.Charlie"/>
26+
</beans>
27+
28+
<beans profile="delta">
29+
<bean class="org.springframework.issues.Delta"/>
30+
</beans>
31+
32+
</beans>

0 commit comments

Comments
 (0)