diff --git a/caddyfile/parse.go b/caddyfile/parse.go index 84eb2181..c0ec2d4c 100644 --- a/caddyfile/parse.go +++ b/caddyfile/parse.go @@ -461,11 +461,7 @@ type ServerBlock struct { func (p *parser) isMacro() (bool, string) { keys := p.block.Keys - // "macro foo {}" style - if len(keys) == 2 && keys[0] == "macro" { - return true, keys[1] - } - // (foo) style. What to do if more than one server key and some have ()? + // A macro block is a single key with parens. Nothing else qualifies. if len(keys) == 1 && strings.HasPrefix(keys[0], "(") && strings.HasSuffix(keys[0], ")") { return true, strings.TrimSuffix(keys[0][1:], ")") } diff --git a/caddyfile/parse_test.go b/caddyfile/parse_test.go index 9daebcf5..34da75d1 100644 --- a/caddyfile/parse_test.go +++ b/caddyfile/parse_test.go @@ -15,7 +15,6 @@ package caddyfile import ( - "fmt" "io/ioutil" "os" "path/filepath" @@ -517,41 +516,36 @@ func testParser(input string) parser { } func TestMacro(t *testing.T) { - for _, tst := range []string{"(common)", "macro common"} { - t.Run(tst, func(t *testing.T) { - p := testParser(fmt.Sprintf(` - %s { + p := testParser(`(common) { gzip foo errors stderr } http://example.com { import common } - `, tst)) - blocks, err := p.parseAll() - if err != nil { - t.Fatal(err) - } - for _, b := range blocks { - t.Log(b.Keys) - t.Log(b.Tokens) - } - if len(blocks) != 1 { - t.Fatalf("Expect exactly one server block. Got %d.", len(blocks)) - } - if actual, expected := blocks[0].Keys[0], "http://example.com"; expected != actual { - t.Errorf("Expected server name to be '%s' but was '%s'", expected, actual) - } - if len(blocks[0].Tokens) != 2 { - t.Fatalf("Server block should have tokens from import") - } - if actual, expected := blocks[0].Tokens["gzip"][0].Text, "gzip"; expected != actual { - t.Errorf("Expected argument to be '%s' but was '%s'", expected, actual) - } - if actual, expected := blocks[0].Tokens["errors"][1].Text, "stderr"; expected != actual { - t.Errorf("Expected argument to be '%s' but was '%s'", expected, actual) - } - }) + `) + blocks, err := p.parseAll() + if err != nil { + t.Fatal(err) + } + for _, b := range blocks { + t.Log(b.Keys) + t.Log(b.Tokens) + } + if len(blocks) != 1 { + t.Fatalf("Expect exactly one server block. Got %d.", len(blocks)) + } + if actual, expected := blocks[0].Keys[0], "http://example.com"; expected != actual { + t.Errorf("Expected server name to be '%s' but was '%s'", expected, actual) + } + if len(blocks[0].Tokens) != 2 { + t.Fatalf("Server block should have tokens from import") + } + if actual, expected := blocks[0].Tokens["gzip"][0].Text, "gzip"; expected != actual { + t.Errorf("Expected argument to be '%s' but was '%s'", expected, actual) + } + if actual, expected := blocks[0].Tokens["errors"][1].Text, "stderr"; expected != actual { + t.Errorf("Expected argument to be '%s' but was '%s'", expected, actual) } }