line_parsers_test.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package parser // import "github.com/docker/docker/builder/dockerfile/parser"
  2. import (
  3. "testing"
  4. "github.com/gotestyourself/gotestyourself/assert"
  5. is "github.com/gotestyourself/gotestyourself/assert/cmp"
  6. )
  7. func TestParseNameValOldFormat(t *testing.T) {
  8. directive := Directive{}
  9. node, err := parseNameVal("foo bar", "LABEL", &directive)
  10. assert.Check(t, err)
  11. expected := &Node{
  12. Value: "foo",
  13. Next: &Node{Value: "bar"},
  14. }
  15. assert.Check(t, is.DeepEqual(expected, node))
  16. }
  17. func TestParseNameValNewFormat(t *testing.T) {
  18. directive := Directive{}
  19. node, err := parseNameVal("foo=bar thing=star", "LABEL", &directive)
  20. assert.Check(t, err)
  21. expected := &Node{
  22. Value: "foo",
  23. Next: &Node{
  24. Value: "bar",
  25. Next: &Node{
  26. Value: "thing",
  27. Next: &Node{
  28. Value: "star",
  29. },
  30. },
  31. },
  32. }
  33. assert.Check(t, is.DeepEqual(expected, node))
  34. }
  35. func TestNodeFromLabels(t *testing.T) {
  36. labels := map[string]string{
  37. "foo": "bar",
  38. "weird": "first' second",
  39. }
  40. expected := &Node{
  41. Value: "label",
  42. Original: `LABEL "foo"='bar' "weird"='first' second'`,
  43. Next: &Node{
  44. Value: "foo",
  45. Next: &Node{
  46. Value: "'bar'",
  47. Next: &Node{
  48. Value: "weird",
  49. Next: &Node{
  50. Value: "'first' second'",
  51. },
  52. },
  53. },
  54. },
  55. }
  56. node := NodeFromLabels(labels)
  57. assert.Check(t, is.DeepEqual(expected, node))
  58. }
  59. func TestParseNameValWithoutVal(t *testing.T) {
  60. directive := Directive{}
  61. // In Config.Env, a variable without `=` is removed from the environment. (#31634)
  62. // However, in Dockerfile, we don't allow "unsetting" an environment variable. (#11922)
  63. _, err := parseNameVal("foo", "ENV", &directive)
  64. assert.Check(t, is.ErrorContains(err, ""), "ENV must have two arguments")
  65. }