View Javadoc
1   package org.junit.tests.experimental.theories.internal;
2   
3   import static org.hamcrest.CoreMatchers.hasItem;
4   import static org.hamcrest.CoreMatchers.hasItems;
5   import static org.junit.Assert.assertEquals;
6   import static org.junit.Assert.assertThat;
7   
8   import java.util.ArrayList;
9   import java.util.List;
10  
11  import org.junit.Test;
12  import org.junit.experimental.theories.DataPoint;
13  import org.junit.experimental.theories.DataPoints;
14  import org.junit.experimental.theories.FromDataPoints;
15  import org.junit.experimental.theories.ParameterSignature;
16  import org.junit.experimental.theories.PotentialAssignment;
17  import org.junit.experimental.theories.PotentialAssignment.CouldNotGenerateValueException;
18  import org.junit.experimental.theories.internal.SpecificDataPointsSupplier;
19  import org.junit.runners.model.TestClass;
20  
21  public class SpecificDataPointsSupplierTest {
22  
23      public static class TestClassWithNamedDataPoints {
24  
25          @DataPoints({"field", "named"})
26          public static String[] values = new String[] { "named field" };
27  
28          @DataPoints
29          public static String[] otherValues = new String[] { "other" };
30          
31          @DataPoints({"method", "named"})
32          public static String[] getValues() {
33              return new String[] { "named method" };
34          }
35          
36          @DataPoint({"single", "named"})
37          public static String singleValue = "named single value";
38          
39          @DataPoint
40          public static String otherSingleValue = "other value";
41          
42          @DataPoint({"singlemethod", "named"})
43          public static String getSingleValue() { 
44              return "named single method value";
45          }
46          
47          @DataPoint
48          public static String getSingleOtherValue() {
49              return "other single method value";
50          }
51           
52          @DataPoints
53          public static String[] getOtherValues() {
54              return new String[] { "other method" };
55          }
56      }
57  
58      @Test
59      public void shouldReturnOnlyTheNamedDataPoints() throws Throwable {
60          SpecificDataPointsSupplier supplier = new SpecificDataPointsSupplier(new TestClass(TestClassWithNamedDataPoints.class));
61  
62          List<PotentialAssignment> assignments = supplier.getValueSources(signature("methodWantingAllNamedStrings"));
63          List<String> assignedStrings = getStringValuesFromAssignments(assignments);
64  
65          assertEquals(4, assignedStrings.size());
66          assertThat(assignedStrings, hasItems("named field", "named method", "named single value", "named single method value"));
67      }
68      
69      @Test
70      public void shouldReturnOnlyTheNamedFieldDataPoints() throws Throwable {
71          SpecificDataPointsSupplier supplier = new SpecificDataPointsSupplier(new TestClass(TestClassWithNamedDataPoints.class));
72  
73          List<PotentialAssignment> assignments = supplier.getValueSources(signature("methodWantingNamedFieldString"));
74          List<String> assignedStrings = getStringValuesFromAssignments(assignments);
75  
76          assertEquals(1, assignedStrings.size());
77          assertThat(assignedStrings, hasItem("named field"));
78      }
79  
80      @Test
81      public void shouldReturnOnlyTheNamedMethodDataPoints() throws Throwable {
82          SpecificDataPointsSupplier supplier = new SpecificDataPointsSupplier(new TestClass(TestClassWithNamedDataPoints.class));
83  
84          List<PotentialAssignment> assignments = supplier.getValueSources(signature("methodWantingNamedMethodString"));
85          List<String> assignedStrings = getStringValuesFromAssignments(assignments);
86  
87          assertEquals(1, assignedStrings.size());
88          assertThat(assignedStrings, hasItem("named method"));
89      }
90      
91      @Test
92      public void shouldReturnOnlyTheNamedSingleFieldDataPoints() throws Throwable {
93          SpecificDataPointsSupplier supplier = new SpecificDataPointsSupplier(new TestClass(TestClassWithNamedDataPoints.class));
94  
95          List<PotentialAssignment> assignments = supplier.getValueSources(signature("methodWantingNamedSingleFieldString"));
96          List<String> assignedStrings = getStringValuesFromAssignments(assignments);
97  
98          assertEquals(1, assignedStrings.size());
99          assertThat(assignedStrings, hasItem("named single value"));
100     }
101 
102     @Test
103     public void shouldReturnOnlyTheNamedSingleMethodDataPoints() throws Throwable {
104         SpecificDataPointsSupplier supplier = new SpecificDataPointsSupplier(new TestClass(TestClassWithNamedDataPoints.class));
105 
106         List<PotentialAssignment> assignments = supplier.getValueSources(signature("methodWantingNamedSingleMethodString"));
107         List<String> assignedStrings = getStringValuesFromAssignments(assignments);
108 
109         assertEquals(1, assignedStrings.size());
110         assertThat(assignedStrings, hasItem("named single method value"));
111     }    
112     
113     @Test
114     public void shouldReturnNothingIfTheNamedDataPointsAreMissing() throws Throwable {
115         SpecificDataPointsSupplier supplier = new SpecificDataPointsSupplier(new TestClass(TestClassWithNamedDataPoints.class));
116 
117         List<PotentialAssignment> assignments = supplier.getValueSources(signature("methodWantingWrongNamedString"));
118         List<String> assignedStrings = getStringValuesFromAssignments(assignments);
119 
120         assertEquals(0, assignedStrings.size());
121     }
122 
123     private List<String> getStringValuesFromAssignments(List<PotentialAssignment> assignments) throws CouldNotGenerateValueException {
124         List<String> stringValues = new ArrayList<String>();
125         for (PotentialAssignment assignment : assignments) {
126             stringValues.add((String) assignment.getValue());
127         }
128         return stringValues;
129     }
130 
131     private ParameterSignature signature(String methodName) throws Exception {
132         return ParameterSignature.signatures(this.getClass().getMethod(methodName, String.class)).get(0);
133     }
134 
135     public void methodWantingAnyString(String input) {
136     }
137 
138     public void methodWantingNamedFieldString(@FromDataPoints("field") String input) {
139     }
140     
141     public void methodWantingNamedMethodString(@FromDataPoints("method") String input) {
142     }
143     
144     public void methodWantingNamedSingleFieldString(@FromDataPoints("single") String input) {
145     }
146     
147     public void methodWantingNamedSingleMethodString(@FromDataPoints("singlemethod") String input) {
148     }
149     
150     public void methodWantingAllNamedStrings(@FromDataPoints("named") String input) {
151     }
152 
153     public void methodWantingWrongNamedString(@FromDataPoints("invalid name") String input) {
154     }
155 
156 }