1/*
2 * Copyright 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.mediaframeworktest.helpers;
17
18import org.hamcrest.BaseMatcher;
19import org.hamcrest.Description;
20import org.hamcrest.Factory;
21import org.hamcrest.Matcher;
22
23import java.util.Arrays;
24import java.util.Collection;
25import java.util.Objects;
26
27/**
28 * A {@link Matcher} class for checking if value contained in a {@link Collection} or array.
29 */
30/**
31 * (non-Javadoc)
32 * @see android.hardware.camera2.cts.helpers.InMatcher
33 */
34public class InMatcher<T> extends BaseMatcher<T> {
35
36    protected Collection<T> mValues;
37
38    public InMatcher(Collection<T> values) {
39        Preconditions.checkNotNull("values", values);
40        mValues = values;
41    }
42
43    public InMatcher(T... values) {
44        Preconditions.checkNotNull(values);
45        mValues = Arrays.asList(values);
46    }
47
48    @SuppressWarnings("unchecked")
49    @Override
50    public boolean matches(Object o) {
51        T obj = (T) o;
52        for (T elem : mValues) {
53            if (Objects.equals(o, elem)) {
54                return true;
55            }
56        }
57        return false;
58    }
59
60    @Override
61    public void describeTo(Description description) {
62        description.appendText("in(").appendValue(mValues).appendText(")");
63    }
64
65    @Factory
66    public static <T> Matcher<T> in(T... operand) {
67        return new InMatcher<T>(operand);
68    }
69
70    @Factory
71    public static <T> Matcher<T> in(Collection<T> operand) {
72        return new InMatcher<T>(operand);
73    }
74}
75