test_parse_reftest.py (9150B)
1 # This Source Code Form is subject to the terms of the Mozilla Public 2 # License, v. 2.0. If a copy of the MPL was not distributed with this 3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 5 import pytest 6 from mozunit import main 7 from parse_reftest import ListManifestParser 8 9 10 @pytest.fixture 11 def lmp(): 12 return ListManifestParser(implicit_vars=True, verbose=True) 13 14 15 @pytest.mark.parametrize( 16 "condition, skip_if, expected", 17 [ 18 ("gtkWidget", "gtkWidget", "gtkWidget"), 19 ( 20 "gtkWidget&&!is64Bit", 21 "winWidget&&!is64Bit", 22 "winWidget&&!is64Bit", 23 ), 24 ( 25 "gtkWidget", 26 "winWidget&&!is64Bit", 27 "winWidget&&!is64Bit", 28 ), 29 ( 30 "winWidget&&!is64Bit", 31 "gtkWidget", 32 "gtkWidget", 33 ), 34 ("gtkWidget&&optimized", "gtkWidget&&isDebugBuild", "gtkWidget"), 35 ( 36 "winWidget&&!is64Bit&&optimized", 37 "winWidget&&!is64Bit&&isDebugBuild", 38 "winWidget&&!is64Bit", 39 ), 40 ( 41 "winWidget&&!is64Bit", 42 "winWidget&&AddressSanitizer&&!fission", 43 # 3 dimensions change "winWidget&&(is64Bit||!is64Bit)&&(fission||!fission)", 44 "winWidget&&AddressSanitizer&&!fission", 45 ), 46 ( 47 "winWidget&&isCoverageBuild", 48 "cocoaWidget&&isCoverageBuild", 49 "cocoaWidget&&isCoverageBuild", 50 ), 51 ( 52 "cocoaWidget&&ThreadSanitizer&&swgl", 53 "cocoaWidget", 54 "cocoaWidget&&(swgl||!swgl)", 55 ), 56 ( 57 "(gtkWidget||winWidget)&&(is64Bit||!is64Bit)", 58 "cocoaWidget&&!is64Bit", 59 "cocoaWidget&&!is64Bit", 60 ), 61 ( 62 "winWidget&&(is64Bit||!is64Bit)&&(fission||!fission)", 63 "winWidget&&!is64Bit", 64 "winWidget&&(fission||!fission)&&(is64Bit||!is64Bit)", 65 ), 66 ( 67 "Android&&!swgl", 68 "Android&&optimized&&!fission", 69 "Android&&optimized&&!fission", 70 ), 71 ( 72 "Android&&!swgl", 73 "Android&&!fission", 74 "Android&&!fission", 75 ), 76 ( 77 "Android&&!swgl", 78 "Android&&optimized", 79 "Android", 80 ), 81 ( 82 "(gtkWidget||winWidget)", 83 "winWidget&&!is64Bit", 84 "winWidget&&!is64Bit", 85 ), 86 ( 87 "useDrawSnapshot", 88 "Android&&!fission", 89 "Android&&!fission", 90 ), 91 ( 92 "gtkWidget&&AddressSanitizer&&!fission", 93 "gtkWidget&&AddressSanitizer&&!fission&&swgl", 94 "gtkWidget&&AddressSanitizer&&!fission&&(swgl||!swgl)", 95 ), 96 ( 97 "gtkWidget&&AddressSanitizer&&!fission&&(swgl||!swgl)", 98 "gtkWidget&&AddressSanitizer&&swgl", 99 "gtkWidget&&AddressSanitizer&&(fission||!fission)&&(swgl||!swgl)", 100 ), 101 ( 102 "gtkWidget&&AddressSanitizer&&(fission||!fission)&&(swgl||!swgl)", 103 "gtkWidget&&ThreadSanitizer&&swgl", 104 "gtkWidget&&(fission||!fission)&&(swgl||!swgl)", 105 ), 106 ( 107 "gtkWidget&&AddressSanitizer&&(fission||!fission)&&(swgl||!swgl)", 108 "gtkWidget&&isDebugBuild&&!fission&&swgl", 109 "gtkWidget&&(fission||!fission)&&(swgl||!swgl)", 110 ), 111 ( 112 "gtkWidget&&(fission||!fission)&&(swgl||!swgl)", 113 "gtkWidget&&AddressSanitizer&&!fission", 114 "gtkWidget&&(fission||!fission)&&(swgl||!swgl)", 115 ), 116 ( 117 "gtkWidget&&swgl", 118 "gtkWidget&&isDebugBuild&&!fission&&swgl", 119 "gtkWidget&&(fission||!fission)&&swgl", 120 ), 121 ( 122 "gtkWidget&&!fission&&swgl", 123 "gtkWidget&&isDebugBuild&&!fission&&swgl", 124 "gtkWidget&&!fission&&swgl", 125 ), 126 ( 127 "gtkWidget&&!fission&&swgl", 128 "gtkWidget&&!fission&&(swgl||!swgl)", 129 "gtkWidget&&!fission&&(swgl||!swgl)", 130 ), 131 ( 132 "gtkWidget&&swgl", 133 "gtkWidget&&!fission&&(swgl||!swgl)", 134 "gtkWidget&&(fission||!fission)&&(swgl||!swgl)", 135 ), 136 ], 137 ) 138 def test_merge_implicit(lmp, condition, skip_if, expected): 139 """Test merge (implicit_vars)""" 140 141 if lmp.should_merge(condition, skip_if): 142 optimized = lmp.merge(condition, skip_if) 143 else: 144 optimized = skip_if 145 assert optimized == expected 146 147 148 @pytest.mark.parametrize( 149 "condition, skip_if, expected", 150 [ 151 ("gtkWidget", "gtkWidget&&is64Bit", "gtkWidget"), 152 ("gtkWidget", "gtkWidget&&!is64Bit", "gtkWidget"), 153 ("gtkWidget&&!is64Bit", "gtkWidget", "gtkWidget"), 154 ( 155 "gtkWidget&&!is64Bit", 156 "winWidget&&!is64Bit", 157 "winWidget&&!is64Bit", 158 ), 159 ( 160 "gtkWidget", 161 "winWidget&&!is64Bit", 162 "winWidget&&!is64Bit", 163 ), 164 ( 165 "winWidget&&!is64Bit", 166 "gtkWidget", 167 "gtkWidget", 168 ), 169 ("gtkWidget&&optimized", "gtkWidget&&isDebugBuild", "gtkWidget"), 170 ( 171 "winWidget&&!is64Bit&&optimized", 172 "winWidget&&!is64Bit&&isDebugBuild", 173 "winWidget&&!is64Bit", 174 ), 175 ( 176 "winWidget&&!is64Bit", 177 "winWidget&&AddressSanitizer&&!fission", 178 "winWidget&&AddressSanitizer&&!fission", 179 ), 180 ( 181 "winWidget&&isCoverageBuild", 182 "cocoaWidget&&isCoverageBuild", 183 "cocoaWidget&&isCoverageBuild", 184 ), 185 ( 186 "cocoaWidget&&ThreadSanitizer&&swgl", 187 "cocoaWidget", 188 "cocoaWidget", 189 ), 190 ( 191 "(gtkWidget||winWidget)&&(is64Bit||!is64Bit)", 192 "cocoaWidget", 193 "cocoaWidget", 194 ), 195 ( 196 "winWidget&&is64Bit", 197 "winWidget&&!is64Bit", 198 "winWidget", 199 ), 200 ( 201 "winWidget", 202 "winWidget&&!is64Bit", 203 "winWidget", 204 ), 205 ( 206 "winWidget&&!is64Bit", 207 "winWidget", 208 "winWidget", 209 ), 210 ( 211 "winWidget", 212 "winWidget&&is64Bit", 213 "winWidget", 214 ), 215 ( 216 "winWidget&&is64Bit", 217 "winWidget", 218 "winWidget", 219 ), 220 ( 221 "Android&&!swgl", 222 "Android&&optimized&&!fission", 223 "Android&&optimized&&!fission", 224 ), 225 ( 226 "Android&&!swgl", 227 "Android&&!fission", 228 "Android&&!fission", 229 ), 230 ( 231 "Android&&!swgl", 232 "Android&&optimized", 233 "Android", 234 ), 235 ( 236 "(gtkWidget||winWidget)", 237 "winWidget&&!is64Bit", 238 "winWidget&&!is64Bit", 239 ), 240 ( 241 "useDrawSnapshot", 242 "Android&&!fission", 243 "Android&&!fission", 244 ), 245 ( 246 "gtkWidget&&AddressSanitizer&&!fission", 247 "gtkWidget&&AddressSanitizer&&!fission&&swgl", 248 "gtkWidget&&AddressSanitizer&&!fission", 249 ), 250 ( 251 "gtkWidget&&AddressSanitizer&&!fission", 252 "gtkWidget&&AddressSanitizer&&swgl", 253 "gtkWidget&&AddressSanitizer&&swgl", 254 ), 255 ( 256 "gtkWidget&&AddressSanitizer", 257 "gtkWidget&&ThreadSanitizer", 258 "gtkWidget", 259 ), 260 ( 261 "gtkWidget&&AddressSanitizer", 262 "gtkWidget&&isDebugBuild&&!fission", 263 "gtkWidget&&isDebugBuild&&!fission", # 2 dimensions 264 ), 265 ( 266 "gtkWidget", 267 "gtkWidget&&AddressSanitizer&&!fission", 268 "gtkWidget", 269 ), 270 ( 271 "gtkWidget&&swgl", 272 "gtkWidget&&isDebugBuild&&!fission&&swgl", 273 "gtkWidget&&swgl", 274 ), 275 ( 276 "gtkWidget&&!fission&&swgl", 277 "gtkWidget&&isDebugBuild&&!fission&&swgl", 278 "gtkWidget&&!fission&&swgl", 279 ), 280 ( 281 "gtkWidget&&!fission&&swgl", 282 "gtkWidget&&!fission", 283 "gtkWidget&&!fission", 284 ), 285 ( 286 "gtkWidget&&swgl", 287 "gtkWidget&&!fission", 288 "gtkWidget&&!fission", # 2 dimensions 289 ), 290 ( 291 "cocoaWidget&&useDrawSnapshot", 292 "cocoaWidget&&useDrawSnapshot", 293 "cocoaWidget", 294 ), 295 ( 296 "gtkWidget&&!useDrawSnapshot", 297 "gtkWidget&&!useDrawSnapshot", 298 "gtkWidget&&!useDrawSnapshot", 299 ), 300 ( 301 "gtkWidget&&!useDrawSnapshot", 302 "gtkWidget", 303 "gtkWidget", 304 ), 305 ], 306 ) 307 def test_merge_explicit(lmp, condition, skip_if, expected): 308 """Test merge (explicit vars)""" 309 310 lmp.implicit_vars = False 311 if lmp.should_merge(condition, skip_if): 312 merged = lmp.merge(condition, skip_if) 313 else: 314 merged = skip_if 315 assert merged == expected 316 317 318 if __name__ == "__main__": 319 main()