1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
package parser
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestDirectives(t *testing.T) {
t.Parallel()
dt := `#escape=\
# key = FOO bar
# smth
`
parser := DirectiveParser{}
d, err := parser.ParseAll([]byte(dt))
require.NoError(t, err)
require.Len(t, d, 1)
require.Equal(t, d[0].Name, "escape")
require.Equal(t, d[0].Value, "\\")
// for some reason Moby implementation in case insensitive for escape
dt = `# EScape=\
# KEY = FOO bar
# smth
`
parser = DirectiveParser{}
d, err = parser.ParseAll([]byte(dt))
require.NoError(t, err)
require.Len(t, d, 1)
require.Equal(t, d[0].Name, "escape")
require.Equal(t, d[0].Value, "\\")
}
func TestDetectSyntax(t *testing.T) {
t.Parallel()
dt := `# syntax = dockerfile:experimental // opts
FROM busybox
`
ref, cmdline, loc, ok := DetectSyntax([]byte(dt))
require.True(t, ok)
require.Equal(t, ref, "dockerfile:experimental")
require.Equal(t, cmdline, "dockerfile:experimental // opts")
require.Equal(t, 1, loc[0].Start.Line)
require.Equal(t, 1, loc[0].End.Line)
dt = `#!/bin/sh
# syntax = dockerfile:experimental
FROM busybox
`
ref, _, loc, ok = DetectSyntax([]byte(dt))
require.True(t, ok)
require.Equal(t, ref, "dockerfile:experimental")
require.Equal(t, 2, loc[0].Start.Line)
require.Equal(t, 2, loc[0].End.Line)
dt = `#!/bin/sh
# syntax = dockerfile:experimental
`
_, _, _, ok = DetectSyntax([]byte(dt))
require.False(t, ok)
dt = `FROM busybox
RUN ls
`
ref, cmdline, _, ok = DetectSyntax([]byte(dt))
require.False(t, ok)
require.Equal(t, ref, "")
require.Equal(t, cmdline, "")
dt = `//syntax=foo
//key=value`
ref, _, _, ok = DetectSyntax([]byte(dt))
require.True(t, ok)
require.Equal(t, ref, "foo")
dt = `#!/bin/sh
//syntax=x`
ref, _, _, ok = DetectSyntax([]byte(dt))
require.True(t, ok)
require.Equal(t, ref, "x")
dt = `{"syntax": "foo"}`
ref, _, _, ok = DetectSyntax([]byte(dt))
require.True(t, ok)
require.Equal(t, ref, "foo")
dt = `{"syntax": "foo"`
_, _, _, ok = DetectSyntax([]byte(dt))
require.False(t, ok)
dt = `{"syntax": "foo"}
# syntax=bar`
_, _, _, ok = DetectSyntax([]byte(dt))
require.False(t, ok)
}
|