1 // Copyright 2015-present 650 Industries. All rights reserved.
2 package host.exp.exponent.utils
3 
4 import android.view.View
5 import androidx.test.espresso.matcher.BoundedMatcher
6 import org.hamcrest.Description
7 import org.hamcrest.Matcher
8 import org.hamcrest.Matchers
9 
10 object ExponentMatchers {
11   fun getTestId(view: View): String? {
12     return if (view.tag is String) view.tag as String else null
13   }
14 
15   fun withTestId(text: String): Matcher<View> {
16     return withTestId(Matchers.`is`(text))
17   }
18 
19   private fun withTestId(stringMatcher: Matcher<String>): Matcher<View> {
20     return object : BoundedMatcher<View, View>(View::class.java) {
21       override fun describeTo(description: Description) {
22         description.appendText("with test id: ")
23         stringMatcher.describeTo(description)
24       }
25 
26       public override fun matchesSafely(view: View): Boolean {
27         val testId = getTestId(view)
28         return if (testId == null) {
29           false
30         } else {
31           stringMatcher.matches(testId)
32         }
33       }
34     }
35   }
36 }
37