##### Coverage Report - org.jbehave.core.model.OutcomesTable

Classes in this File | Line Coverage | Branch Coverage | Complexity
OutcomesTable |
100% | 37/37
100% | 12/12
| 1.35;1.35
OutcomesTable$Outcome |
100% | 11/11
N/A | N/A
| 1.35;1.35
OutcomesTable$OutcomesFailed |
100% | 4/4
N/A | N/A
| 1.35;1.35

1 |  |
     package org.jbehave.core.model;
2 |  |
3 |  |
     import java.util.ArrayList;
4 |  |
     import java.util.Iterator;
5 |  |
     import java.util.List;
6 |  |
7 |  |
     import org.apache.commons.lang.builder.ToStringBuilder;
8 |  |
     import org.apache.commons.lang.builder.ToStringStyle;
9 |  |
     import org.hamcrest.Matcher;
10 |  |
     import org.jbehave.core.configuration.Keywords;
11 |  |
     import org.jbehave.core.failures.UUIDExceptionWrapper;
12 |  |
     import org.jbehave.core.i18n.LocalizedKeywords;
13 |  |
14 |  |
     public class OutcomesTable {
15 |  |
16 |  |
         private static final String NEWLINE = "\n";
17 |  |
         private static final String HEADER_SEPARATOR = "|";
18 |  |
         private static final String VALUE_SEPARATOR = "|";
19 |  |
             private static final String DEFAULT_DATE_FORMAT = "EEE MMM dd hh:mm:ss zzz yyyy";
20 |  |
21 |  |
         private final Keywords keywords;
22 |  |
             private final String dateFormat;
23 | 26 |
         private final List<Outcome<?>> outcomes = new ArrayList<Outcome<?>>();
24 | 26 |
         private final List<Outcome<?>> failedOutcomes = new ArrayList<Outcome<?>>();
25 |  |
         private UUIDExceptionWrapper failureCause;
26 |  |
27 |  |
         public OutcomesTable() {
28 | 8 |
             this(new LocalizedKeywords());
29 | 8 |
         }
30 |  |
31 |  |
         public OutcomesTable(Keywords keywords) {
32 | 8 |
             this(keywords, DEFAULT_DATE_FORMAT);
33 | 8 |
         }
34 |  |
35 | 26 |
         public OutcomesTable(Keywords keywords, String dateFormat) {
36 | 26 |
             this.keywords = keywords;
37 | 26 |
                     this.dateFormat = dateFormat;
38 | 26 |
         }
39 |  |
40 |  |
         public <T> void addOutcome(String description, T value, Matcher<T> matcher) {
41 | 43 |
             outcomes.add(new Outcome<T>(description, value, matcher));
42 | 43 |
         }
43 |  |
44 |  |
         public void verify() {
45 | 22 |
             boolean failed = false;
46 | 22 |
             failedOutcomes.clear();
47 | 22 |
             for (Outcome<?> outcome : outcomes) {
48 | 24 |
                 if (!outcome.isVerified()) {
49 | 21 |
                     failedOutcomes.add(outcome);
50 | 21 |
                     failed = true;
51 | 21 |
                     break;
52 |  |
                 }
53 |  |
             }
54 | 22 |
             if (failed) {
55 | 21 |
                 failureCause = new UUIDExceptionWrapper(new OutcomesFailed(this));
56 | 21 |
                 throw failureCause;
57 |  |
             }
58 | 1 |
         }
59 |  |
60 |  |
         public UUIDExceptionWrapper failureCause() {
61 | 20 |
             return failureCause;
62 |  |
         }
63 |  |
64 |  |
         public List<Outcome<?>> getOutcomes() {
65 | 18 |
             return outcomes;
66 |  |
         }
67 |  |
68 |  |
         public List<Outcome<?>> getFailedOutcomes() {
69 | 2 |
             return failedOutcomes;
70 |  |
         }
71 |  |
72 |  |
         public List<String> getOutcomeFields() {
73 | 16 |
             return keywords.outcomeFields();
74 |  |
         }
75 |  |
76 |  |
         public String getDateFormat(){
77 | 47 |
                 return dateFormat;
78 |  |
         }
79 |  |
80 |  |
         public String asString() {
81 | 1 |
             StringBuilder sb = new StringBuilder();
82 | 1 |
             for (Iterator<String> iterator = getOutcomeFields().iterator(); iterator.hasNext();) {
83 | 4 |
                 sb.append(HEADER_SEPARATOR).append(iterator.next());
84 | 4 |
                 if (!iterator.hasNext()) {
85 | 1 |
                     sb.append(HEADER_SEPARATOR).append(NEWLINE);
86 |  |
                 }
87 |  |
             }
88 | 1 |
             for (Outcome<?> outcome : outcomes) {
89 | 2 |
                 sb.append(VALUE_SEPARATOR).append(outcome.getDescription()).append(VALUE_SEPARATOR).append(
90 |  |
                         outcome.getValue()).append(VALUE_SEPARATOR).append(outcome.getMatcher()).append(VALUE_SEPARATOR)
91 |  |
                         .append(outcome.isVerified()).append(VALUE_SEPARATOR).append(NEWLINE);
92 |  |
             }
93 | 1 |
             return sb.toString();
94 |  |
         }
95 |  |
96 |  |
         @Override
97 |  |
         public String toString() {
98 | 1 |
             return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
99 |  |
         }
100 |  |
101 |  |
         public static class Outcome<T> {
102 |  |
103 |  |
             private final String description;
104 |  |
             private final T value;
105 |  |
             private final Matcher<T> matcher;
106 |  |
             private final boolean verified;
107 |  |
108 | 43 |
             public Outcome(String description, T value, Matcher<T> matcher) {
109 | 43 |
                 this.description = description;
110 | 43 |
                 this.value = value;
111 | 43 |
                 this.matcher = matcher;
112 | 43 |
                 this.verified = matcher.matches(value);
113 | 43 |
             }
114 |  |
115 |  |
             public String getDescription() {
116 | 32 |
                 return description;
117 |  |
             }
118 |  |
119 |  |
             public T getValue() {
120 | 32 |
                 return value;
121 |  |
             }
122 |  |
123 |  |
             public Matcher<T> getMatcher() {
124 | 31 |
                 return matcher;
125 |  |
             }
126 |  |
127 |  |
             public boolean isVerified() {
128 | 80 |
                 return verified;
129 |  |
             }
130 |  |
131 |  |
             @Override
132 |  |
             public String toString() {
133 | 2 |
                 return ToStringBuilder.reflectionToString(this, ToStringStyle.SHORT_PREFIX_STYLE);
134 |  |
             }
135 |  |
         }
136 |  |
137 |  |
         @SuppressWarnings("serial")
138 |  |
         public static class OutcomesFailed extends UUIDExceptionWrapper {
139 |  |
             private OutcomesTable outcomes;
140 |  |
141 | 22 |
             public OutcomesFailed(OutcomesTable outcomes) {
142 | 22 |
                 this.outcomes = outcomes;
143 | 22 |
             }
144 |  |
145 |  |
             public OutcomesTable outcomesTable() {
146 | 22 |
                 return outcomes;
147 |  |
             }
148 |  |
149 |  |
         }
150 |  |
151 |  |
     }