1// Copyright 2014 Google Inc. All rights reserved. 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS, 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15package parser 16 17import ( 18 "bytes" 19 "testing" 20) 21 22var validPrinterTestCases = []struct { 23 input string 24 output string 25}{ 26 { 27 input: ` 28foo {} 29`, 30 output: ` 31foo {} 32`, 33 }, 34 { 35 input: ` 36foo{name= "abc",} 37`, 38 output: ` 39foo { 40 name: "abc", 41} 42`, 43 }, 44 { 45 input: ` 46 foo { 47 stuff: ["asdf", "jkl;", "qwert", 48 "uiop", "bnm,"] 49 } 50 `, 51 output: ` 52foo { 53 stuff: [ 54 "asdf", 55 "bnm,", 56 "jkl;", 57 "qwert", 58 "uiop", 59 ], 60} 61`, 62 }, 63 { 64 input: ` 65 foo { 66 stuff: { 67 isGood: true, 68 name: "bar" 69 } 70 } 71 `, 72 output: ` 73foo { 74 stuff: { 75 isGood: true, 76 name: "bar", 77 }, 78} 79`, 80 }, 81 { 82 input: ` 83// comment1 84foo { 85 // comment2 86 isGood: true, // comment3 87} 88`, 89 output: ` 90// comment1 91foo { 92 // comment2 93 isGood: true, // comment3 94} 95`, 96 }, 97 { 98 input: ` 99foo { 100 name: "abc", 101} 102 103bar { 104 name: "def", 105} 106 `, 107 output: ` 108foo { 109 name: "abc", 110} 111 112bar { 113 name: "def", 114} 115`, 116 }, 117 { 118 input: ` 119foo = "stuff" 120bar = foo 121baz = foo + bar 122baz += foo 123`, 124 output: ` 125foo = "stuff" 126bar = foo 127baz = foo + bar 128baz += foo 129`, 130 }, 131 { 132 input: ` 133//test 134test /* test */ { 135 srcs: [ 136 /*"bootstrap/bootstrap.go", 137 "bootstrap/cleanup.go",*/ 138 "bootstrap/command.go", 139 "bootstrap/doc.go", //doc.go 140 "bootstrap/config.go", //config.go 141 ], 142 deps: ["libabc"], 143 incs: [] 144} //test 145//test 146test2 { 147} 148 149 150//test3 151`, 152 output: ` 153//test 154test /* test */ { 155 srcs: [ 156 /*"bootstrap/bootstrap.go", 157 "bootstrap/cleanup.go",*/ 158 "bootstrap/command.go", 159 "bootstrap/config.go", //config.go 160 "bootstrap/doc.go", //doc.go 161 ], 162 deps: ["libabc"], 163 incs: [], 164} //test 165 166//test 167test2 { 168} 169 170//test3 171`, 172 }, 173 { 174 input: ` 175// test 176module // test 177 178 { 179 srcs 180 : [ 181 "src1.c", 182 "src2.c", 183 ], 184//test 185} 186//test2 187`, 188 output: ` 189// test 190module { // test 191 192 srcs: [ 193 "src1.c", 194 "src2.c", 195 ], 196 //test 197} 198 199//test2 200`, 201 }, 202 { 203 input: ` 204/*test { 205 test: true, 206}*/ 207 208test { 209/*test: true,*/ 210} 211 212// This 213/* Is */ 214// A 215 216// Multiline 217// Comment 218 219test {} 220 221// This 222/* Is */ 223// A 224// Trailing 225 226// Multiline 227// Comment 228`, 229 output: ` 230/*test { 231 test: true, 232}*/ 233 234test { 235 /*test: true,*/ 236} 237 238// This 239/* Is */ 240// A 241 242// Multiline 243// Comment 244 245test {} 246 247// This 248/* Is */ 249// A 250// Trailing 251 252// Multiline 253// Comment 254`, 255 }, 256} 257 258func TestPrinter(t *testing.T) { 259 for _, testCase := range validPrinterTestCases { 260 in := testCase.input[1:] 261 expected := testCase.output[1:] 262 263 r := bytes.NewBufferString(in) 264 file, errs := Parse("", r, NewScope(nil)) 265 if len(errs) != 0 { 266 t.Errorf("test case: %s", in) 267 t.Errorf("unexpected errors:") 268 for _, err := range errs { 269 t.Errorf(" %s", err) 270 } 271 t.FailNow() 272 } 273 274 SortLists(file) 275 276 got, err := Print(file) 277 if err != nil { 278 t.Errorf("test case: %s", in) 279 t.Errorf("unexpected error: %s", err) 280 t.FailNow() 281 } 282 283 if string(got) != expected { 284 t.Errorf("test case: %s", in) 285 t.Errorf(" expected: %s", expected) 286 t.Errorf(" got: %s", string(got)) 287 } 288 } 289} 290