1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 package org.carrot2.labs.test;
38
39 import com.google.common.collect.Lists;
40 import com.google.common.collect.Sets;
41
42 import java.util.ArrayList;
43 import java.util.Iterator;
44 import java.util.List;
45 import java.util.Set;
46
47 import org.assertj.core.api.Assertions;
48 import org.assertj.core.api.Fail;
49 import org.carrot2.labs.smartsprites.message.Message;
50 import org.carrot2.labs.smartsprites.message.Message.MessageLevel;
51
52
53
54
55 public class MessageListAssertion {
56
57
58 private List<Message> actual;
59
60
61
62
63
64
65
66 public MessageListAssertion(List<Message> actual) {
67 this.actual = actual;
68 }
69
70
71
72
73
74
75
76
77
78 public MessageListAssertion contains(Message... messages) {
79 final Set<Message> toCheck = Sets.newHashSet(messages);
80 for (int i = 0; i < actual.size(); i++) {
81 for (Iterator<Message> it = toCheck.iterator(); it.hasNext();) {
82 final Message message = it.next();
83 try {
84 org.carrot2.labs.test.Assertions.assertThat(actual.get(i)).as("message[" + i + "]")
85 .isEquivalentTo(message);
86 it.remove();
87
88 } catch (AssertionError e) {
89
90 }
91 }
92 }
93
94 if (!toCheck.isEmpty()) {
95 Fail.fail("Message list did not contain " + toCheck.size() + " of the required messages");
96 }
97
98 return this;
99 }
100
101
102
103
104
105
106
107
108
109 public MessageListAssertion isEquivalentTo(List<Message> expected) {
110 Assertions.assertThat(actual).hasSize(expected.size());
111 for (int i = 0; i < actual.size(); i++) {
112 org.carrot2.labs.test.Assertions.assertThat(actual.get(i)).as("message[" + i + "]")
113 .isEquivalentTo(expected.get(i));
114 }
115 return this;
116 }
117
118
119
120
121
122
123
124
125
126
127
128 public MessageListAssertion isEquivalentTo(MessageLevel onlyLevel, List<Message> expected) {
129 final List<Message> filtered = new ArrayList<>();
130 for (Message message : actual) {
131 if (message.level == onlyLevel) {
132 filtered.add(message);
133 }
134 }
135
136 final List<Message> actualBackup = actual;
137 actual = filtered;
138 isEquivalentTo(expected);
139 actual = actualBackup;
140
141 return this;
142 }
143
144
145
146
147
148
149
150
151
152 public MessageListAssertion isEquivalentTo(Message... messages) {
153 return isEquivalentTo(Lists.newArrayList(messages));
154 }
155
156
157
158
159
160
161
162
163
164
165
166 public MessageListAssertion isEquivalentTo(MessageLevel onlyLevel, Message... messages) {
167 return isEquivalentTo(onlyLevel, Lists.newArrayList(messages));
168 }
169
170
171
172
173
174
175
176
177
178 public MessageListAssertion doesNotHaveMessagesOfLevel(MessageLevel level) {
179 int levelCount = 0;
180 final StringBuilder messages = new StringBuilder();
181 for (Message message : actual) {
182
183 if (message.level.equals(MessageLevel.STATUS)) {
184 continue;
185 }
186
187 if (MessageLevel.COMPARATOR.compare(message.level, level) >= 0) {
188 levelCount++;
189 messages.append(message.toString());
190 messages.append(", ");
191 }
192 }
193
194 if (levelCount > 0) {
195 Fail.fail("Found " + levelCount + " " + level.name() + "+ messages: "
196 + messages.substring(0, messages.length() - 2));
197 }
198
199 return this;
200 }
201
202
203
204
205
206
207 public MessageListAssertion isEmpty() {
208 Assertions.assertThat(actual).isEmpty();
209 return this;
210 }
211 }