github.com/NeowayLabs/nash@v0.2.2-0.20200127205349-a227041ffd50/parser/parse_fmt_test.go (about) 1 package parser 2 3 import "testing" 4 5 type fmtTestTable struct { 6 input, expected string 7 } 8 9 func testFmt(input string, expected string, t *testing.T) { 10 p := NewParser("fmt test", input) 11 12 tree, err := p.Parse() 13 14 if err != nil { 15 t.Error(err) 16 return 17 } 18 19 fmtval := tree.String() 20 21 if fmtval != expected { 22 t.Errorf("Fmt differ: '%s' != '%s'", fmtval, expected) 23 return 24 } 25 } 26 27 func testFmtTable(testTable []fmtTestTable, t *testing.T) { 28 for _, test := range testTable { 29 testFmt(test.input, test.expected, t) 30 } 31 } 32 33 func TestFmtVariables(t *testing.T) { 34 testTable := []fmtTestTable{ 35 36 // correct adjust of spaces 37 {`test = "a"`, `test = "a"`}, 38 {`test="a"`, `test = "a"`}, 39 {`test= "a"`, `test = "a"`}, 40 {`test ="a"`, `test = "a"`}, 41 {`test = "a"`, `test = "a"`}, 42 {`test ="a"`, `test = "a"`}, 43 {`test ="a"`, `test = "a"`}, 44 {`test = "a"`, `test = "a"`}, 45 {`test = "a"`, `test = "a"`}, 46 {`test = ()`, `test = ()`}, 47 {`test=()`, `test = ()`}, 48 {`test =()`, `test = ()`}, 49 {`test =()`, `test = ()`}, 50 {`test= ()`, `test = ()`}, 51 {`test = (plan9)`, `test = (plan9)`}, 52 {`test=(plan9)`, `test = (plan9)`}, 53 {`test = (plan9)`, `test = (plan9)`}, 54 {`test = (plan9)`, `test = (plan9)`}, 55 {`test = (plan9)`, `test = (plan9)`}, 56 {`test = ( plan9)`, `test = (plan9)`}, 57 {`test = ( plan9)`, `test = (plan9)`}, 58 {`test = (plan9 )`, `test = (plan9)`}, 59 {`test = (plan9 from bell labs)`, `test = (plan9 from bell labs)`}, 60 {`test = (plan9 from bell labs)`, `test = (plan9 from bell labs)`}, 61 {`test = (plan9 from bell labs)`, `test = (plan9 from bell labs)`}, 62 {`test = (plan9 from bell labs)`, `test = (plan9 from bell labs)`}, 63 {`test = ( 64 plan9 65 from 66 bell 67 labs 68 )`, `test = (plan9 from bell labs)`}, 69 {`test = (plan9 from bell labs windows linux freebsd netbsd openbsd)`, `test = ( 70 plan9 71 from 72 bell 73 labs 74 windows 75 linux 76 freebsd 77 netbsd 78 openbsd 79 )`}, 80 81 {`IFS = ("\n")`, `IFS = ("\n")`}, 82 83 // multiple variables 84 {`test = "a" 85 testb = "b"`, `test = "a" 86 testb = "b"`}, 87 } 88 89 testFmtTable(testTable, t) 90 } 91 92 func TestFmtGroupVariables(t *testing.T) { 93 testTable := []fmtTestTable{ 94 { 95 `test = "a" 96 97 test2 = "b" 98 99 fn cd() { echo "hello" }`, 100 `test = "a" 101 test2 = "b" 102 103 fn cd() { 104 echo "hello" 105 }`, 106 }, 107 { 108 `#!/usr/bin/env nash 109 echo "hello"`, 110 `#!/usr/bin/env nash 111 112 echo "hello"`, 113 }, 114 } 115 116 testFmtTable(testTable, t) 117 } 118 119 func TestFmtFn(t *testing.T) { 120 testTable := []fmtTestTable{ 121 { 122 `fn lala() { echo hello } 123 fn lele() { echo lele }`, 124 `fn lala() { 125 echo hello 126 } 127 128 fn lele() { 129 echo lele 130 }`, 131 }, 132 { 133 `vv = "" 134 fn t() { 135 echo t 136 }`, 137 `vv = "" 138 139 fn t() { 140 echo t 141 }`, 142 }, 143 } 144 145 testFmtTable(testTable, t) 146 } 147 148 func TestFmtImports(t *testing.T) { 149 testTable := []fmtTestTable{ 150 { 151 `import test 152 import test 153 154 import test`, 155 `import test 156 import test 157 import test`, 158 }, 159 { 160 `import nashlib/all 161 import klb/aws/all 162 163 vpcTags = ((Name klb-vpc-example) (Env testing)) 164 `, 165 `import nashlib/all 166 import klb/aws/all 167 168 vpcTags = ( 169 (Name klb-vpc-example) 170 (Env testing) 171 )`, 172 }, 173 } 174 175 testFmtTable(testTable, t) 176 } 177 178 func TestFmtFnComments(t *testing.T) { 179 testTable := []fmtTestTable{ 180 { 181 `PATH = "/bin" 182 183 # isolated comment 184 185 # Comment for fn 186 fn test() { 187 echo "hello" 188 } 189 `, 190 `PATH = "/bin" 191 192 # isolated comment 193 194 # Comment for fn 195 fn test() { 196 echo "hello" 197 }`, 198 }, 199 } 200 201 testFmtTable(testTable, t) 202 } 203 204 func TestFmtSamples(t *testing.T) { 205 testTable := []fmtTestTable{ 206 { 207 `#!/usr/bin/env nash 208 import nashlib/all 209 import klb/aws/all 210 vpcTags = ((Name klb-vpc-example) (Env testing)) 211 igwTags = ((Name klb-igw-example) (Env testing)) 212 routeTblTags = ((Name klb-rtbl-example) (Env testing)) 213 appSubnetTags = ((Name klb-app-subnet-example) (Env testing)) 214 dbSubnetTags = ((Name klb-db-subnet-example) (Env testing)) 215 sgTags = ((Name klb-sg-example) (Env testing)) 216 fn print_resource(name, id) { 217 printf "Created %s: %s%s%s\n" $name $NASH_GREEN $id $NASH_RESET 218 } 219 fn create_prod() { 220 vpcid <= aws_vpc_create("10.0.0.1/16", $vpcTags) 221 appnet <= aws_subnet_create($vpcid, "10.0.1.0/24", $appSubnetTags) 222 dbnet <= aws_subnet_create($vpcid, "10.0.2.0/24", $dbSubnetTags) 223 igwid <= aws_igw_create($igwTags) 224 tblid <= aws_routetbl_create($vpcid, $routeTblTags) 225 aws_igw_attach($igwid, $vpcid) 226 aws_route2igw($tblid, "0.0.0.0/0", $igwid) 227 grpid <= aws_secgroup_create("klb-default-sg", "sg description", $vpcid, $sgTags) 228 print_resource("VPC", $vpcid) 229 print_resource("app subnet", $appnet) 230 print_resource("db subnet", $dbnet) 231 print_resource("Internet Gateway", $igwid) 232 print_resource("Routing table", $tblid) 233 print_resource("Security group", $grpid) 234 } 235 create_prod() 236 `, 237 `#!/usr/bin/env nash 238 239 import nashlib/all 240 import klb/aws/all 241 242 vpcTags = ( 243 (Name klb-vpc-example) 244 (Env testing) 245 ) 246 247 igwTags = ( 248 (Name klb-igw-example) 249 (Env testing) 250 ) 251 252 routeTblTags = ( 253 (Name klb-rtbl-example) 254 (Env testing) 255 ) 256 257 appSubnetTags = ( 258 (Name klb-app-subnet-example) 259 (Env testing) 260 ) 261 262 dbSubnetTags = ( 263 (Name klb-db-subnet-example) 264 (Env testing) 265 ) 266 267 sgTags = ( 268 (Name klb-sg-example) 269 (Env testing) 270 ) 271 272 fn print_resource(name, id) { 273 printf "Created %s: %s%s%s\n" $name $NASH_GREEN $id $NASH_RESET 274 } 275 276 fn create_prod() { 277 vpcid <= aws_vpc_create("10.0.0.1/16", $vpcTags) 278 appnet <= aws_subnet_create($vpcid, "10.0.1.0/24", $appSubnetTags) 279 dbnet <= aws_subnet_create($vpcid, "10.0.2.0/24", $dbSubnetTags) 280 igwid <= aws_igw_create($igwTags) 281 tblid <= aws_routetbl_create($vpcid, $routeTblTags) 282 283 aws_igw_attach($igwid, $vpcid) 284 aws_route2igw($tblid, "0.0.0.0/0", $igwid) 285 286 grpid <= aws_secgroup_create("klb-default-sg", "sg description", $vpcid, $sgTags) 287 288 print_resource("VPC", $vpcid) 289 print_resource("app subnet", $appnet) 290 print_resource("db subnet", $dbnet) 291 print_resource("Internet Gateway", $igwid) 292 print_resource("Routing table", $tblid) 293 print_resource("Security group", $grpid) 294 } 295 296 create_prod()`, 297 }, 298 } 299 300 testFmtTable(testTable, t) 301 } 302 303 func TestFmtPipes(t *testing.T) { 304 testTable := []fmtTestTable{ 305 { 306 `echo hello | grep "he" > test`, 307 `echo hello | grep "he" > test`, 308 }, 309 { 310 `(echo hello | sed "s/he/wo/g" >[1] /tmp/test >[2] /dev/null)`, 311 `( 312 echo hello | 313 sed "s/he/wo/g" 314 >[1] /tmp/test 315 >[2] /dev/null 316 )`, 317 }, 318 { 319 `choice <= ( 320 -find $dir+"/" -maxdepth 1 | 321 sed "s#.*/##" | 322 sort | 323 uniq | 324 -fzf --exact -q "^"+$query -1 -0 --inline-info --header "select file: " 325 )`, 326 `choice <= ( 327 -find $dir+"/" 328 -maxdepth 329 1 | 330 sed "s#.*/##" | 331 sort | 332 uniq | 333 -fzf --exact 334 -q 335 "^"+$query -1 336 -0 337 --inline-info 338 --header "select file: " 339 )`, 340 }, 341 } 342 343 testFmtTable(testTable, t) 344 }