• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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  */
16 
17 package android.tools.common.flicker.subject
18 
19 import android.tools.common.Timestamp
20 import android.tools.common.flicker.assertions.Fact
21 import android.tools.common.flicker.subject.exceptions.ExceptionMessageBuilder
22 import android.tools.common.flicker.subject.exceptions.InvalidPropertyException
23 import android.tools.common.io.Reader
24 
25 /** Subject for flicker checks */
26 data class CheckSubject<T>(
27     private val actualValue: T?,
28     private val timestamp: Timestamp,
29     private val extraFacts: List<Fact>,
30     private val reader: Reader?,
31     private val lazyMessage: () -> String,
32 ) {
33     private val exceptionMessageBuilder: ExceptionMessageBuilder
34         get() {
35             val builder =
36                 ExceptionMessageBuilder()
37                     .setTimestamp(timestamp)
38                     .addExtraDescription(*extraFacts.toTypedArray())
39             if (reader != null) {
40                 builder.setReader(reader)
41             }
42             return builder
43         }
44 
isEqualnull45     fun isEqual(expectedValue: T?) {
46         if (actualValue != expectedValue) {
47             val errorMsgBuilder =
48                 exceptionMessageBuilder
49                     .setMessage(lazyMessage.invoke())
50                     .setExpected(expectedValue)
51                     .setActual(actualValue)
52             throw InvalidPropertyException(errorMsgBuilder)
53         }
54     }
55 
isNotEqualnull56     fun isNotEqual(expectedValue: T?) {
57         if (actualValue == expectedValue) {
58             val errorMsgBuilder =
59                 exceptionMessageBuilder
60                     .setMessage(lazyMessage.invoke())
61                     .setExpected("Different from $expectedValue")
62                     .setActual(actualValue)
63             throw InvalidPropertyException(errorMsgBuilder)
64         }
65     }
66 
isNullnull67     fun isNull() {
68         if (actualValue != null) {
69             val errorMsgBuilder =
70                 exceptionMessageBuilder
71                     .setMessage(lazyMessage.invoke())
72                     .setExpected(null)
73                     .setActual(actualValue)
74             throw InvalidPropertyException(errorMsgBuilder)
75         }
76     }
77 
isNotNullnull78     fun isNotNull() {
79         if (actualValue == null) {
80             val errorMsgBuilder =
81                 exceptionMessageBuilder
82                     .setMessage(lazyMessage.invoke())
83                     .setExpected("Not null")
84                     .setActual(null)
85             throw InvalidPropertyException(errorMsgBuilder)
86         }
87     }
88 
isLowernull89     fun isLower(expectedValue: T?) {
90         if (
91             actualValue == null ||
92                 expectedValue == null ||
93                 (actualValue as Comparable<T>) >= expectedValue
94         ) {
95             val errorMsgBuilder =
96                 exceptionMessageBuilder
97                     .setMessage(lazyMessage.invoke())
98                     .setExpected("Lower than $expectedValue")
99                     .setActual(actualValue)
100             throw InvalidPropertyException(errorMsgBuilder)
101         }
102     }
103 
isLowerOrEqualnull104     fun isLowerOrEqual(expectedValue: T?) {
105         if (
106             actualValue == null ||
107                 expectedValue == null ||
108                 (actualValue as Comparable<T>) > expectedValue
109         ) {
110             val errorMsgBuilder =
111                 exceptionMessageBuilder
112                     .setMessage(lazyMessage.invoke())
113                     .setExpected("Lower or equal to $expectedValue")
114                     .setActual(actualValue)
115             throw InvalidPropertyException(errorMsgBuilder)
116         }
117     }
118 
isGreaternull119     fun isGreater(expectedValue: T) {
120         if (
121             actualValue == null ||
122                 expectedValue == null ||
123                 (actualValue as Comparable<T>) <= expectedValue
124         ) {
125             val errorMsgBuilder =
126                 exceptionMessageBuilder
127                     .setMessage(lazyMessage.invoke())
128                     .setExpected("Greater than $expectedValue")
129                     .setActual(actualValue)
130             throw InvalidPropertyException(errorMsgBuilder)
131         }
132     }
133 
isGreaterOrEqualnull134     fun isGreaterOrEqual(expectedValue: T) {
135         if (
136             actualValue == null ||
137                 expectedValue == null ||
138                 (actualValue as Comparable<T>) < expectedValue
139         ) {
140             val errorMsgBuilder =
141                 exceptionMessageBuilder
142                     .setMessage(lazyMessage.invoke())
143                     .setExpected("Greater or equal to $expectedValue")
144                     .setActual(actualValue)
145             throw InvalidPropertyException(errorMsgBuilder)
146         }
147     }
148 
containsnull149     fun <U> contains(expectedValue: U) {
150         if (actualValue !is List<*> || !(actualValue as List<U>).contains(expectedValue)) {
151             val errorMsgBuilder =
152                 exceptionMessageBuilder
153                     .setMessage(lazyMessage.invoke())
154                     .setExpected("Contain $expectedValue")
155                     .setActual(actualValue)
156             throw InvalidPropertyException(errorMsgBuilder)
157         }
158     }
159 }
160