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 package org.apache.hc.client5.http;
28
29 import java.util.ArrayList;
30 import java.util.Arrays;
31 import java.util.Collection;
32 import java.util.List;
33 import java.util.Objects;
34
35 import org.apache.hc.core5.http.NameValuePair;
36 import org.hamcrest.BaseMatcher;
37 import org.hamcrest.Description;
38 import org.hamcrest.Matcher;
39
40 public class NameValuePairsMatcher extends BaseMatcher<Collection<? extends NameValuePair>> {
41
42 private final List<? extends NameValuePair> expectedNameValuePairList;
43
44 public NameValuePairsMatcher(final List<? extends NameValuePair> nameValuePairList) {
45 this.expectedNameValuePairList = nameValuePairList;
46 }
47
48 @Override
49 public boolean matches(final Object item) {
50 if (item instanceof Collection<?>) {
51 final Collection<?> collection = (Collection<?>) item;
52 int i = 0;
53 for (final Object obj : collection) {
54 if (obj instanceof NameValuePair) {
55 final NameValuePair nvp1 = (NameValuePair) obj;
56 final NameValuePair nvp2 = expectedNameValuePairList.get(i);
57 if (!nvp1.getName().equalsIgnoreCase(nvp2.getName())
58 || !Objects.equals(nvp1.getValue(), nvp2.getValue())) {
59 return false;
60 }
61 } else {
62 return false;
63 }
64 i++;
65 }
66 return true;
67 }
68 return false;
69 }
70
71 @Override
72 public void describeTo(final Description description) {
73 description.appendText("same name/value pairs as ").appendValueList("[", ", ", "]", expectedNameValuePairList);
74 }
75
76 public static Matcher<Collection<? extends NameValuePair>> same(final Collection<? extends NameValuePair> nameValuePairs) {
77 return new NameValuePairsMatcher(new ArrayList<>(nameValuePairs));
78 }
79
80 public static Matcher<Collection<? extends NameValuePair>> same(final NameValuePair... nameValuePairs) {
81 return new NameValuePairsMatcher(Arrays.asList(nameValuePairs));
82 }
83
84 }