xref: /aosp_15_r20/build/blueprint/parser/printer_test.go (revision 1fa6dee971e1612fa5cc0aa5ca2d35a22e2c34a3)
1*1fa6dee9SAndroid Build Coastguard Worker// Copyright 2014 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 parser
16*1fa6dee9SAndroid Build Coastguard Worker
17*1fa6dee9SAndroid Build Coastguard Workerimport (
18*1fa6dee9SAndroid Build Coastguard Worker	"bytes"
19*1fa6dee9SAndroid Build Coastguard Worker	"testing"
20*1fa6dee9SAndroid Build Coastguard Worker)
21*1fa6dee9SAndroid Build Coastguard Worker
22*1fa6dee9SAndroid Build Coastguard Workervar validPrinterTestCases = []struct {
23*1fa6dee9SAndroid Build Coastguard Worker	name   string
24*1fa6dee9SAndroid Build Coastguard Worker	input  string
25*1fa6dee9SAndroid Build Coastguard Worker	output string
26*1fa6dee9SAndroid Build Coastguard Worker}{
27*1fa6dee9SAndroid Build Coastguard Worker	{
28*1fa6dee9SAndroid Build Coastguard Worker		input: `
29*1fa6dee9SAndroid Build Coastguard Workerfoo {}
30*1fa6dee9SAndroid Build Coastguard Worker`,
31*1fa6dee9SAndroid Build Coastguard Worker		output: `
32*1fa6dee9SAndroid Build Coastguard Workerfoo {}
33*1fa6dee9SAndroid Build Coastguard Worker`,
34*1fa6dee9SAndroid Build Coastguard Worker	},
35*1fa6dee9SAndroid Build Coastguard Worker	{
36*1fa6dee9SAndroid Build Coastguard Worker		input: `
37*1fa6dee9SAndroid Build Coastguard Workerfoo(name= "abc",num= 4,)
38*1fa6dee9SAndroid Build Coastguard Worker`,
39*1fa6dee9SAndroid Build Coastguard Worker		output: `
40*1fa6dee9SAndroid Build Coastguard Workerfoo {
41*1fa6dee9SAndroid Build Coastguard Worker    name: "abc",
42*1fa6dee9SAndroid Build Coastguard Worker    num: 4,
43*1fa6dee9SAndroid Build Coastguard Worker}
44*1fa6dee9SAndroid Build Coastguard Worker`,
45*1fa6dee9SAndroid Build Coastguard Worker	},
46*1fa6dee9SAndroid Build Coastguard Worker	{
47*1fa6dee9SAndroid Build Coastguard Worker		input: `
48*1fa6dee9SAndroid Build Coastguard Worker			foo {
49*1fa6dee9SAndroid Build Coastguard Worker				stuff: ["asdf", "jkl;", "qwert",
50*1fa6dee9SAndroid Build Coastguard Worker					"uiop", "bnm,"]
51*1fa6dee9SAndroid Build Coastguard Worker			}
52*1fa6dee9SAndroid Build Coastguard Worker			`,
53*1fa6dee9SAndroid Build Coastguard Worker		output: `
54*1fa6dee9SAndroid Build Coastguard Workerfoo {
55*1fa6dee9SAndroid Build Coastguard Worker    stuff: [
56*1fa6dee9SAndroid Build Coastguard Worker        "asdf",
57*1fa6dee9SAndroid Build Coastguard Worker        "bnm,",
58*1fa6dee9SAndroid Build Coastguard Worker        "jkl;",
59*1fa6dee9SAndroid Build Coastguard Worker        "qwert",
60*1fa6dee9SAndroid Build Coastguard Worker        "uiop",
61*1fa6dee9SAndroid Build Coastguard Worker    ],
62*1fa6dee9SAndroid Build Coastguard Worker}
63*1fa6dee9SAndroid Build Coastguard Worker`,
64*1fa6dee9SAndroid Build Coastguard Worker	},
65*1fa6dee9SAndroid Build Coastguard Worker	{
66*1fa6dee9SAndroid Build Coastguard Worker		input: `
67*1fa6dee9SAndroid Build Coastguard Worker		        var = "asdf"
68*1fa6dee9SAndroid Build Coastguard Worker			foo {
69*1fa6dee9SAndroid Build Coastguard Worker				stuff: ["asdf"] + var,
70*1fa6dee9SAndroid Build Coastguard Worker			}`,
71*1fa6dee9SAndroid Build Coastguard Worker		output: `
72*1fa6dee9SAndroid Build Coastguard Workervar = "asdf"
73*1fa6dee9SAndroid Build Coastguard Workerfoo {
74*1fa6dee9SAndroid Build Coastguard Worker    stuff: ["asdf"] + var,
75*1fa6dee9SAndroid Build Coastguard Worker}
76*1fa6dee9SAndroid Build Coastguard Worker`,
77*1fa6dee9SAndroid Build Coastguard Worker	},
78*1fa6dee9SAndroid Build Coastguard Worker	{
79*1fa6dee9SAndroid Build Coastguard Worker		input: `
80*1fa6dee9SAndroid Build Coastguard Worker		        var = "asdf"
81*1fa6dee9SAndroid Build Coastguard Worker			foo {
82*1fa6dee9SAndroid Build Coastguard Worker				stuff: [
83*1fa6dee9SAndroid Build Coastguard Worker				    "asdf"
84*1fa6dee9SAndroid Build Coastguard Worker				] + var,
85*1fa6dee9SAndroid Build Coastguard Worker			}`,
86*1fa6dee9SAndroid Build Coastguard Worker		output: `
87*1fa6dee9SAndroid Build Coastguard Workervar = "asdf"
88*1fa6dee9SAndroid Build Coastguard Workerfoo {
89*1fa6dee9SAndroid Build Coastguard Worker    stuff: [
90*1fa6dee9SAndroid Build Coastguard Worker        "asdf",
91*1fa6dee9SAndroid Build Coastguard Worker    ] + var,
92*1fa6dee9SAndroid Build Coastguard Worker}
93*1fa6dee9SAndroid Build Coastguard Worker`,
94*1fa6dee9SAndroid Build Coastguard Worker	},
95*1fa6dee9SAndroid Build Coastguard Worker	{
96*1fa6dee9SAndroid Build Coastguard Worker		input: `
97*1fa6dee9SAndroid Build Coastguard Worker		        var = "asdf"
98*1fa6dee9SAndroid Build Coastguard Worker			foo {
99*1fa6dee9SAndroid Build Coastguard Worker				stuff: ["asdf"] + var + ["qwert"],
100*1fa6dee9SAndroid Build Coastguard Worker			}`,
101*1fa6dee9SAndroid Build Coastguard Worker		output: `
102*1fa6dee9SAndroid Build Coastguard Workervar = "asdf"
103*1fa6dee9SAndroid Build Coastguard Workerfoo {
104*1fa6dee9SAndroid Build Coastguard Worker    stuff: ["asdf"] + var + ["qwert"],
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		input: `
110*1fa6dee9SAndroid Build Coastguard Worker		foo {
111*1fa6dee9SAndroid Build Coastguard Worker			stuff: {
112*1fa6dee9SAndroid Build Coastguard Worker				isGood: true,
113*1fa6dee9SAndroid Build Coastguard Worker				name: "bar",
114*1fa6dee9SAndroid Build Coastguard Worker				num: 4,
115*1fa6dee9SAndroid Build Coastguard Worker			}
116*1fa6dee9SAndroid Build Coastguard Worker		}
117*1fa6dee9SAndroid Build Coastguard Worker		`,
118*1fa6dee9SAndroid Build Coastguard Worker		output: `
119*1fa6dee9SAndroid Build Coastguard Workerfoo {
120*1fa6dee9SAndroid Build Coastguard Worker    stuff: {
121*1fa6dee9SAndroid Build Coastguard Worker        isGood: true,
122*1fa6dee9SAndroid Build Coastguard Worker        name: "bar",
123*1fa6dee9SAndroid Build Coastguard Worker        num: 4,
124*1fa6dee9SAndroid Build Coastguard Worker    },
125*1fa6dee9SAndroid Build Coastguard Worker}
126*1fa6dee9SAndroid Build Coastguard Worker`,
127*1fa6dee9SAndroid Build Coastguard Worker	},
128*1fa6dee9SAndroid Build Coastguard Worker	{
129*1fa6dee9SAndroid Build Coastguard Worker		input: `
130*1fa6dee9SAndroid Build Coastguard Worker// comment1
131*1fa6dee9SAndroid Build Coastguard Workerfoo {
132*1fa6dee9SAndroid Build Coastguard Worker	// comment2
133*1fa6dee9SAndroid Build Coastguard Worker	isGood: true,  // comment3
134*1fa6dee9SAndroid Build Coastguard Worker}
135*1fa6dee9SAndroid Build Coastguard Worker`,
136*1fa6dee9SAndroid Build Coastguard Worker		output: `
137*1fa6dee9SAndroid Build Coastguard Worker// comment1
138*1fa6dee9SAndroid Build Coastguard Workerfoo {
139*1fa6dee9SAndroid Build Coastguard Worker    // comment2
140*1fa6dee9SAndroid Build Coastguard Worker    isGood: true, // comment3
141*1fa6dee9SAndroid Build Coastguard Worker}
142*1fa6dee9SAndroid Build Coastguard Worker`,
143*1fa6dee9SAndroid Build Coastguard Worker	},
144*1fa6dee9SAndroid Build Coastguard Worker	{
145*1fa6dee9SAndroid Build Coastguard Worker		input: `
146*1fa6dee9SAndroid Build Coastguard Workerfoo {
147*1fa6dee9SAndroid Build Coastguard Worker	name: "abc",
148*1fa6dee9SAndroid Build Coastguard Worker	num: 4,
149*1fa6dee9SAndroid Build Coastguard Worker}
150*1fa6dee9SAndroid Build Coastguard Worker
151*1fa6dee9SAndroid Build Coastguard Workerbar  {
152*1fa6dee9SAndroid Build Coastguard Worker	name: "def",
153*1fa6dee9SAndroid Build Coastguard Worker	num: 5,
154*1fa6dee9SAndroid Build Coastguard Worker}
155*1fa6dee9SAndroid Build Coastguard Worker		`,
156*1fa6dee9SAndroid Build Coastguard Worker		output: `
157*1fa6dee9SAndroid Build Coastguard Workerfoo {
158*1fa6dee9SAndroid Build Coastguard Worker    name: "abc",
159*1fa6dee9SAndroid Build Coastguard Worker    num: 4,
160*1fa6dee9SAndroid Build Coastguard Worker}
161*1fa6dee9SAndroid Build Coastguard Worker
162*1fa6dee9SAndroid Build Coastguard Workerbar {
163*1fa6dee9SAndroid Build Coastguard Worker    name: "def",
164*1fa6dee9SAndroid Build Coastguard Worker    num: 5,
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		input: `
170*1fa6dee9SAndroid Build Coastguard Workerfoo {
171*1fa6dee9SAndroid Build Coastguard Worker    bar: "b" +
172*1fa6dee9SAndroid Build Coastguard Worker        "a" +
173*1fa6dee9SAndroid Build Coastguard Worker	"z",
174*1fa6dee9SAndroid Build Coastguard Worker}
175*1fa6dee9SAndroid Build Coastguard Worker`,
176*1fa6dee9SAndroid Build Coastguard Worker		output: `
177*1fa6dee9SAndroid Build Coastguard Workerfoo {
178*1fa6dee9SAndroid Build Coastguard Worker    bar: "b" +
179*1fa6dee9SAndroid Build Coastguard Worker        "a" +
180*1fa6dee9SAndroid Build Coastguard Worker        "z",
181*1fa6dee9SAndroid Build Coastguard Worker}
182*1fa6dee9SAndroid Build Coastguard Worker`,
183*1fa6dee9SAndroid Build Coastguard Worker	},
184*1fa6dee9SAndroid Build Coastguard Worker	{
185*1fa6dee9SAndroid Build Coastguard Worker		input: `
186*1fa6dee9SAndroid Build Coastguard Workerfoo = "stuff"
187*1fa6dee9SAndroid Build Coastguard Workerbar = foo
188*1fa6dee9SAndroid Build Coastguard Workerbaz = foo + bar
189*1fa6dee9SAndroid Build Coastguard Workerbaz += foo
190*1fa6dee9SAndroid Build Coastguard Worker`,
191*1fa6dee9SAndroid Build Coastguard Worker		output: `
192*1fa6dee9SAndroid Build Coastguard Workerfoo = "stuff"
193*1fa6dee9SAndroid Build Coastguard Workerbar = foo
194*1fa6dee9SAndroid Build Coastguard Workerbaz = foo + bar
195*1fa6dee9SAndroid Build Coastguard Workerbaz += foo
196*1fa6dee9SAndroid Build Coastguard Worker`,
197*1fa6dee9SAndroid Build Coastguard Worker	},
198*1fa6dee9SAndroid Build Coastguard Worker	{
199*1fa6dee9SAndroid Build Coastguard Worker		input: `
200*1fa6dee9SAndroid Build Coastguard Workerfoo = 100
201*1fa6dee9SAndroid Build Coastguard Workerbar = foo
202*1fa6dee9SAndroid Build Coastguard Workerbaz = foo + bar
203*1fa6dee9SAndroid Build Coastguard Workerbaz += foo
204*1fa6dee9SAndroid Build Coastguard Worker`,
205*1fa6dee9SAndroid Build Coastguard Worker		output: `
206*1fa6dee9SAndroid Build Coastguard Workerfoo = 100
207*1fa6dee9SAndroid Build Coastguard Workerbar = foo
208*1fa6dee9SAndroid Build Coastguard Workerbaz = foo + bar
209*1fa6dee9SAndroid Build Coastguard Workerbaz += foo
210*1fa6dee9SAndroid Build Coastguard Worker`,
211*1fa6dee9SAndroid Build Coastguard Worker	},
212*1fa6dee9SAndroid Build Coastguard Worker	{
213*1fa6dee9SAndroid Build Coastguard Worker		input: `
214*1fa6dee9SAndroid Build Coastguard Workerfoo = "bar " +
215*1fa6dee9SAndroid Build Coastguard Worker    "" +
216*1fa6dee9SAndroid Build Coastguard Worker    "baz"
217*1fa6dee9SAndroid Build Coastguard Worker`,
218*1fa6dee9SAndroid Build Coastguard Worker		output: `
219*1fa6dee9SAndroid Build Coastguard Workerfoo = "bar " +
220*1fa6dee9SAndroid Build Coastguard Worker    "" +
221*1fa6dee9SAndroid Build Coastguard Worker    "baz"
222*1fa6dee9SAndroid Build Coastguard Worker`,
223*1fa6dee9SAndroid Build Coastguard Worker	},
224*1fa6dee9SAndroid Build Coastguard Worker	{
225*1fa6dee9SAndroid Build Coastguard Worker		input: `
226*1fa6dee9SAndroid Build Coastguard Worker//test
227*1fa6dee9SAndroid Build Coastguard Workertest /* test */ {
228*1fa6dee9SAndroid Build Coastguard Worker    srcs: [
229*1fa6dee9SAndroid Build Coastguard Worker        /*"bootstrap/bootstrap.go",
230*1fa6dee9SAndroid Build Coastguard Worker    "bootstrap/cleanup.go",*/
231*1fa6dee9SAndroid Build Coastguard Worker        "bootstrap/command.go",
232*1fa6dee9SAndroid Build Coastguard Worker        "bootstrap/doc.go", //doc.go
233*1fa6dee9SAndroid Build Coastguard Worker        "bootstrap/config.go", //config.go
234*1fa6dee9SAndroid Build Coastguard Worker    ],
235*1fa6dee9SAndroid Build Coastguard Worker    deps: ["libabc"],
236*1fa6dee9SAndroid Build Coastguard Worker    incs: []
237*1fa6dee9SAndroid Build Coastguard Worker} //test
238*1fa6dee9SAndroid Build Coastguard Worker//test
239*1fa6dee9SAndroid Build Coastguard Workertest2 {
240*1fa6dee9SAndroid Build Coastguard Worker}
241*1fa6dee9SAndroid Build Coastguard Worker
242*1fa6dee9SAndroid Build Coastguard Worker
243*1fa6dee9SAndroid Build Coastguard Worker//test3
244*1fa6dee9SAndroid Build Coastguard Worker`,
245*1fa6dee9SAndroid Build Coastguard Worker		output: `
246*1fa6dee9SAndroid Build Coastguard Worker//test
247*1fa6dee9SAndroid Build Coastguard Workertest /* test */ {
248*1fa6dee9SAndroid Build Coastguard Worker    srcs: [
249*1fa6dee9SAndroid Build Coastguard Worker        /*"bootstrap/bootstrap.go",
250*1fa6dee9SAndroid Build Coastguard Worker        "bootstrap/cleanup.go",*/
251*1fa6dee9SAndroid Build Coastguard Worker        "bootstrap/command.go",
252*1fa6dee9SAndroid Build Coastguard Worker        "bootstrap/config.go", //config.go
253*1fa6dee9SAndroid Build Coastguard Worker        "bootstrap/doc.go", //doc.go
254*1fa6dee9SAndroid Build Coastguard Worker    ],
255*1fa6dee9SAndroid Build Coastguard Worker    deps: ["libabc"],
256*1fa6dee9SAndroid Build Coastguard Worker    incs: [],
257*1fa6dee9SAndroid Build Coastguard Worker} //test
258*1fa6dee9SAndroid Build Coastguard Worker//test
259*1fa6dee9SAndroid Build Coastguard Worker
260*1fa6dee9SAndroid Build Coastguard Workertest2 {
261*1fa6dee9SAndroid Build Coastguard Worker}
262*1fa6dee9SAndroid Build Coastguard Worker
263*1fa6dee9SAndroid Build Coastguard Worker//test3
264*1fa6dee9SAndroid Build Coastguard Worker`,
265*1fa6dee9SAndroid Build Coastguard Worker	},
266*1fa6dee9SAndroid Build Coastguard Worker	{
267*1fa6dee9SAndroid Build Coastguard Worker		input: `
268*1fa6dee9SAndroid Build Coastguard Worker// test
269*1fa6dee9SAndroid Build Coastguard Workermodule // test
270*1fa6dee9SAndroid Build Coastguard Worker
271*1fa6dee9SAndroid Build Coastguard Worker {
272*1fa6dee9SAndroid Build Coastguard Worker    srcs
273*1fa6dee9SAndroid Build Coastguard Worker   : [
274*1fa6dee9SAndroid Build Coastguard Worker        "src1.c",
275*1fa6dee9SAndroid Build Coastguard Worker        "src2.c",
276*1fa6dee9SAndroid Build Coastguard Worker    ],
277*1fa6dee9SAndroid Build Coastguard Worker//test
278*1fa6dee9SAndroid Build Coastguard Worker}
279*1fa6dee9SAndroid Build Coastguard Worker//test2
280*1fa6dee9SAndroid Build Coastguard Worker`,
281*1fa6dee9SAndroid Build Coastguard Worker		output: `
282*1fa6dee9SAndroid Build Coastguard Worker// test
283*1fa6dee9SAndroid Build Coastguard Workermodule { // test
284*1fa6dee9SAndroid Build Coastguard Worker    srcs: [
285*1fa6dee9SAndroid Build Coastguard Worker        "src1.c",
286*1fa6dee9SAndroid Build Coastguard Worker        "src2.c",
287*1fa6dee9SAndroid Build Coastguard Worker    ],
288*1fa6dee9SAndroid Build Coastguard Worker    //test
289*1fa6dee9SAndroid Build Coastguard Worker}
290*1fa6dee9SAndroid Build Coastguard Worker
291*1fa6dee9SAndroid Build Coastguard Worker//test2
292*1fa6dee9SAndroid Build Coastguard Worker`,
293*1fa6dee9SAndroid Build Coastguard Worker	},
294*1fa6dee9SAndroid Build Coastguard Worker	{
295*1fa6dee9SAndroid Build Coastguard Worker		input: `
296*1fa6dee9SAndroid Build Coastguard Worker/*test {
297*1fa6dee9SAndroid Build Coastguard Worker    test: true,
298*1fa6dee9SAndroid Build Coastguard Worker}*/
299*1fa6dee9SAndroid Build Coastguard Worker
300*1fa6dee9SAndroid Build Coastguard Workertest {
301*1fa6dee9SAndroid Build Coastguard Worker/*test: true,*/
302*1fa6dee9SAndroid Build Coastguard Worker}
303*1fa6dee9SAndroid Build Coastguard Worker
304*1fa6dee9SAndroid Build Coastguard Worker// This
305*1fa6dee9SAndroid Build Coastguard Worker/* Is *//* A */ // A
306*1fa6dee9SAndroid Build Coastguard Worker// A
307*1fa6dee9SAndroid Build Coastguard Worker
308*1fa6dee9SAndroid Build Coastguard Worker// Multiline
309*1fa6dee9SAndroid Build Coastguard Worker// Comment
310*1fa6dee9SAndroid Build Coastguard Worker
311*1fa6dee9SAndroid Build Coastguard Workertest {}
312*1fa6dee9SAndroid Build Coastguard Worker
313*1fa6dee9SAndroid Build Coastguard Worker// This
314*1fa6dee9SAndroid Build Coastguard Worker/* Is */
315*1fa6dee9SAndroid Build Coastguard Worker// A
316*1fa6dee9SAndroid Build Coastguard Worker// Trailing
317*1fa6dee9SAndroid Build Coastguard Worker
318*1fa6dee9SAndroid Build Coastguard Worker// Multiline
319*1fa6dee9SAndroid Build Coastguard Worker// Comment
320*1fa6dee9SAndroid Build Coastguard Worker`,
321*1fa6dee9SAndroid Build Coastguard Worker		output: `
322*1fa6dee9SAndroid Build Coastguard Worker/*test {
323*1fa6dee9SAndroid Build Coastguard Worker    test: true,
324*1fa6dee9SAndroid Build Coastguard Worker}*/
325*1fa6dee9SAndroid Build Coastguard Worker
326*1fa6dee9SAndroid Build Coastguard Workertest {
327*1fa6dee9SAndroid Build Coastguard Worker    /*test: true,*/
328*1fa6dee9SAndroid Build Coastguard Worker}
329*1fa6dee9SAndroid Build Coastguard Worker
330*1fa6dee9SAndroid Build Coastguard Worker// This
331*1fa6dee9SAndroid Build Coastguard Worker/* Is */ /* A */ // A
332*1fa6dee9SAndroid Build Coastguard Worker// A
333*1fa6dee9SAndroid Build Coastguard Worker
334*1fa6dee9SAndroid Build Coastguard Worker// Multiline
335*1fa6dee9SAndroid Build Coastguard Worker// Comment
336*1fa6dee9SAndroid Build Coastguard Worker
337*1fa6dee9SAndroid Build Coastguard Workertest {}
338*1fa6dee9SAndroid Build Coastguard Worker
339*1fa6dee9SAndroid Build Coastguard Worker// This
340*1fa6dee9SAndroid Build Coastguard Worker/* Is */
341*1fa6dee9SAndroid Build Coastguard Worker// A
342*1fa6dee9SAndroid Build Coastguard Worker// Trailing
343*1fa6dee9SAndroid Build Coastguard Worker
344*1fa6dee9SAndroid Build Coastguard Worker// Multiline
345*1fa6dee9SAndroid Build Coastguard Worker// Comment
346*1fa6dee9SAndroid Build Coastguard Worker`,
347*1fa6dee9SAndroid Build Coastguard Worker	},
348*1fa6dee9SAndroid Build Coastguard Worker	{
349*1fa6dee9SAndroid Build Coastguard Worker		input: `
350*1fa6dee9SAndroid Build Coastguard Workertest // test
351*1fa6dee9SAndroid Build Coastguard Worker
352*1fa6dee9SAndroid Build Coastguard Worker// test
353*1fa6dee9SAndroid Build Coastguard Worker{
354*1fa6dee9SAndroid Build Coastguard Worker}
355*1fa6dee9SAndroid Build Coastguard Worker`,
356*1fa6dee9SAndroid Build Coastguard Worker		output: `
357*1fa6dee9SAndroid Build Coastguard Workertest { // test
358*1fa6dee9SAndroid Build Coastguard Worker// test
359*1fa6dee9SAndroid Build Coastguard Worker}
360*1fa6dee9SAndroid Build Coastguard Worker`,
361*1fa6dee9SAndroid Build Coastguard Worker	},
362*1fa6dee9SAndroid Build Coastguard Worker	{
363*1fa6dee9SAndroid Build Coastguard Worker		input: `
364*1fa6dee9SAndroid Build Coastguard Worker// test
365*1fa6dee9SAndroid Build Coastguard Workerstuff {
366*1fa6dee9SAndroid Build Coastguard Worker    namespace: "google",
367*1fa6dee9SAndroid Build Coastguard Worker    string_vars: [
368*1fa6dee9SAndroid Build Coastguard Worker      {
369*1fa6dee9SAndroid Build Coastguard Worker          var: "one",
370*1fa6dee9SAndroid Build Coastguard Worker          values: [ "one_a", "one_b",],
371*1fa6dee9SAndroid Build Coastguard Worker      },
372*1fa6dee9SAndroid Build Coastguard Worker      {
373*1fa6dee9SAndroid Build Coastguard Worker          var: "two",
374*1fa6dee9SAndroid Build Coastguard Worker          values: [ "two_a", "two_b", ],
375*1fa6dee9SAndroid Build Coastguard Worker      },
376*1fa6dee9SAndroid Build Coastguard Worker    ],
377*1fa6dee9SAndroid Build Coastguard Worker}`,
378*1fa6dee9SAndroid Build Coastguard Worker		output: `
379*1fa6dee9SAndroid Build Coastguard Worker// test
380*1fa6dee9SAndroid Build Coastguard Workerstuff {
381*1fa6dee9SAndroid Build Coastguard Worker    namespace: "google",
382*1fa6dee9SAndroid Build Coastguard Worker    string_vars: [
383*1fa6dee9SAndroid Build Coastguard Worker        {
384*1fa6dee9SAndroid Build Coastguard Worker            var: "one",
385*1fa6dee9SAndroid Build Coastguard Worker            values: [
386*1fa6dee9SAndroid Build Coastguard Worker                "one_a",
387*1fa6dee9SAndroid Build Coastguard Worker                "one_b",
388*1fa6dee9SAndroid Build Coastguard Worker            ],
389*1fa6dee9SAndroid Build Coastguard Worker        },
390*1fa6dee9SAndroid Build Coastguard Worker        {
391*1fa6dee9SAndroid Build Coastguard Worker            var: "two",
392*1fa6dee9SAndroid Build Coastguard Worker            values: [
393*1fa6dee9SAndroid Build Coastguard Worker                "two_a",
394*1fa6dee9SAndroid Build Coastguard Worker                "two_b",
395*1fa6dee9SAndroid Build Coastguard Worker            ],
396*1fa6dee9SAndroid Build Coastguard Worker        },
397*1fa6dee9SAndroid Build Coastguard Worker    ],
398*1fa6dee9SAndroid Build Coastguard Worker}
399*1fa6dee9SAndroid Build Coastguard Worker`,
400*1fa6dee9SAndroid Build Coastguard Worker	},
401*1fa6dee9SAndroid Build Coastguard Worker	{
402*1fa6dee9SAndroid Build Coastguard Worker		input: `
403*1fa6dee9SAndroid Build Coastguard Worker// test
404*1fa6dee9SAndroid Build Coastguard Workerstuff {
405*1fa6dee9SAndroid Build Coastguard Worker    namespace: "google",
406*1fa6dee9SAndroid Build Coastguard Worker    list_of_lists: [
407*1fa6dee9SAndroid Build Coastguard Worker        [ "a", "b" ],
408*1fa6dee9SAndroid Build Coastguard Worker        [ "c", "d" ],
409*1fa6dee9SAndroid Build Coastguard Worker    ],
410*1fa6dee9SAndroid Build Coastguard Worker}
411*1fa6dee9SAndroid Build Coastguard Worker`,
412*1fa6dee9SAndroid Build Coastguard Worker		output: `
413*1fa6dee9SAndroid Build Coastguard Worker// test
414*1fa6dee9SAndroid Build Coastguard Workerstuff {
415*1fa6dee9SAndroid Build Coastguard Worker    namespace: "google",
416*1fa6dee9SAndroid Build Coastguard Worker    list_of_lists: [
417*1fa6dee9SAndroid Build Coastguard Worker        [
418*1fa6dee9SAndroid Build Coastguard Worker            "a",
419*1fa6dee9SAndroid Build Coastguard Worker            "b",
420*1fa6dee9SAndroid Build Coastguard Worker        ],
421*1fa6dee9SAndroid Build Coastguard Worker        [
422*1fa6dee9SAndroid Build Coastguard Worker            "c",
423*1fa6dee9SAndroid Build Coastguard Worker            "d",
424*1fa6dee9SAndroid Build Coastguard Worker        ],
425*1fa6dee9SAndroid Build Coastguard Worker    ],
426*1fa6dee9SAndroid Build Coastguard Worker}
427*1fa6dee9SAndroid Build Coastguard Worker`,
428*1fa6dee9SAndroid Build Coastguard Worker	},
429*1fa6dee9SAndroid Build Coastguard Worker	{
430*1fa6dee9SAndroid Build Coastguard Worker		input: `
431*1fa6dee9SAndroid Build Coastguard Worker// test
432*1fa6dee9SAndroid Build Coastguard Workerstuff {
433*1fa6dee9SAndroid Build Coastguard Worker    namespace: "google",
434*1fa6dee9SAndroid Build Coastguard Worker    list_of_structs: [{ key1: "a", key2: "b" }],
435*1fa6dee9SAndroid Build Coastguard Worker}
436*1fa6dee9SAndroid Build Coastguard Worker`,
437*1fa6dee9SAndroid Build Coastguard Worker		output: `
438*1fa6dee9SAndroid Build Coastguard Worker// test
439*1fa6dee9SAndroid Build Coastguard Workerstuff {
440*1fa6dee9SAndroid Build Coastguard Worker    namespace: "google",
441*1fa6dee9SAndroid Build Coastguard Worker    list_of_structs: [
442*1fa6dee9SAndroid Build Coastguard Worker        {
443*1fa6dee9SAndroid Build Coastguard Worker            key1: "a",
444*1fa6dee9SAndroid Build Coastguard Worker            key2: "b",
445*1fa6dee9SAndroid Build Coastguard Worker        },
446*1fa6dee9SAndroid Build Coastguard Worker    ],
447*1fa6dee9SAndroid Build Coastguard Worker}
448*1fa6dee9SAndroid Build Coastguard Worker`,
449*1fa6dee9SAndroid Build Coastguard Worker	},
450*1fa6dee9SAndroid Build Coastguard Worker	{
451*1fa6dee9SAndroid Build Coastguard Worker		input: `
452*1fa6dee9SAndroid Build Coastguard Worker// test
453*1fa6dee9SAndroid Build Coastguard Workerfoo {
454*1fa6dee9SAndroid Build Coastguard Worker    stuff: [
455*1fa6dee9SAndroid Build Coastguard Worker        "a", // great comment
456*1fa6dee9SAndroid Build Coastguard Worker        "b",
457*1fa6dee9SAndroid Build Coastguard Worker    ],
458*1fa6dee9SAndroid Build Coastguard Worker}
459*1fa6dee9SAndroid Build Coastguard Worker`,
460*1fa6dee9SAndroid Build Coastguard Worker		output: `
461*1fa6dee9SAndroid Build Coastguard Worker// test
462*1fa6dee9SAndroid Build Coastguard Workerfoo {
463*1fa6dee9SAndroid Build Coastguard Worker    stuff: [
464*1fa6dee9SAndroid Build Coastguard Worker        "a", // great comment
465*1fa6dee9SAndroid Build Coastguard Worker        "b",
466*1fa6dee9SAndroid Build Coastguard Worker    ],
467*1fa6dee9SAndroid Build Coastguard Worker}
468*1fa6dee9SAndroid Build Coastguard Worker`,
469*1fa6dee9SAndroid Build Coastguard Worker	},
470*1fa6dee9SAndroid Build Coastguard Worker	{
471*1fa6dee9SAndroid Build Coastguard Worker		input: `
472*1fa6dee9SAndroid Build Coastguard Worker// test
473*1fa6dee9SAndroid Build Coastguard Workerfoo {
474*1fa6dee9SAndroid Build Coastguard Worker    stuff: [
475*1fa6dee9SAndroid Build Coastguard Worker        "a",
476*1fa6dee9SAndroid Build Coastguard Worker        // b comment
477*1fa6dee9SAndroid Build Coastguard Worker        "b",
478*1fa6dee9SAndroid Build Coastguard Worker    ],
479*1fa6dee9SAndroid Build Coastguard Worker}
480*1fa6dee9SAndroid Build Coastguard Worker`,
481*1fa6dee9SAndroid Build Coastguard Worker		output: `
482*1fa6dee9SAndroid Build Coastguard Worker// test
483*1fa6dee9SAndroid Build Coastguard Workerfoo {
484*1fa6dee9SAndroid Build Coastguard Worker    stuff: [
485*1fa6dee9SAndroid Build Coastguard Worker        "a",
486*1fa6dee9SAndroid Build Coastguard Worker        // b comment
487*1fa6dee9SAndroid Build Coastguard Worker        "b",
488*1fa6dee9SAndroid Build Coastguard Worker    ],
489*1fa6dee9SAndroid Build Coastguard Worker}
490*1fa6dee9SAndroid Build Coastguard Worker`,
491*1fa6dee9SAndroid Build Coastguard Worker	},
492*1fa6dee9SAndroid Build Coastguard Worker	{
493*1fa6dee9SAndroid Build Coastguard Worker		input: `
494*1fa6dee9SAndroid Build Coastguard Worker// test
495*1fa6dee9SAndroid Build Coastguard Workerfoo {
496*1fa6dee9SAndroid Build Coastguard Worker    stuff: [
497*1fa6dee9SAndroid Build Coastguard Worker        "a", // a comment
498*1fa6dee9SAndroid Build Coastguard Worker        // b comment
499*1fa6dee9SAndroid Build Coastguard Worker        "b",
500*1fa6dee9SAndroid Build Coastguard Worker    ],
501*1fa6dee9SAndroid Build Coastguard Worker}
502*1fa6dee9SAndroid Build Coastguard Worker`,
503*1fa6dee9SAndroid Build Coastguard Worker		output: `
504*1fa6dee9SAndroid Build Coastguard Worker// test
505*1fa6dee9SAndroid Build Coastguard Workerfoo {
506*1fa6dee9SAndroid Build Coastguard Worker    stuff: [
507*1fa6dee9SAndroid Build Coastguard Worker        "a", // a comment
508*1fa6dee9SAndroid Build Coastguard Worker        // b comment
509*1fa6dee9SAndroid Build Coastguard Worker        "b",
510*1fa6dee9SAndroid Build Coastguard Worker    ],
511*1fa6dee9SAndroid Build Coastguard Worker}
512*1fa6dee9SAndroid Build Coastguard Worker`,
513*1fa6dee9SAndroid Build Coastguard Worker	},
514*1fa6dee9SAndroid Build Coastguard Worker	{
515*1fa6dee9SAndroid Build Coastguard Worker		input: `
516*1fa6dee9SAndroid Build Coastguard Worker// test
517*1fa6dee9SAndroid Build Coastguard Workerfoo {
518*1fa6dee9SAndroid Build Coastguard Worker    stuff: [
519*1fa6dee9SAndroid Build Coastguard Worker        "a",
520*1fa6dee9SAndroid Build Coastguard Worker        // b comment
521*1fa6dee9SAndroid Build Coastguard Worker        // on multiline
522*1fa6dee9SAndroid Build Coastguard Worker        "b",
523*1fa6dee9SAndroid Build Coastguard Worker    ],
524*1fa6dee9SAndroid Build Coastguard Worker}
525*1fa6dee9SAndroid Build Coastguard Worker`,
526*1fa6dee9SAndroid Build Coastguard Worker		output: `
527*1fa6dee9SAndroid Build Coastguard Worker// test
528*1fa6dee9SAndroid Build Coastguard Workerfoo {
529*1fa6dee9SAndroid Build Coastguard Worker    stuff: [
530*1fa6dee9SAndroid Build Coastguard Worker        "a",
531*1fa6dee9SAndroid Build Coastguard Worker        // b comment
532*1fa6dee9SAndroid Build Coastguard Worker        // on multiline
533*1fa6dee9SAndroid Build Coastguard Worker        "b",
534*1fa6dee9SAndroid Build Coastguard Worker    ],
535*1fa6dee9SAndroid Build Coastguard Worker}
536*1fa6dee9SAndroid Build Coastguard Worker`,
537*1fa6dee9SAndroid Build Coastguard Worker	},
538*1fa6dee9SAndroid Build Coastguard Worker	{ // Line comment are treat as groups separator
539*1fa6dee9SAndroid Build Coastguard Worker		input: `
540*1fa6dee9SAndroid Build Coastguard Worker// test
541*1fa6dee9SAndroid Build Coastguard Workerfoo {
542*1fa6dee9SAndroid Build Coastguard Worker    stuff: [
543*1fa6dee9SAndroid Build Coastguard Worker        "b",
544*1fa6dee9SAndroid Build Coastguard Worker        // a comment
545*1fa6dee9SAndroid Build Coastguard Worker        "a",
546*1fa6dee9SAndroid Build Coastguard Worker    ],
547*1fa6dee9SAndroid Build Coastguard Worker}
548*1fa6dee9SAndroid Build Coastguard Worker`,
549*1fa6dee9SAndroid Build Coastguard Worker		output: `
550*1fa6dee9SAndroid Build Coastguard Worker// test
551*1fa6dee9SAndroid Build Coastguard Workerfoo {
552*1fa6dee9SAndroid Build Coastguard Worker    stuff: [
553*1fa6dee9SAndroid Build Coastguard Worker        "b",
554*1fa6dee9SAndroid Build Coastguard Worker        // a comment
555*1fa6dee9SAndroid Build Coastguard Worker        "a",
556*1fa6dee9SAndroid Build Coastguard Worker    ],
557*1fa6dee9SAndroid Build Coastguard Worker}
558*1fa6dee9SAndroid Build Coastguard Worker`,
559*1fa6dee9SAndroid Build Coastguard Worker	},
560*1fa6dee9SAndroid Build Coastguard Worker	{
561*1fa6dee9SAndroid Build Coastguard Worker		name: "Basic selects",
562*1fa6dee9SAndroid Build Coastguard Worker		input: `
563*1fa6dee9SAndroid Build Coastguard Worker// test
564*1fa6dee9SAndroid Build Coastguard Workerfoo {
565*1fa6dee9SAndroid Build Coastguard Worker    stuff: select(soong_config_variable("my_namespace", "my_variable"), {
566*1fa6dee9SAndroid Build Coastguard Worker        "a": "a2",
567*1fa6dee9SAndroid Build Coastguard Worker        // test2
568*1fa6dee9SAndroid Build Coastguard Worker        "b": "b2",
569*1fa6dee9SAndroid Build Coastguard Worker        // test3
570*1fa6dee9SAndroid Build Coastguard Worker        default: "c2",
571*1fa6dee9SAndroid Build Coastguard Worker    }),
572*1fa6dee9SAndroid Build Coastguard Worker}
573*1fa6dee9SAndroid Build Coastguard Worker`,
574*1fa6dee9SAndroid Build Coastguard Worker		output: `
575*1fa6dee9SAndroid Build Coastguard Worker// test
576*1fa6dee9SAndroid Build Coastguard Workerfoo {
577*1fa6dee9SAndroid Build Coastguard Worker    stuff: select(soong_config_variable("my_namespace", "my_variable"), {
578*1fa6dee9SAndroid Build Coastguard Worker        "a": "a2",
579*1fa6dee9SAndroid Build Coastguard Worker        // test2
580*1fa6dee9SAndroid Build Coastguard Worker        "b": "b2",
581*1fa6dee9SAndroid Build Coastguard Worker        // test3
582*1fa6dee9SAndroid Build Coastguard Worker        default: "c2",
583*1fa6dee9SAndroid Build Coastguard Worker    }),
584*1fa6dee9SAndroid Build Coastguard Worker}
585*1fa6dee9SAndroid Build Coastguard Worker`,
586*1fa6dee9SAndroid Build Coastguard Worker	},
587*1fa6dee9SAndroid Build Coastguard Worker	{
588*1fa6dee9SAndroid Build Coastguard Worker		name: "Remove select with only default",
589*1fa6dee9SAndroid Build Coastguard Worker		input: `
590*1fa6dee9SAndroid Build Coastguard Worker// test
591*1fa6dee9SAndroid Build Coastguard Workerfoo {
592*1fa6dee9SAndroid Build Coastguard Worker    stuff: select(soong_config_variable("my_namespace", "my_variable"), {
593*1fa6dee9SAndroid Build Coastguard Worker        // test2
594*1fa6dee9SAndroid Build Coastguard Worker        default: "c2",
595*1fa6dee9SAndroid Build Coastguard Worker    }),
596*1fa6dee9SAndroid Build Coastguard Worker}
597*1fa6dee9SAndroid Build Coastguard Worker`,
598*1fa6dee9SAndroid Build Coastguard Worker		output: `
599*1fa6dee9SAndroid Build Coastguard Worker// test
600*1fa6dee9SAndroid Build Coastguard Workerfoo {
601*1fa6dee9SAndroid Build Coastguard Worker    stuff: "c2", // test2
602*1fa6dee9SAndroid Build Coastguard Worker}
603*1fa6dee9SAndroid Build Coastguard Worker`,
604*1fa6dee9SAndroid Build Coastguard Worker	},
605*1fa6dee9SAndroid Build Coastguard Worker	{
606*1fa6dee9SAndroid Build Coastguard Worker		name: "Appended selects",
607*1fa6dee9SAndroid Build Coastguard Worker		input: `
608*1fa6dee9SAndroid Build Coastguard Worker// test
609*1fa6dee9SAndroid Build Coastguard Workerfoo {
610*1fa6dee9SAndroid Build Coastguard Worker    stuff: select(soong_config_variable("my_namespace", "my_variable"), {
611*1fa6dee9SAndroid Build Coastguard Worker        "a": "a2",
612*1fa6dee9SAndroid Build Coastguard Worker        // test2
613*1fa6dee9SAndroid Build Coastguard Worker        "b": "b2",
614*1fa6dee9SAndroid Build Coastguard Worker        // test3
615*1fa6dee9SAndroid Build Coastguard Worker        default: "c2",
616*1fa6dee9SAndroid Build Coastguard Worker    }) + select(release_variable("RELEASE_TEST"), {
617*1fa6dee9SAndroid Build Coastguard Worker        "d": "d2",
618*1fa6dee9SAndroid Build Coastguard Worker        "e": "e2",
619*1fa6dee9SAndroid Build Coastguard Worker        default: "f2",
620*1fa6dee9SAndroid Build Coastguard Worker    }),
621*1fa6dee9SAndroid Build Coastguard Worker}
622*1fa6dee9SAndroid Build Coastguard Worker`,
623*1fa6dee9SAndroid Build Coastguard Worker		output: `
624*1fa6dee9SAndroid Build Coastguard Worker// test
625*1fa6dee9SAndroid Build Coastguard Workerfoo {
626*1fa6dee9SAndroid Build Coastguard Worker    stuff: select(soong_config_variable("my_namespace", "my_variable"), {
627*1fa6dee9SAndroid Build Coastguard Worker        "a": "a2",
628*1fa6dee9SAndroid Build Coastguard Worker        // test2
629*1fa6dee9SAndroid Build Coastguard Worker        "b": "b2",
630*1fa6dee9SAndroid Build Coastguard Worker        // test3
631*1fa6dee9SAndroid Build Coastguard Worker        default: "c2",
632*1fa6dee9SAndroid Build Coastguard Worker    }) + select(release_variable("RELEASE_TEST"), {
633*1fa6dee9SAndroid Build Coastguard Worker        "d": "d2",
634*1fa6dee9SAndroid Build Coastguard Worker        "e": "e2",
635*1fa6dee9SAndroid Build Coastguard Worker        default: "f2",
636*1fa6dee9SAndroid Build Coastguard Worker    }),
637*1fa6dee9SAndroid Build Coastguard Worker}
638*1fa6dee9SAndroid Build Coastguard Worker`,
639*1fa6dee9SAndroid Build Coastguard Worker	},
640*1fa6dee9SAndroid Build Coastguard Worker	{
641*1fa6dee9SAndroid Build Coastguard Worker		name: "Select with unset property",
642*1fa6dee9SAndroid Build Coastguard Worker		input: `
643*1fa6dee9SAndroid Build Coastguard Workerfoo {
644*1fa6dee9SAndroid Build Coastguard Worker    stuff: select(soong_config_variable("my_namespace", "my_variable"), {
645*1fa6dee9SAndroid Build Coastguard Worker        "foo": unset,
646*1fa6dee9SAndroid Build Coastguard Worker        default: "c2",
647*1fa6dee9SAndroid Build Coastguard Worker    }),
648*1fa6dee9SAndroid Build Coastguard Worker}
649*1fa6dee9SAndroid Build Coastguard Worker`,
650*1fa6dee9SAndroid Build Coastguard Worker		output: `
651*1fa6dee9SAndroid Build Coastguard Workerfoo {
652*1fa6dee9SAndroid Build Coastguard Worker    stuff: select(soong_config_variable("my_namespace", "my_variable"), {
653*1fa6dee9SAndroid Build Coastguard Worker        "foo": unset,
654*1fa6dee9SAndroid Build Coastguard Worker        default: "c2",
655*1fa6dee9SAndroid Build Coastguard Worker    }),
656*1fa6dee9SAndroid Build Coastguard Worker}
657*1fa6dee9SAndroid Build Coastguard Worker`,
658*1fa6dee9SAndroid Build Coastguard Worker	},
659*1fa6dee9SAndroid Build Coastguard Worker	{
660*1fa6dee9SAndroid Build Coastguard Worker		name: "Multi-condition select",
661*1fa6dee9SAndroid Build Coastguard Worker		input: `
662*1fa6dee9SAndroid Build Coastguard Workerfoo {
663*1fa6dee9SAndroid Build Coastguard Worker    stuff: select((arch(), os()), {
664*1fa6dee9SAndroid Build Coastguard Worker        ("x86", "linux"): "a",
665*1fa6dee9SAndroid Build Coastguard Worker        (default, default): "b",
666*1fa6dee9SAndroid Build Coastguard Worker    }),
667*1fa6dee9SAndroid Build Coastguard Worker}
668*1fa6dee9SAndroid Build Coastguard Worker`,
669*1fa6dee9SAndroid Build Coastguard Worker		output: `
670*1fa6dee9SAndroid Build Coastguard Workerfoo {
671*1fa6dee9SAndroid Build Coastguard Worker    stuff: select((arch(), os()), {
672*1fa6dee9SAndroid Build Coastguard Worker        ("x86", "linux"): "a",
673*1fa6dee9SAndroid Build Coastguard Worker        (default, default): "b",
674*1fa6dee9SAndroid Build Coastguard Worker    }),
675*1fa6dee9SAndroid Build Coastguard Worker}
676*1fa6dee9SAndroid Build Coastguard Worker`,
677*1fa6dee9SAndroid Build Coastguard Worker	},
678*1fa6dee9SAndroid Build Coastguard Worker	{
679*1fa6dee9SAndroid Build Coastguard Worker		name: "Multi-condition select with conditions on new lines",
680*1fa6dee9SAndroid Build Coastguard Worker		input: `
681*1fa6dee9SAndroid Build Coastguard Workerfoo {
682*1fa6dee9SAndroid Build Coastguard Worker    stuff: select((arch(),
683*1fa6dee9SAndroid Build Coastguard Worker    os()), {
684*1fa6dee9SAndroid Build Coastguard Worker        ("x86", "linux"): "a",
685*1fa6dee9SAndroid Build Coastguard Worker        (default, default): "b",
686*1fa6dee9SAndroid Build Coastguard Worker    }),
687*1fa6dee9SAndroid Build Coastguard Worker}
688*1fa6dee9SAndroid Build Coastguard Worker`,
689*1fa6dee9SAndroid Build Coastguard Worker		output: `
690*1fa6dee9SAndroid Build Coastguard Workerfoo {
691*1fa6dee9SAndroid Build Coastguard Worker    stuff: select((
692*1fa6dee9SAndroid Build Coastguard Worker        arch(),
693*1fa6dee9SAndroid Build Coastguard Worker        os(),
694*1fa6dee9SAndroid Build Coastguard Worker    ), {
695*1fa6dee9SAndroid Build Coastguard Worker        ("x86", "linux"): "a",
696*1fa6dee9SAndroid Build Coastguard Worker        (default, default): "b",
697*1fa6dee9SAndroid Build Coastguard Worker    }),
698*1fa6dee9SAndroid Build Coastguard Worker}
699*1fa6dee9SAndroid Build Coastguard Worker`,
700*1fa6dee9SAndroid Build Coastguard Worker	},
701*1fa6dee9SAndroid Build Coastguard Worker	{
702*1fa6dee9SAndroid Build Coastguard Worker		name: "Select with multiline inner expression",
703*1fa6dee9SAndroid Build Coastguard Worker		input: `
704*1fa6dee9SAndroid Build Coastguard Workerfoo {
705*1fa6dee9SAndroid Build Coastguard Worker    cflags: [
706*1fa6dee9SAndroid Build Coastguard Worker        "-DPRODUCT_COMPATIBLE_PROPERTY",
707*1fa6dee9SAndroid Build Coastguard Worker        "-DRIL_SHLIB",
708*1fa6dee9SAndroid Build Coastguard Worker        "-Wall",
709*1fa6dee9SAndroid Build Coastguard Worker        "-Wextra",
710*1fa6dee9SAndroid Build Coastguard Worker        "-Werror",
711*1fa6dee9SAndroid Build Coastguard Worker    ] + select(soong_config_variable("sim", "sim_count"), {
712*1fa6dee9SAndroid Build Coastguard Worker        "2": [
713*1fa6dee9SAndroid Build Coastguard Worker            "-DANDROID_MULTI_SIM",
714*1fa6dee9SAndroid Build Coastguard Worker            "-DANDROID_SIM_COUNT_2",
715*1fa6dee9SAndroid Build Coastguard Worker        ],
716*1fa6dee9SAndroid Build Coastguard Worker        default: [],
717*1fa6dee9SAndroid Build Coastguard Worker    }),
718*1fa6dee9SAndroid Build Coastguard Worker}
719*1fa6dee9SAndroid Build Coastguard Worker`,
720*1fa6dee9SAndroid Build Coastguard Worker		output: `
721*1fa6dee9SAndroid Build Coastguard Workerfoo {
722*1fa6dee9SAndroid Build Coastguard Worker    cflags: [
723*1fa6dee9SAndroid Build Coastguard Worker        "-DPRODUCT_COMPATIBLE_PROPERTY",
724*1fa6dee9SAndroid Build Coastguard Worker        "-DRIL_SHLIB",
725*1fa6dee9SAndroid Build Coastguard Worker        "-Wall",
726*1fa6dee9SAndroid Build Coastguard Worker        "-Werror",
727*1fa6dee9SAndroid Build Coastguard Worker        "-Wextra",
728*1fa6dee9SAndroid Build Coastguard Worker    ] + select(soong_config_variable("sim", "sim_count"), {
729*1fa6dee9SAndroid Build Coastguard Worker        "2": [
730*1fa6dee9SAndroid Build Coastguard Worker            "-DANDROID_MULTI_SIM",
731*1fa6dee9SAndroid Build Coastguard Worker            "-DANDROID_SIM_COUNT_2",
732*1fa6dee9SAndroid Build Coastguard Worker        ],
733*1fa6dee9SAndroid Build Coastguard Worker        default: [],
734*1fa6dee9SAndroid Build Coastguard Worker    }),
735*1fa6dee9SAndroid Build Coastguard Worker}
736*1fa6dee9SAndroid Build Coastguard Worker`,
737*1fa6dee9SAndroid Build Coastguard Worker	},
738*1fa6dee9SAndroid Build Coastguard Worker	{
739*1fa6dee9SAndroid Build Coastguard Worker		name: "Select with bindings",
740*1fa6dee9SAndroid Build Coastguard Worker		input: `
741*1fa6dee9SAndroid Build Coastguard Workerfoo {
742*1fa6dee9SAndroid Build Coastguard Worker    stuff: select(arch(), {
743*1fa6dee9SAndroid Build Coastguard Worker        "x86": "a",
744*1fa6dee9SAndroid Build Coastguard Worker        any
745*1fa6dee9SAndroid Build Coastguard Worker          @ baz: "b" + baz,
746*1fa6dee9SAndroid Build Coastguard Worker    }),
747*1fa6dee9SAndroid Build Coastguard Worker}
748*1fa6dee9SAndroid Build Coastguard Worker`,
749*1fa6dee9SAndroid Build Coastguard Worker		output: `
750*1fa6dee9SAndroid Build Coastguard Workerfoo {
751*1fa6dee9SAndroid Build Coastguard Worker    stuff: select(arch(), {
752*1fa6dee9SAndroid Build Coastguard Worker        "x86": "a",
753*1fa6dee9SAndroid Build Coastguard Worker        any @ baz: "b" + baz,
754*1fa6dee9SAndroid Build Coastguard Worker    }),
755*1fa6dee9SAndroid Build Coastguard Worker}
756*1fa6dee9SAndroid Build Coastguard Worker`,
757*1fa6dee9SAndroid Build Coastguard Worker	},
758*1fa6dee9SAndroid Build Coastguard Worker	{
759*1fa6dee9SAndroid Build Coastguard Worker		name: "Simplify select",
760*1fa6dee9SAndroid Build Coastguard Worker		input: `
761*1fa6dee9SAndroid Build Coastguard Workerfoo {
762*1fa6dee9SAndroid Build Coastguard Worker    stuff: select(arch(), {
763*1fa6dee9SAndroid Build Coastguard Worker        default: "a",
764*1fa6dee9SAndroid Build Coastguard Worker    }),
765*1fa6dee9SAndroid Build Coastguard Worker}
766*1fa6dee9SAndroid Build Coastguard Worker`,
767*1fa6dee9SAndroid Build Coastguard Worker		output: `
768*1fa6dee9SAndroid Build Coastguard Workerfoo {
769*1fa6dee9SAndroid Build Coastguard Worker    stuff: "a",
770*1fa6dee9SAndroid Build Coastguard Worker}
771*1fa6dee9SAndroid Build Coastguard Worker`,
772*1fa6dee9SAndroid Build Coastguard Worker	},
773*1fa6dee9SAndroid Build Coastguard Worker	{
774*1fa6dee9SAndroid Build Coastguard Worker		name: "Simplify select with append",
775*1fa6dee9SAndroid Build Coastguard Worker		input: `
776*1fa6dee9SAndroid Build Coastguard Workerfoo {
777*1fa6dee9SAndroid Build Coastguard Worker    stuff: select(arch(), {
778*1fa6dee9SAndroid Build Coastguard Worker        default: "a",
779*1fa6dee9SAndroid Build Coastguard Worker    }) + "foo",
780*1fa6dee9SAndroid Build Coastguard Worker}
781*1fa6dee9SAndroid Build Coastguard Worker`,
782*1fa6dee9SAndroid Build Coastguard Worker		output: `
783*1fa6dee9SAndroid Build Coastguard Workerfoo {
784*1fa6dee9SAndroid Build Coastguard Worker    stuff: "a" + "foo",
785*1fa6dee9SAndroid Build Coastguard Worker}
786*1fa6dee9SAndroid Build Coastguard Worker`,
787*1fa6dee9SAndroid Build Coastguard Worker	},
788*1fa6dee9SAndroid Build Coastguard Worker}
789*1fa6dee9SAndroid Build Coastguard Worker
790*1fa6dee9SAndroid Build Coastguard Workerfunc TestPrinter(t *testing.T) {
791*1fa6dee9SAndroid Build Coastguard Worker	for _, testCase := range validPrinterTestCases {
792*1fa6dee9SAndroid Build Coastguard Worker		t.Run(testCase.name, func(t *testing.T) {
793*1fa6dee9SAndroid Build Coastguard Worker			in := testCase.input[1:]
794*1fa6dee9SAndroid Build Coastguard Worker			expected := testCase.output[1:]
795*1fa6dee9SAndroid Build Coastguard Worker
796*1fa6dee9SAndroid Build Coastguard Worker			r := bytes.NewBufferString(in)
797*1fa6dee9SAndroid Build Coastguard Worker			file, errs := Parse("", r)
798*1fa6dee9SAndroid Build Coastguard Worker			if len(errs) != 0 {
799*1fa6dee9SAndroid Build Coastguard Worker				t.Errorf("test case: %s", in)
800*1fa6dee9SAndroid Build Coastguard Worker				t.Errorf("unexpected errors:")
801*1fa6dee9SAndroid Build Coastguard Worker				for _, err := range errs {
802*1fa6dee9SAndroid Build Coastguard Worker					t.Errorf("  %s", err)
803*1fa6dee9SAndroid Build Coastguard Worker				}
804*1fa6dee9SAndroid Build Coastguard Worker				t.FailNow()
805*1fa6dee9SAndroid Build Coastguard Worker			}
806*1fa6dee9SAndroid Build Coastguard Worker
807*1fa6dee9SAndroid Build Coastguard Worker			SortLists(file)
808*1fa6dee9SAndroid Build Coastguard Worker
809*1fa6dee9SAndroid Build Coastguard Worker			got, err := Print(file)
810*1fa6dee9SAndroid Build Coastguard Worker			if err != nil {
811*1fa6dee9SAndroid Build Coastguard Worker				t.Errorf("test case: %s", in)
812*1fa6dee9SAndroid Build Coastguard Worker				t.Errorf("unexpected error: %s", err)
813*1fa6dee9SAndroid Build Coastguard Worker				t.FailNow()
814*1fa6dee9SAndroid Build Coastguard Worker			}
815*1fa6dee9SAndroid Build Coastguard Worker
816*1fa6dee9SAndroid Build Coastguard Worker			if string(got) != expected {
817*1fa6dee9SAndroid Build Coastguard Worker				t.Errorf("test case: %s", in)
818*1fa6dee9SAndroid Build Coastguard Worker				t.Errorf("  expected: %s", expected)
819*1fa6dee9SAndroid Build Coastguard Worker				t.Errorf("       got: %s", string(got))
820*1fa6dee9SAndroid Build Coastguard Worker			}
821*1fa6dee9SAndroid Build Coastguard Worker		})
822*1fa6dee9SAndroid Build Coastguard Worker	}
823*1fa6dee9SAndroid Build Coastguard Worker}
824