1*1fa6dee9SAndroid Build Coastguard Worker// Copyright 2024 Google Inc. All rights reserved. 2*1fa6dee9SAndroid Build Coastguard Worker// 3*1fa6dee9SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*1fa6dee9SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*1fa6dee9SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*1fa6dee9SAndroid Build Coastguard Worker// 7*1fa6dee9SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*1fa6dee9SAndroid Build Coastguard Worker// 9*1fa6dee9SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*1fa6dee9SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*1fa6dee9SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*1fa6dee9SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*1fa6dee9SAndroid Build Coastguard Worker// limitations under the License. 14*1fa6dee9SAndroid Build Coastguard Worker 15*1fa6dee9SAndroid Build Coastguard Workerpackage main 16*1fa6dee9SAndroid Build Coastguard Worker 17*1fa6dee9SAndroid Build Coastguard Workerimport ( 18*1fa6dee9SAndroid Build Coastguard Worker "bytes" 19*1fa6dee9SAndroid Build Coastguard Worker "strings" 20*1fa6dee9SAndroid Build Coastguard Worker "testing" 21*1fa6dee9SAndroid Build Coastguard Worker 22*1fa6dee9SAndroid Build Coastguard Worker "github.com/google/blueprint/proptools" 23*1fa6dee9SAndroid Build Coastguard Worker) 24*1fa6dee9SAndroid Build Coastguard Worker 25*1fa6dee9SAndroid Build Coastguard Workervar testCases = []struct { 26*1fa6dee9SAndroid Build Coastguard Worker name string 27*1fa6dee9SAndroid Build Coastguard Worker input string 28*1fa6dee9SAndroid Build Coastguard Worker output string 29*1fa6dee9SAndroid Build Coastguard Worker property string 30*1fa6dee9SAndroid Build Coastguard Worker addSet string 31*1fa6dee9SAndroid Build Coastguard Worker removeSet string 32*1fa6dee9SAndroid Build Coastguard Worker addLiteral *string 33*1fa6dee9SAndroid Build Coastguard Worker setString *string 34*1fa6dee9SAndroid Build Coastguard Worker setBool *string 35*1fa6dee9SAndroid Build Coastguard Worker removeProperty bool 36*1fa6dee9SAndroid Build Coastguard Worker replaceProperty string 37*1fa6dee9SAndroid Build Coastguard Worker moveProperty bool 38*1fa6dee9SAndroid Build Coastguard Worker newLocation string 39*1fa6dee9SAndroid Build Coastguard Worker}{ 40*1fa6dee9SAndroid Build Coastguard Worker { 41*1fa6dee9SAndroid Build Coastguard Worker name: "add", 42*1fa6dee9SAndroid Build Coastguard Worker input: ` 43*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 44*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 45*1fa6dee9SAndroid Build Coastguard Worker } 46*1fa6dee9SAndroid Build Coastguard Worker `, 47*1fa6dee9SAndroid Build Coastguard Worker output: ` 48*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 49*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 50*1fa6dee9SAndroid Build Coastguard Worker deps: ["bar"], 51*1fa6dee9SAndroid Build Coastguard Worker } 52*1fa6dee9SAndroid Build Coastguard Worker `, 53*1fa6dee9SAndroid Build Coastguard Worker property: "deps", 54*1fa6dee9SAndroid Build Coastguard Worker addSet: "bar", 55*1fa6dee9SAndroid Build Coastguard Worker }, 56*1fa6dee9SAndroid Build Coastguard Worker { 57*1fa6dee9SAndroid Build Coastguard Worker name: "remove", 58*1fa6dee9SAndroid Build Coastguard Worker input: ` 59*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 60*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 61*1fa6dee9SAndroid Build Coastguard Worker deps: ["bar"], 62*1fa6dee9SAndroid Build Coastguard Worker } 63*1fa6dee9SAndroid Build Coastguard Worker `, 64*1fa6dee9SAndroid Build Coastguard Worker output: ` 65*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 66*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 67*1fa6dee9SAndroid Build Coastguard Worker deps: [], 68*1fa6dee9SAndroid Build Coastguard Worker } 69*1fa6dee9SAndroid Build Coastguard Worker `, 70*1fa6dee9SAndroid Build Coastguard Worker property: "deps", 71*1fa6dee9SAndroid Build Coastguard Worker removeSet: "bar", 72*1fa6dee9SAndroid Build Coastguard Worker }, 73*1fa6dee9SAndroid Build Coastguard Worker { 74*1fa6dee9SAndroid Build Coastguard Worker name: "nested add", 75*1fa6dee9SAndroid Build Coastguard Worker input: ` 76*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 77*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 78*1fa6dee9SAndroid Build Coastguard Worker } 79*1fa6dee9SAndroid Build Coastguard Worker `, 80*1fa6dee9SAndroid Build Coastguard Worker output: ` 81*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 82*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 83*1fa6dee9SAndroid Build Coastguard Worker arch: { 84*1fa6dee9SAndroid Build Coastguard Worker arm: { 85*1fa6dee9SAndroid Build Coastguard Worker deps: [ 86*1fa6dee9SAndroid Build Coastguard Worker "dep2", 87*1fa6dee9SAndroid Build Coastguard Worker "nested_dep",], 88*1fa6dee9SAndroid Build Coastguard Worker }, 89*1fa6dee9SAndroid Build Coastguard Worker }, 90*1fa6dee9SAndroid Build Coastguard Worker } 91*1fa6dee9SAndroid Build Coastguard Worker `, 92*1fa6dee9SAndroid Build Coastguard Worker property: "arch.arm.deps", 93*1fa6dee9SAndroid Build Coastguard Worker addSet: "nested_dep,dep2", 94*1fa6dee9SAndroid Build Coastguard Worker }, 95*1fa6dee9SAndroid Build Coastguard Worker { 96*1fa6dee9SAndroid Build Coastguard Worker name: "nested remove", 97*1fa6dee9SAndroid Build Coastguard Worker input: ` 98*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 99*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 100*1fa6dee9SAndroid Build Coastguard Worker arch: { 101*1fa6dee9SAndroid Build Coastguard Worker arm: { 102*1fa6dee9SAndroid Build Coastguard Worker deps: [ 103*1fa6dee9SAndroid Build Coastguard Worker "dep2", 104*1fa6dee9SAndroid Build Coastguard Worker "nested_dep", 105*1fa6dee9SAndroid Build Coastguard Worker ], 106*1fa6dee9SAndroid Build Coastguard Worker }, 107*1fa6dee9SAndroid Build Coastguard Worker }, 108*1fa6dee9SAndroid Build Coastguard Worker } 109*1fa6dee9SAndroid Build Coastguard Worker `, 110*1fa6dee9SAndroid Build Coastguard Worker output: ` 111*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 112*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 113*1fa6dee9SAndroid Build Coastguard Worker arch: { 114*1fa6dee9SAndroid Build Coastguard Worker arm: { 115*1fa6dee9SAndroid Build Coastguard Worker deps: [ 116*1fa6dee9SAndroid Build Coastguard Worker ], 117*1fa6dee9SAndroid Build Coastguard Worker }, 118*1fa6dee9SAndroid Build Coastguard Worker }, 119*1fa6dee9SAndroid Build Coastguard Worker } 120*1fa6dee9SAndroid Build Coastguard Worker `, 121*1fa6dee9SAndroid Build Coastguard Worker property: "arch.arm.deps", 122*1fa6dee9SAndroid Build Coastguard Worker removeSet: "nested_dep,dep2", 123*1fa6dee9SAndroid Build Coastguard Worker }, 124*1fa6dee9SAndroid Build Coastguard Worker { 125*1fa6dee9SAndroid Build Coastguard Worker name: "add existing", 126*1fa6dee9SAndroid Build Coastguard Worker input: ` 127*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 128*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 129*1fa6dee9SAndroid Build Coastguard Worker arch: { 130*1fa6dee9SAndroid Build Coastguard Worker arm: { 131*1fa6dee9SAndroid Build Coastguard Worker deps: [ 132*1fa6dee9SAndroid Build Coastguard Worker "nested_dep", 133*1fa6dee9SAndroid Build Coastguard Worker "dep2", 134*1fa6dee9SAndroid Build Coastguard Worker ], 135*1fa6dee9SAndroid Build Coastguard Worker }, 136*1fa6dee9SAndroid Build Coastguard Worker }, 137*1fa6dee9SAndroid Build Coastguard Worker } 138*1fa6dee9SAndroid Build Coastguard Worker `, 139*1fa6dee9SAndroid Build Coastguard Worker output: ` 140*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 141*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 142*1fa6dee9SAndroid Build Coastguard Worker arch: { 143*1fa6dee9SAndroid Build Coastguard Worker arm: { 144*1fa6dee9SAndroid Build Coastguard Worker deps: [ 145*1fa6dee9SAndroid Build Coastguard Worker "nested_dep", 146*1fa6dee9SAndroid Build Coastguard Worker "dep2", 147*1fa6dee9SAndroid Build Coastguard Worker ], 148*1fa6dee9SAndroid Build Coastguard Worker }, 149*1fa6dee9SAndroid Build Coastguard Worker }, 150*1fa6dee9SAndroid Build Coastguard Worker } 151*1fa6dee9SAndroid Build Coastguard Worker `, 152*1fa6dee9SAndroid Build Coastguard Worker property: "arch.arm.deps", 153*1fa6dee9SAndroid Build Coastguard Worker addSet: "dep2,dep2", 154*1fa6dee9SAndroid Build Coastguard Worker }, 155*1fa6dee9SAndroid Build Coastguard Worker { 156*1fa6dee9SAndroid Build Coastguard Worker name: "remove missing", 157*1fa6dee9SAndroid Build Coastguard Worker input: ` 158*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 159*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 160*1fa6dee9SAndroid Build Coastguard Worker arch: { 161*1fa6dee9SAndroid Build Coastguard Worker arm: { 162*1fa6dee9SAndroid Build Coastguard Worker deps: [ 163*1fa6dee9SAndroid Build Coastguard Worker "nested_dep", 164*1fa6dee9SAndroid Build Coastguard Worker "dep2", 165*1fa6dee9SAndroid Build Coastguard Worker ], 166*1fa6dee9SAndroid Build Coastguard Worker }, 167*1fa6dee9SAndroid Build Coastguard Worker }, 168*1fa6dee9SAndroid Build Coastguard Worker } 169*1fa6dee9SAndroid Build Coastguard Worker `, 170*1fa6dee9SAndroid Build Coastguard Worker output: ` 171*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 172*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 173*1fa6dee9SAndroid Build Coastguard Worker arch: { 174*1fa6dee9SAndroid Build Coastguard Worker arm: { 175*1fa6dee9SAndroid Build Coastguard Worker deps: [ 176*1fa6dee9SAndroid Build Coastguard Worker "nested_dep", 177*1fa6dee9SAndroid Build Coastguard Worker "dep2", 178*1fa6dee9SAndroid Build Coastguard Worker ], 179*1fa6dee9SAndroid Build Coastguard Worker }, 180*1fa6dee9SAndroid Build Coastguard Worker }, 181*1fa6dee9SAndroid Build Coastguard Worker } 182*1fa6dee9SAndroid Build Coastguard Worker `, 183*1fa6dee9SAndroid Build Coastguard Worker property: "arch.arm.deps", 184*1fa6dee9SAndroid Build Coastguard Worker removeSet: "dep3,dep4", 185*1fa6dee9SAndroid Build Coastguard Worker }, 186*1fa6dee9SAndroid Build Coastguard Worker { 187*1fa6dee9SAndroid Build Coastguard Worker name: "remove non existent", 188*1fa6dee9SAndroid Build Coastguard Worker input: ` 189*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 190*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 191*1fa6dee9SAndroid Build Coastguard Worker } 192*1fa6dee9SAndroid Build Coastguard Worker `, 193*1fa6dee9SAndroid Build Coastguard Worker output: ` 194*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 195*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 196*1fa6dee9SAndroid Build Coastguard Worker } 197*1fa6dee9SAndroid Build Coastguard Worker `, 198*1fa6dee9SAndroid Build Coastguard Worker property: "deps", 199*1fa6dee9SAndroid Build Coastguard Worker removeSet: "bar", 200*1fa6dee9SAndroid Build Coastguard Worker }, 201*1fa6dee9SAndroid Build Coastguard Worker { 202*1fa6dee9SAndroid Build Coastguard Worker name: "remove non existent nested", 203*1fa6dee9SAndroid Build Coastguard Worker input: ` 204*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 205*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 206*1fa6dee9SAndroid Build Coastguard Worker arch: {}, 207*1fa6dee9SAndroid Build Coastguard Worker } 208*1fa6dee9SAndroid Build Coastguard Worker `, 209*1fa6dee9SAndroid Build Coastguard Worker output: ` 210*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 211*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 212*1fa6dee9SAndroid Build Coastguard Worker arch: {}, 213*1fa6dee9SAndroid Build Coastguard Worker } 214*1fa6dee9SAndroid Build Coastguard Worker `, 215*1fa6dee9SAndroid Build Coastguard Worker property: "arch.arm.deps", 216*1fa6dee9SAndroid Build Coastguard Worker removeSet: "dep3,dep4", 217*1fa6dee9SAndroid Build Coastguard Worker }, 218*1fa6dee9SAndroid Build Coastguard Worker { 219*1fa6dee9SAndroid Build Coastguard Worker name: "add numeric sorted", 220*1fa6dee9SAndroid Build Coastguard Worker input: ` 221*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 222*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 223*1fa6dee9SAndroid Build Coastguard Worker versions: ["1", "2"], 224*1fa6dee9SAndroid Build Coastguard Worker } 225*1fa6dee9SAndroid Build Coastguard Worker `, 226*1fa6dee9SAndroid Build Coastguard Worker output: ` 227*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 228*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 229*1fa6dee9SAndroid Build Coastguard Worker versions: [ 230*1fa6dee9SAndroid Build Coastguard Worker "1", 231*1fa6dee9SAndroid Build Coastguard Worker "2", 232*1fa6dee9SAndroid Build Coastguard Worker "10", 233*1fa6dee9SAndroid Build Coastguard Worker ], 234*1fa6dee9SAndroid Build Coastguard Worker } 235*1fa6dee9SAndroid Build Coastguard Worker `, 236*1fa6dee9SAndroid Build Coastguard Worker property: "versions", 237*1fa6dee9SAndroid Build Coastguard Worker addSet: "10", 238*1fa6dee9SAndroid Build Coastguard Worker }, 239*1fa6dee9SAndroid Build Coastguard Worker { 240*1fa6dee9SAndroid Build Coastguard Worker name: "add mixed sorted", 241*1fa6dee9SAndroid Build Coastguard Worker input: ` 242*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 243*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 244*1fa6dee9SAndroid Build Coastguard Worker deps: ["bar-v1-bar", "bar-v2-bar"], 245*1fa6dee9SAndroid Build Coastguard Worker } 246*1fa6dee9SAndroid Build Coastguard Worker `, 247*1fa6dee9SAndroid Build Coastguard Worker output: ` 248*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 249*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 250*1fa6dee9SAndroid Build Coastguard Worker deps: [ 251*1fa6dee9SAndroid Build Coastguard Worker "bar-v1-bar", 252*1fa6dee9SAndroid Build Coastguard Worker "bar-v2-bar", 253*1fa6dee9SAndroid Build Coastguard Worker "bar-v10-bar", 254*1fa6dee9SAndroid Build Coastguard Worker ], 255*1fa6dee9SAndroid Build Coastguard Worker } 256*1fa6dee9SAndroid Build Coastguard Worker `, 257*1fa6dee9SAndroid Build Coastguard Worker property: "deps", 258*1fa6dee9SAndroid Build Coastguard Worker addSet: "bar-v10-bar", 259*1fa6dee9SAndroid Build Coastguard Worker }, 260*1fa6dee9SAndroid Build Coastguard Worker { 261*1fa6dee9SAndroid Build Coastguard Worker name: "add a struct with literal", 262*1fa6dee9SAndroid Build Coastguard Worker input: `cc_foo {name: "foo"}`, 263*1fa6dee9SAndroid Build Coastguard Worker output: `cc_foo { 264*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 265*1fa6dee9SAndroid Build Coastguard Worker structs: [ 266*1fa6dee9SAndroid Build Coastguard Worker { 267*1fa6dee9SAndroid Build Coastguard Worker version: "1", 268*1fa6dee9SAndroid Build Coastguard Worker imports: [ 269*1fa6dee9SAndroid Build Coastguard Worker "bar1", 270*1fa6dee9SAndroid Build Coastguard Worker "bar2", 271*1fa6dee9SAndroid Build Coastguard Worker ], 272*1fa6dee9SAndroid Build Coastguard Worker }, 273*1fa6dee9SAndroid Build Coastguard Worker ], 274*1fa6dee9SAndroid Build Coastguard Worker} 275*1fa6dee9SAndroid Build Coastguard Worker`, 276*1fa6dee9SAndroid Build Coastguard Worker property: "structs", 277*1fa6dee9SAndroid Build Coastguard Worker addLiteral: proptools.StringPtr(`{version: "1", imports: ["bar1", "bar2"]}`), 278*1fa6dee9SAndroid Build Coastguard Worker }, 279*1fa6dee9SAndroid Build Coastguard Worker { 280*1fa6dee9SAndroid Build Coastguard Worker name: "set string", 281*1fa6dee9SAndroid Build Coastguard Worker input: ` 282*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 283*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 284*1fa6dee9SAndroid Build Coastguard Worker } 285*1fa6dee9SAndroid Build Coastguard Worker `, 286*1fa6dee9SAndroid Build Coastguard Worker output: ` 287*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 288*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 289*1fa6dee9SAndroid Build Coastguard Worker foo: "bar", 290*1fa6dee9SAndroid Build Coastguard Worker } 291*1fa6dee9SAndroid Build Coastguard Worker `, 292*1fa6dee9SAndroid Build Coastguard Worker property: "foo", 293*1fa6dee9SAndroid Build Coastguard Worker setString: proptools.StringPtr("bar"), 294*1fa6dee9SAndroid Build Coastguard Worker }, 295*1fa6dee9SAndroid Build Coastguard Worker { 296*1fa6dee9SAndroid Build Coastguard Worker name: "set existing string", 297*1fa6dee9SAndroid Build Coastguard Worker input: ` 298*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 299*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 300*1fa6dee9SAndroid Build Coastguard Worker foo: "baz", 301*1fa6dee9SAndroid Build Coastguard Worker } 302*1fa6dee9SAndroid Build Coastguard Worker `, 303*1fa6dee9SAndroid Build Coastguard Worker output: ` 304*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 305*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 306*1fa6dee9SAndroid Build Coastguard Worker foo: "bar", 307*1fa6dee9SAndroid Build Coastguard Worker } 308*1fa6dee9SAndroid Build Coastguard Worker `, 309*1fa6dee9SAndroid Build Coastguard Worker property: "foo", 310*1fa6dee9SAndroid Build Coastguard Worker setString: proptools.StringPtr("bar"), 311*1fa6dee9SAndroid Build Coastguard Worker }, 312*1fa6dee9SAndroid Build Coastguard Worker { 313*1fa6dee9SAndroid Build Coastguard Worker name: "set bool", 314*1fa6dee9SAndroid Build Coastguard Worker input: ` 315*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 316*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 317*1fa6dee9SAndroid Build Coastguard Worker } 318*1fa6dee9SAndroid Build Coastguard Worker `, 319*1fa6dee9SAndroid Build Coastguard Worker output: ` 320*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 321*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 322*1fa6dee9SAndroid Build Coastguard Worker foo: true, 323*1fa6dee9SAndroid Build Coastguard Worker } 324*1fa6dee9SAndroid Build Coastguard Worker `, 325*1fa6dee9SAndroid Build Coastguard Worker property: "foo", 326*1fa6dee9SAndroid Build Coastguard Worker setBool: proptools.StringPtr("true"), 327*1fa6dee9SAndroid Build Coastguard Worker }, 328*1fa6dee9SAndroid Build Coastguard Worker { 329*1fa6dee9SAndroid Build Coastguard Worker name: "set existing bool", 330*1fa6dee9SAndroid Build Coastguard Worker input: ` 331*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 332*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 333*1fa6dee9SAndroid Build Coastguard Worker foo: true, 334*1fa6dee9SAndroid Build Coastguard Worker } 335*1fa6dee9SAndroid Build Coastguard Worker `, 336*1fa6dee9SAndroid Build Coastguard Worker output: ` 337*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 338*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 339*1fa6dee9SAndroid Build Coastguard Worker foo: false, 340*1fa6dee9SAndroid Build Coastguard Worker } 341*1fa6dee9SAndroid Build Coastguard Worker `, 342*1fa6dee9SAndroid Build Coastguard Worker property: "foo", 343*1fa6dee9SAndroid Build Coastguard Worker setBool: proptools.StringPtr("false"), 344*1fa6dee9SAndroid Build Coastguard Worker }, 345*1fa6dee9SAndroid Build Coastguard Worker { 346*1fa6dee9SAndroid Build Coastguard Worker name: "remove existing property", 347*1fa6dee9SAndroid Build Coastguard Worker input: ` 348*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 349*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 350*1fa6dee9SAndroid Build Coastguard Worker foo: "baz", 351*1fa6dee9SAndroid Build Coastguard Worker } 352*1fa6dee9SAndroid Build Coastguard Worker `, 353*1fa6dee9SAndroid Build Coastguard Worker output: ` 354*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 355*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 356*1fa6dee9SAndroid Build Coastguard Worker } 357*1fa6dee9SAndroid Build Coastguard Worker `, 358*1fa6dee9SAndroid Build Coastguard Worker property: "foo", 359*1fa6dee9SAndroid Build Coastguard Worker removeProperty: true, 360*1fa6dee9SAndroid Build Coastguard Worker }, { 361*1fa6dee9SAndroid Build Coastguard Worker name: "remove nested property", 362*1fa6dee9SAndroid Build Coastguard Worker input: ` 363*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 364*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 365*1fa6dee9SAndroid Build Coastguard Worker foo: { 366*1fa6dee9SAndroid Build Coastguard Worker bar: "baz", 367*1fa6dee9SAndroid Build Coastguard Worker }, 368*1fa6dee9SAndroid Build Coastguard Worker } 369*1fa6dee9SAndroid Build Coastguard Worker `, 370*1fa6dee9SAndroid Build Coastguard Worker output: ` 371*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 372*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 373*1fa6dee9SAndroid Build Coastguard Worker foo: {}, 374*1fa6dee9SAndroid Build Coastguard Worker } 375*1fa6dee9SAndroid Build Coastguard Worker `, 376*1fa6dee9SAndroid Build Coastguard Worker property: "foo.bar", 377*1fa6dee9SAndroid Build Coastguard Worker removeProperty: true, 378*1fa6dee9SAndroid Build Coastguard Worker }, { 379*1fa6dee9SAndroid Build Coastguard Worker name: "remove non-existing property", 380*1fa6dee9SAndroid Build Coastguard Worker input: ` 381*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 382*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 383*1fa6dee9SAndroid Build Coastguard Worker foo: "baz", 384*1fa6dee9SAndroid Build Coastguard Worker } 385*1fa6dee9SAndroid Build Coastguard Worker `, 386*1fa6dee9SAndroid Build Coastguard Worker output: ` 387*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 388*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 389*1fa6dee9SAndroid Build Coastguard Worker foo: "baz", 390*1fa6dee9SAndroid Build Coastguard Worker } 391*1fa6dee9SAndroid Build Coastguard Worker `, 392*1fa6dee9SAndroid Build Coastguard Worker property: "bar", 393*1fa6dee9SAndroid Build Coastguard Worker removeProperty: true, 394*1fa6dee9SAndroid Build Coastguard Worker }, { 395*1fa6dee9SAndroid Build Coastguard Worker name: "replace property", 396*1fa6dee9SAndroid Build Coastguard Worker property: "deps", 397*1fa6dee9SAndroid Build Coastguard Worker input: ` 398*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 399*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 400*1fa6dee9SAndroid Build Coastguard Worker deps: ["baz", "unchanged"], 401*1fa6dee9SAndroid Build Coastguard Worker } 402*1fa6dee9SAndroid Build Coastguard Worker `, 403*1fa6dee9SAndroid Build Coastguard Worker output: ` 404*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 405*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 406*1fa6dee9SAndroid Build Coastguard Worker deps: [ 407*1fa6dee9SAndroid Build Coastguard Worker "baz_lib", 408*1fa6dee9SAndroid Build Coastguard Worker "unchanged", 409*1fa6dee9SAndroid Build Coastguard Worker ], 410*1fa6dee9SAndroid Build Coastguard Worker } 411*1fa6dee9SAndroid Build Coastguard Worker `, 412*1fa6dee9SAndroid Build Coastguard Worker replaceProperty: "baz=baz_lib,foobar=foobar_lib", 413*1fa6dee9SAndroid Build Coastguard Worker }, { 414*1fa6dee9SAndroid Build Coastguard Worker name: "replace property multiple modules", 415*1fa6dee9SAndroid Build Coastguard Worker property: "deps,required", 416*1fa6dee9SAndroid Build Coastguard Worker input: ` 417*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 418*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 419*1fa6dee9SAndroid Build Coastguard Worker deps: ["baz", "unchanged"], 420*1fa6dee9SAndroid Build Coastguard Worker unchanged: ["baz"], 421*1fa6dee9SAndroid Build Coastguard Worker required: ["foobar"], 422*1fa6dee9SAndroid Build Coastguard Worker } 423*1fa6dee9SAndroid Build Coastguard Worker `, 424*1fa6dee9SAndroid Build Coastguard Worker output: ` 425*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 426*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 427*1fa6dee9SAndroid Build Coastguard Worker deps: [ 428*1fa6dee9SAndroid Build Coastguard Worker "baz_lib", 429*1fa6dee9SAndroid Build Coastguard Worker "unchanged", 430*1fa6dee9SAndroid Build Coastguard Worker ], 431*1fa6dee9SAndroid Build Coastguard Worker unchanged: ["baz"], 432*1fa6dee9SAndroid Build Coastguard Worker required: ["foobar_lib"], 433*1fa6dee9SAndroid Build Coastguard Worker } 434*1fa6dee9SAndroid Build Coastguard Worker `, 435*1fa6dee9SAndroid Build Coastguard Worker replaceProperty: "baz=baz_lib,foobar=foobar_lib", 436*1fa6dee9SAndroid Build Coastguard Worker }, { 437*1fa6dee9SAndroid Build Coastguard Worker name: "replace property string value", 438*1fa6dee9SAndroid Build Coastguard Worker property: "name", 439*1fa6dee9SAndroid Build Coastguard Worker input: ` 440*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 441*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 442*1fa6dee9SAndroid Build Coastguard Worker deps: ["baz"], 443*1fa6dee9SAndroid Build Coastguard Worker unchanged: ["baz"], 444*1fa6dee9SAndroid Build Coastguard Worker required: ["foobar"], 445*1fa6dee9SAndroid Build Coastguard Worker } 446*1fa6dee9SAndroid Build Coastguard Worker `, 447*1fa6dee9SAndroid Build Coastguard Worker output: ` 448*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 449*1fa6dee9SAndroid Build Coastguard Worker name: "foo_lib", 450*1fa6dee9SAndroid Build Coastguard Worker deps: ["baz"], 451*1fa6dee9SAndroid Build Coastguard Worker unchanged: ["baz"], 452*1fa6dee9SAndroid Build Coastguard Worker required: ["foobar"], 453*1fa6dee9SAndroid Build Coastguard Worker } 454*1fa6dee9SAndroid Build Coastguard Worker `, 455*1fa6dee9SAndroid Build Coastguard Worker replaceProperty: "foo=foo_lib", 456*1fa6dee9SAndroid Build Coastguard Worker }, { 457*1fa6dee9SAndroid Build Coastguard Worker name: "replace property string and list values", 458*1fa6dee9SAndroid Build Coastguard Worker property: "name,deps", 459*1fa6dee9SAndroid Build Coastguard Worker input: ` 460*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 461*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 462*1fa6dee9SAndroid Build Coastguard Worker deps: ["baz"], 463*1fa6dee9SAndroid Build Coastguard Worker unchanged: ["baz"], 464*1fa6dee9SAndroid Build Coastguard Worker required: ["foobar"], 465*1fa6dee9SAndroid Build Coastguard Worker } 466*1fa6dee9SAndroid Build Coastguard Worker `, 467*1fa6dee9SAndroid Build Coastguard Worker output: ` 468*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 469*1fa6dee9SAndroid Build Coastguard Worker name: "foo_lib", 470*1fa6dee9SAndroid Build Coastguard Worker deps: ["baz_lib"], 471*1fa6dee9SAndroid Build Coastguard Worker unchanged: ["baz"], 472*1fa6dee9SAndroid Build Coastguard Worker required: ["foobar"], 473*1fa6dee9SAndroid Build Coastguard Worker } 474*1fa6dee9SAndroid Build Coastguard Worker `, 475*1fa6dee9SAndroid Build Coastguard Worker replaceProperty: "foo=foo_lib,baz=baz_lib", 476*1fa6dee9SAndroid Build Coastguard Worker }, { 477*1fa6dee9SAndroid Build Coastguard Worker name: "move contents of property into non-existing property", 478*1fa6dee9SAndroid Build Coastguard Worker input: ` 479*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 480*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 481*1fa6dee9SAndroid Build Coastguard Worker bar: ["barContents"], 482*1fa6dee9SAndroid Build Coastguard Worker } 483*1fa6dee9SAndroid Build Coastguard Worker`, 484*1fa6dee9SAndroid Build Coastguard Worker output: ` 485*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 486*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 487*1fa6dee9SAndroid Build Coastguard Worker baz: ["barContents"], 488*1fa6dee9SAndroid Build Coastguard Worker } 489*1fa6dee9SAndroid Build Coastguard Worker `, 490*1fa6dee9SAndroid Build Coastguard Worker property: "bar", 491*1fa6dee9SAndroid Build Coastguard Worker moveProperty: true, 492*1fa6dee9SAndroid Build Coastguard Worker newLocation: "baz", 493*1fa6dee9SAndroid Build Coastguard Worker }, { 494*1fa6dee9SAndroid Build Coastguard Worker name: "move contents of property into existing property", 495*1fa6dee9SAndroid Build Coastguard Worker input: ` 496*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 497*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 498*1fa6dee9SAndroid Build Coastguard Worker baz: ["bazContents"], 499*1fa6dee9SAndroid Build Coastguard Worker bar: ["barContents"], 500*1fa6dee9SAndroid Build Coastguard Worker } 501*1fa6dee9SAndroid Build Coastguard Worker `, 502*1fa6dee9SAndroid Build Coastguard Worker output: ` 503*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 504*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 505*1fa6dee9SAndroid Build Coastguard Worker baz: [ 506*1fa6dee9SAndroid Build Coastguard Worker "bazContents", 507*1fa6dee9SAndroid Build Coastguard Worker "barContents", 508*1fa6dee9SAndroid Build Coastguard Worker ], 509*1fa6dee9SAndroid Build Coastguard Worker 510*1fa6dee9SAndroid Build Coastguard Worker } 511*1fa6dee9SAndroid Build Coastguard Worker `, 512*1fa6dee9SAndroid Build Coastguard Worker property: "bar", 513*1fa6dee9SAndroid Build Coastguard Worker moveProperty: true, 514*1fa6dee9SAndroid Build Coastguard Worker newLocation: "baz", 515*1fa6dee9SAndroid Build Coastguard Worker }, { 516*1fa6dee9SAndroid Build Coastguard Worker name: "replace nested", 517*1fa6dee9SAndroid Build Coastguard Worker input: ` 518*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 519*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 520*1fa6dee9SAndroid Build Coastguard Worker foo: { 521*1fa6dee9SAndroid Build Coastguard Worker bar: "baz", 522*1fa6dee9SAndroid Build Coastguard Worker }, 523*1fa6dee9SAndroid Build Coastguard Worker } 524*1fa6dee9SAndroid Build Coastguard Worker `, 525*1fa6dee9SAndroid Build Coastguard Worker output: ` 526*1fa6dee9SAndroid Build Coastguard Worker cc_foo { 527*1fa6dee9SAndroid Build Coastguard Worker name: "foo", 528*1fa6dee9SAndroid Build Coastguard Worker foo: { 529*1fa6dee9SAndroid Build Coastguard Worker bar: "baz2", 530*1fa6dee9SAndroid Build Coastguard Worker }, 531*1fa6dee9SAndroid Build Coastguard Worker } 532*1fa6dee9SAndroid Build Coastguard Worker `, 533*1fa6dee9SAndroid Build Coastguard Worker property: "foo.bar", 534*1fa6dee9SAndroid Build Coastguard Worker replaceProperty: "baz=baz2", 535*1fa6dee9SAndroid Build Coastguard Worker }, 536*1fa6dee9SAndroid Build Coastguard Worker} 537*1fa6dee9SAndroid Build Coastguard Worker 538*1fa6dee9SAndroid Build Coastguard Workerfunc simplifyModuleDefinition(def string) string { 539*1fa6dee9SAndroid Build Coastguard Worker var result string 540*1fa6dee9SAndroid Build Coastguard Worker for _, line := range strings.Split(def, "\n") { 541*1fa6dee9SAndroid Build Coastguard Worker result += strings.TrimSpace(line) 542*1fa6dee9SAndroid Build Coastguard Worker } 543*1fa6dee9SAndroid Build Coastguard Worker return result 544*1fa6dee9SAndroid Build Coastguard Worker} 545*1fa6dee9SAndroid Build Coastguard Workerfunc TestProcessModule(t *testing.T) { 546*1fa6dee9SAndroid Build Coastguard Worker for _, testCase := range testCases { 547*1fa6dee9SAndroid Build Coastguard Worker t.Run(testCase.name, func(t *testing.T) { 548*1fa6dee9SAndroid Build Coastguard Worker targetedProperties.Set(testCase.property) 549*1fa6dee9SAndroid Build Coastguard Worker addIdents.Set(testCase.addSet) 550*1fa6dee9SAndroid Build Coastguard Worker removeIdents.Set(testCase.removeSet) 551*1fa6dee9SAndroid Build Coastguard Worker removeProperty = &testCase.removeProperty 552*1fa6dee9SAndroid Build Coastguard Worker moveProperty = &testCase.moveProperty 553*1fa6dee9SAndroid Build Coastguard Worker newLocation = testCase.newLocation 554*1fa6dee9SAndroid Build Coastguard Worker setString = testCase.setString 555*1fa6dee9SAndroid Build Coastguard Worker setBool = testCase.setBool 556*1fa6dee9SAndroid Build Coastguard Worker addLiteral = testCase.addLiteral 557*1fa6dee9SAndroid Build Coastguard Worker replaceProperty.Set(testCase.replaceProperty) 558*1fa6dee9SAndroid Build Coastguard Worker 559*1fa6dee9SAndroid Build Coastguard Worker targetedModules.Set("foo") 560*1fa6dee9SAndroid Build Coastguard Worker 561*1fa6dee9SAndroid Build Coastguard Worker out := &bytes.Buffer{} 562*1fa6dee9SAndroid Build Coastguard Worker err := processFile("", strings.NewReader(testCase.input), out) 563*1fa6dee9SAndroid Build Coastguard Worker if err != nil { 564*1fa6dee9SAndroid Build Coastguard Worker t.Fatalf("unexpected error: %s", err.Error()) 565*1fa6dee9SAndroid Build Coastguard Worker } 566*1fa6dee9SAndroid Build Coastguard Worker if simplifyModuleDefinition(out.String()) != simplifyModuleDefinition(testCase.output) { 567*1fa6dee9SAndroid Build Coastguard Worker t.Errorf("expected module definition:") 568*1fa6dee9SAndroid Build Coastguard Worker t.Errorf(" %s", testCase.output) 569*1fa6dee9SAndroid Build Coastguard Worker t.Errorf("actual module definition:") 570*1fa6dee9SAndroid Build Coastguard Worker t.Errorf(" %s", out.String()) 571*1fa6dee9SAndroid Build Coastguard Worker } 572*1fa6dee9SAndroid Build Coastguard Worker }) 573*1fa6dee9SAndroid Build Coastguard Worker } 574*1fa6dee9SAndroid Build Coastguard Worker} 575*1fa6dee9SAndroid Build Coastguard Worker 576*1fa6dee9SAndroid Build Coastguard Workerfunc TestReplacementsCycleError(t *testing.T) { 577*1fa6dee9SAndroid Build Coastguard Worker cycleString := "old1=new1,new1=old1" 578*1fa6dee9SAndroid Build Coastguard Worker err := replaceProperty.Set(cycleString) 579*1fa6dee9SAndroid Build Coastguard Worker 580*1fa6dee9SAndroid Build Coastguard Worker if err.Error() != "Duplicated replacement name new1" { 581*1fa6dee9SAndroid Build Coastguard Worker t.Errorf("Error message did not match") 582*1fa6dee9SAndroid Build Coastguard Worker t.Errorf("Expected ") 583*1fa6dee9SAndroid Build Coastguard Worker t.Errorf(" Duplicated replacement name new1") 584*1fa6dee9SAndroid Build Coastguard Worker t.Errorf("actual error:") 585*1fa6dee9SAndroid Build Coastguard Worker t.Errorf(" %s", err.Error()) 586*1fa6dee9SAndroid Build Coastguard Worker t.FailNow() 587*1fa6dee9SAndroid Build Coastguard Worker } 588*1fa6dee9SAndroid Build Coastguard Worker} 589*1fa6dee9SAndroid Build Coastguard Worker 590*1fa6dee9SAndroid Build Coastguard Workerfunc TestReplacementsDuplicatedError(t *testing.T) { 591*1fa6dee9SAndroid Build Coastguard Worker cycleString := "a=b,a=c" 592*1fa6dee9SAndroid Build Coastguard Worker err := replaceProperty.Set(cycleString) 593*1fa6dee9SAndroid Build Coastguard Worker 594*1fa6dee9SAndroid Build Coastguard Worker if err.Error() != "Duplicated replacement name a" { 595*1fa6dee9SAndroid Build Coastguard Worker t.Errorf("Error message did not match") 596*1fa6dee9SAndroid Build Coastguard Worker t.Errorf("Expected ") 597*1fa6dee9SAndroid Build Coastguard Worker t.Errorf(" Duplicated replacement name a") 598*1fa6dee9SAndroid Build Coastguard Worker t.Errorf("actual error:") 599*1fa6dee9SAndroid Build Coastguard Worker t.Errorf(" %s", err.Error()) 600*1fa6dee9SAndroid Build Coastguard Worker t.FailNow() 601*1fa6dee9SAndroid Build Coastguard Worker } 602*1fa6dee9SAndroid Build Coastguard Worker} 603*1fa6dee9SAndroid Build Coastguard Worker 604*1fa6dee9SAndroid Build Coastguard Workerfunc TestReplacementsMultipleReplacedToSame(t *testing.T) { 605*1fa6dee9SAndroid Build Coastguard Worker cycleString := "a=c,d=c" 606*1fa6dee9SAndroid Build Coastguard Worker err := replaceProperty.Set(cycleString) 607*1fa6dee9SAndroid Build Coastguard Worker 608*1fa6dee9SAndroid Build Coastguard Worker if err.Error() != "Duplicated replacement name c" { 609*1fa6dee9SAndroid Build Coastguard Worker t.Errorf("Error message did not match") 610*1fa6dee9SAndroid Build Coastguard Worker t.Errorf("Expected ") 611*1fa6dee9SAndroid Build Coastguard Worker t.Errorf(" Duplicated replacement name c") 612*1fa6dee9SAndroid Build Coastguard Worker t.Errorf("actual error:") 613*1fa6dee9SAndroid Build Coastguard Worker t.Errorf(" %s", err.Error()) 614*1fa6dee9SAndroid Build Coastguard Worker t.FailNow() 615*1fa6dee9SAndroid Build Coastguard Worker } 616*1fa6dee9SAndroid Build Coastguard Worker} 617