1#!/usr/local/bin/python3.8 2 3# Copyright 2008 Jurko Gospodnetic 4# Distributed under the Boost Software License, Version 1.0. 5# (See accompanying file LICENSE_1_0.txt or copy at 6# http://www.boost.org/LICENSE_1_0.txt) 7 8# Tests that properties conditioned on more than one other property work as 9# expected. 10 11import BoostBuild 12 13 14############################################################################### 15# 16# test_multiple_conditions() 17# -------------------------- 18# 19############################################################################### 20 21def test_multiple_conditions(): 22 """Basic tests for properties conditioned on multiple other properties.""" 23 24 t = BoostBuild.Tester(["--user-config=", "--ignore-site-config", 25 "toolset=testToolset"], pass_toolset=False, use_test_config=False) 26 27 t.write("testToolset.jam", """\ 28import feature ; 29feature.extend toolset : testToolset ; 30rule init ( ) { } 31""") 32 33 t.write("testToolset.py", """\ 34from b2.build import feature 35feature.extend('toolset', ["testToolset"]) 36def init ( ): pass 37""") 38 39 t.write("jamroot.jam", """\ 40import feature ; 41import notfile ; 42import toolset ; 43 44feature.feature description : : free incidental ; 45feature.feature aaa : 1 0 : incidental ; 46feature.feature bbb : 1 0 : incidental ; 47feature.feature ccc : 1 0 : incidental ; 48 49rule buildRule ( name : targets ? : properties * ) 50{ 51 for local description in [ feature.get-values description : $(properties) ] 52 { 53 ECHO "description:" /$(description)/ ; 54 } 55} 56 57notfile testTarget1 : @buildRule : : 58 <description>d 59 <aaa>0:<description>a0 60 <aaa>1:<description>a1 61 <aaa>0,<bbb>0:<description>a0-b0 62 <aaa>0,<bbb>1:<description>a0-b1 63 <aaa>1,<bbb>0:<description>a1-b0 64 <aaa>1,<bbb>1:<description>a1-b1 65 <aaa>0,<bbb>0,<ccc>0:<description>a0-b0-c0 66 <aaa>0,<bbb>0,<ccc>1:<description>a0-b0-c1 67 <aaa>0,<bbb>1,<ccc>1:<description>a0-b1-c1 68 <aaa>1,<bbb>0,<ccc>1:<description>a1-b0-c1 69 <aaa>1,<bbb>1,<ccc>0:<description>a1-b1-c0 70 <aaa>1,<bbb>1,<ccc>1:<description>a1-b1-c1 ; 71""") 72 73 t.run_build_system(["aaa=1", "bbb=1", "ccc=1"]) 74 t.expect_output_lines("description: /d/" ) 75 t.expect_output_lines("description: /a0/" , False) 76 t.expect_output_lines("description: /a1/" ) 77 t.expect_output_lines("description: /a0-b0/" , False) 78 t.expect_output_lines("description: /a0-b1/" , False) 79 t.expect_output_lines("description: /a1-b0/" , False) 80 t.expect_output_lines("description: /a1-b1/" ) 81 t.expect_output_lines("description: /a0-b0-c0/", False) 82 t.expect_output_lines("description: /a0-b0-c1/", False) 83 t.expect_output_lines("description: /a0-b1-c1/", False) 84 t.expect_output_lines("description: /a1-b0-c1/", False) 85 t.expect_output_lines("description: /a1-b1-c0/", False) 86 t.expect_output_lines("description: /a1-b1-c1/" ) 87 88 t.run_build_system(["aaa=0", "bbb=0", "ccc=1"]) 89 t.expect_output_lines("description: /d/" ) 90 t.expect_output_lines("description: /a0/" ) 91 t.expect_output_lines("description: /a1/" , False) 92 t.expect_output_lines("description: /a0-b0/" ) 93 t.expect_output_lines("description: /a0-b1/" , False) 94 t.expect_output_lines("description: /a1-b0/" , False) 95 t.expect_output_lines("description: /a1-b1/" , False) 96 t.expect_output_lines("description: /a0-b0-c0/", False) 97 t.expect_output_lines("description: /a0-b0-c1/" ) 98 t.expect_output_lines("description: /a0-b1-c1/", False) 99 t.expect_output_lines("description: /a1-b0-c1/", False) 100 t.expect_output_lines("description: /a1-b1-c0/", False) 101 t.expect_output_lines("description: /a1-b1-c1/", False) 102 103 t.run_build_system(["aaa=0", "bbb=0", "ccc=0"]) 104 t.expect_output_lines("description: /d/" ) 105 t.expect_output_lines("description: /a0/" ) 106 t.expect_output_lines("description: /a1/" , False) 107 t.expect_output_lines("description: /a0-b0/" ) 108 t.expect_output_lines("description: /a0-b1/" , False) 109 t.expect_output_lines("description: /a1-b0/" , False) 110 t.expect_output_lines("description: /a1-b1/" , False) 111 t.expect_output_lines("description: /a0-b0-c0/" ) 112 t.expect_output_lines("description: /a0-b0-c1/", False) 113 t.expect_output_lines("description: /a0-b1-c1/", False) 114 t.expect_output_lines("description: /a1-b0-c1/", False) 115 t.expect_output_lines("description: /a1-b1-c0/", False) 116 t.expect_output_lines("description: /a1-b1-c1/", False) 117 118 t.cleanup() 119 120 121############################################################################### 122# 123# test_multiple_conditions_with_toolset_version() 124# ----------------------------------------------- 125# 126############################################################################### 127 128def test_multiple_conditions_with_toolset_version(): 129 """ 130 Regression tests for properties conditioned on the toolset version 131 subfeature and some additional properties. 132 133 """ 134 toolset = "testToolset" ; 135 136 t = BoostBuild.Tester(["--user-config=", "--ignore-site-config"], 137 pass_toolset=False, use_test_config=False) 138 139 t.write(toolset + ".jam", """\ 140import feature ; 141feature.extend toolset : %(toolset)s ; 142feature.subfeature toolset %(toolset)s : version : 0 1 ; 143rule init ( version ? ) { } 144""" % {"toolset": toolset}) 145 146 t.write("testToolset.py", """\ 147from b2.build import feature 148feature.extend('toolset', ["%(toolset)s"]) 149feature.subfeature('toolset', "%(toolset)s", "version", ['0','1']) 150def init (version=''): pass 151""" % {"toolset": toolset}) 152 153 t.write("jamroot.jam", """\ 154import feature ; 155import notfile ; 156import toolset ; 157 158toolset.using testToolset ; 159 160feature.feature description : : free incidental ; 161feature.feature aaa : 0 1 : incidental ; 162feature.feature bbb : 0 1 : incidental ; 163feature.feature ccc : 0 1 : incidental ; 164 165rule buildRule ( name : targets ? : properties * ) 166{ 167 local ttt = [ feature.get-values toolset : $(properties) ] ; 168 local vvv = [ feature.get-values "toolset-testToolset:version" : $(properties) ] ; 169 local aaa = [ feature.get-values aaa : $(properties) ] ; 170 local bbb = [ feature.get-values bbb : $(properties) ] ; 171 local ccc = [ feature.get-values ccc : $(properties) ] ; 172 ECHO "toolset:" /$(ttt)/ "version:" /$(vvv)/ "aaa/bbb/ccc:" /$(aaa)/$(bbb)/$(ccc)/ ; 173 for local description in [ feature.get-values description : $(properties) ] 174 { 175 ECHO "description:" /$(description)/ ; 176 } 177} 178 179notfile testTarget1 : @buildRule : : 180 <toolset>testToolset,<aaa>0:<description>t-a0 181 <toolset>testToolset,<aaa>1:<description>t-a1 182 183 <toolset>testToolset-0,<aaa>0:<description>t0-a0 184 <toolset>testToolset-0,<aaa>1:<description>t0-a1 185 <toolset>testToolset-1,<aaa>0:<description>t1-a0 186 <toolset>testToolset-1,<aaa>1:<description>t1-a1 187 188 <toolset>testToolset,<aaa>0,<bbb>0:<description>t-a0-b0 189 <toolset>testToolset,<aaa>0,<bbb>1:<description>t-a0-b1 190 <toolset>testToolset,<aaa>1,<bbb>0:<description>t-a1-b0 191 <toolset>testToolset,<aaa>1,<bbb>1:<description>t-a1-b1 192 193 <aaa>0,<toolset>testToolset,<bbb>0:<description>a0-t-b0 194 <aaa>0,<toolset>testToolset,<bbb>1:<description>a0-t-b1 195 <aaa>1,<toolset>testToolset,<bbb>0:<description>a1-t-b0 196 <aaa>1,<toolset>testToolset,<bbb>1:<description>a1-t-b1 197 198 <aaa>0,<bbb>0,<toolset>testToolset:<description>a0-b0-t 199 <aaa>0,<bbb>1,<toolset>testToolset:<description>a0-b1-t 200 <aaa>1,<bbb>0,<toolset>testToolset:<description>a1-b0-t 201 <aaa>1,<bbb>1,<toolset>testToolset:<description>a1-b1-t 202 203 <toolset>testToolset-0,<aaa>0,<bbb>0:<description>t0-a0-b0 204 <toolset>testToolset-0,<aaa>0,<bbb>1:<description>t0-a0-b1 205 <toolset>testToolset-0,<aaa>1,<bbb>0:<description>t0-a1-b0 206 <toolset>testToolset-0,<aaa>1,<bbb>1:<description>t0-a1-b1 207 <toolset>testToolset-1,<aaa>0,<bbb>0:<description>t1-a0-b0 208 <toolset>testToolset-1,<aaa>0,<bbb>1:<description>t1-a0-b1 209 <toolset>testToolset-1,<aaa>1,<bbb>0:<description>t1-a1-b0 210 <toolset>testToolset-1,<aaa>1,<bbb>1:<description>t1-a1-b1 211 212 <aaa>0,<toolset>testToolset-1,<bbb>0:<description>a0-t1-b0 213 <aaa>0,<toolset>testToolset-1,<bbb>1:<description>a0-t1-b1 214 <aaa>1,<toolset>testToolset-0,<bbb>0:<description>a1-t0-b0 215 <aaa>1,<toolset>testToolset-0,<bbb>1:<description>a1-t0-b1 216 217 <bbb>0,<aaa>1,<toolset>testToolset-0:<description>b0-a1-t0 218 <bbb>0,<aaa>0,<toolset>testToolset-1:<description>b0-a0-t1 219 <bbb>0,<aaa>1,<toolset>testToolset-1:<description>b0-a1-t1 220 <bbb>1,<aaa>0,<toolset>testToolset-1:<description>b1-a0-t1 221 <bbb>1,<aaa>1,<toolset>testToolset-0:<description>b1-a1-t0 222 <bbb>1,<aaa>1,<toolset>testToolset-1:<description>b1-a1-t1 ; 223""") 224 225 t.run_build_system(["aaa=1", "bbb=1", "ccc=1", "toolset=%s-0" % toolset]) 226 t.expect_output_lines("description: /t-a0/" , False) 227 t.expect_output_lines("description: /t-a1/" ) 228 t.expect_output_lines("description: /t0-a0/" , False) 229 t.expect_output_lines("description: /t0-a1/" ) 230 t.expect_output_lines("description: /t1-a0/" , False) 231 t.expect_output_lines("description: /t1-a1/" , False) 232 t.expect_output_lines("description: /t-a0-b0/" , False) 233 t.expect_output_lines("description: /t-a0-b1/" , False) 234 t.expect_output_lines("description: /t-a1-b0/" , False) 235 t.expect_output_lines("description: /t-a1-b1/" ) 236 t.expect_output_lines("description: /a0-t-b0/" , False) 237 t.expect_output_lines("description: /a0-t-b1/" , False) 238 t.expect_output_lines("description: /a1-t-b0/" , False) 239 t.expect_output_lines("description: /a1-t-b1/" ) 240 t.expect_output_lines("description: /a0-b0-t/" , False) 241 t.expect_output_lines("description: /a0-b1-t/" , False) 242 t.expect_output_lines("description: /a1-b0-t/" , False) 243 t.expect_output_lines("description: /a1-b1-t/" ) 244 t.expect_output_lines("description: /t0-a0-b0/", False) 245 t.expect_output_lines("description: /t0-a0-b1/", False) 246 t.expect_output_lines("description: /t0-a1-b0/", False) 247 t.expect_output_lines("description: /t0-a1-b1/" ) 248 t.expect_output_lines("description: /t1-a0-b0/", False) 249 t.expect_output_lines("description: /t1-a0-b1/", False) 250 t.expect_output_lines("description: /t1-a1-b0/", False) 251 t.expect_output_lines("description: /t1-a1-b1/", False) 252 t.expect_output_lines("description: /a0-t1-b0/", False) 253 t.expect_output_lines("description: /a0-t1-b1/", False) 254 t.expect_output_lines("description: /a1-t0-b0/", False) 255 t.expect_output_lines("description: /a1-t0-b1/" ) 256 t.expect_output_lines("description: /b0-a1-t0/", False) 257 t.expect_output_lines("description: /b0-a0-t1/", False) 258 t.expect_output_lines("description: /b0-a1-t1/", False) 259 t.expect_output_lines("description: /b1-a0-t1/", False) 260 t.expect_output_lines("description: /b1-a1-t0/" ) 261 t.expect_output_lines("description: /b1-a1-t1/", False) 262 263 t.run_build_system(["aaa=1", "bbb=1", "ccc=1", "toolset=%s-1" % toolset]) 264 t.expect_output_lines("description: /t-a0/" , False) 265 t.expect_output_lines("description: /t-a1/" ) 266 t.expect_output_lines("description: /t0-a0/" , False) 267 t.expect_output_lines("description: /t0-a1/" , False) 268 t.expect_output_lines("description: /t1-a0/" , False) 269 t.expect_output_lines("description: /t1-a1/" ) 270 t.expect_output_lines("description: /t-a0-b0/" , False) 271 t.expect_output_lines("description: /t-a0-b1/" , False) 272 t.expect_output_lines("description: /t-a1-b0/" , False) 273 t.expect_output_lines("description: /t-a1-b1/" ) 274 t.expect_output_lines("description: /a0-t-b0/" , False) 275 t.expect_output_lines("description: /a0-t-b1/" , False) 276 t.expect_output_lines("description: /a1-t-b0/" , False) 277 t.expect_output_lines("description: /a1-t-b1/" ) 278 t.expect_output_lines("description: /a0-b0-t/" , False) 279 t.expect_output_lines("description: /a0-b1-t/" , False) 280 t.expect_output_lines("description: /a1-b0-t/" , False) 281 t.expect_output_lines("description: /a1-b1-t/" ) 282 t.expect_output_lines("description: /t0-a0-b0/", False) 283 t.expect_output_lines("description: /t0-a0-b1/", False) 284 t.expect_output_lines("description: /t0-a1-b0/", False) 285 t.expect_output_lines("description: /t0-a1-b1/", False) 286 t.expect_output_lines("description: /t1-a0-b0/", False) 287 t.expect_output_lines("description: /t1-a0-b1/", False) 288 t.expect_output_lines("description: /t1-a1-b0/", False) 289 t.expect_output_lines("description: /t1-a1-b1/" ) 290 t.expect_output_lines("description: /a0-t1-b0/", False) 291 t.expect_output_lines("description: /a0-t1-b1/", False) 292 t.expect_output_lines("description: /a1-t0-b0/", False) 293 t.expect_output_lines("description: /a1-t0-b1/", False) 294 t.expect_output_lines("description: /b0-a1-t0/", False) 295 t.expect_output_lines("description: /b0-a0-t1/", False) 296 t.expect_output_lines("description: /b0-a1-t1/", False) 297 t.expect_output_lines("description: /b1-a0-t1/", False) 298 t.expect_output_lines("description: /b1-a1-t0/", False) 299 t.expect_output_lines("description: /b1-a1-t1/" ) 300 301 t.cleanup() 302 303 304############################################################################### 305# 306# main() 307# ------ 308# 309############################################################################### 310 311test_multiple_conditions() 312test_multiple_conditions_with_toolset_version() 313