regorus 0.2.2

A fast, lightweight Rego (OPA policy language) interpreter
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

cases:
  - note: data
    rego: |
      package test
      import data
      import input
    imports:
      - span: import data
        refr:
          var: data
      - span: import input
        refr:
          var: input

  - note: input
    rego: |
      package test
      import input
    imports:
      - span: import input
        refr:
          var: input

  - note: dot
    rego: |
      package test
      import input.a
      import data.b
    imports:
      - span: import input.a
        refr:
          refdot:
            refr:
              var: input
            field: a
      - span: import data.b
        refr:
          refdot:
            refr:
              var: data
            field: b

  - note: bracket
    rego: |
      package test
      import input["a"]
      import data["b"]
    imports:
      - span: import input["a"]
        refr:
          refbrack:
            refr:
              var: input
            index:
              string: a
      - span: import data["b"]
        refr:
          refbrack:
            refr:
              var: data
            index:
              string: b

  - note: multi-dot
    rego: |
      package test
      import input.a.b
      import data.c.d
    imports:
      - span: import input.a.b
        refr:
          refdot:
            span: input.a.b
            refr:
              refdot:
                span: input.a
                refr:
                  var: input
                field: a
            field: b
      - span: import data.c.d
        refr:
          refdot:
            span: data.c.d
            refr:
              refdot:
                span: data.c
                refr:
                  var: data
                field: c
            field: d
    policy: []


  - note: complex
    rego: |
      package test
      import    input["b.c"].d["e.f"].g
      import      data.a["b.c"].d["e.f"]
    package: --skip--
    imports:
      - span: import    input["b.c"].d["e.f"].g
        refr:
          refdot:
            span: input["b.c"].d["e.f"].g
            refr:
              refbrack:
                span: input["b.c"].d["e.f"]
                refr:
                  refdot:
                    span: input["b.c"].d
                    refr:
                      refbrack:
                        span: input["b.c"]
                        refr:
                          var: input
                        index:
                          string: b.c
                    field: d
                index:
                  string: e.f
            field: g
      - span: import      data.a["b.c"].d["e.f"]
        refr:
          refbrack:
            span: data.a["b.c"].d["e.f"]
            refr:
              refdot:
                span: data.a["b.c"].d
                refr:
                  refbrack:
                    span: data.a["b.c"]
                    refr:
                      refdot:
                        span: data.a
                        refr:
                          var: data
                        field: a
                    index:
                      string: b.c
                field: d
            index:
              string: e.f

  - note:  same-line
    rego: package test import input.a["b"] import data["c"].d
    package:
      span: package test
      refr:
        var: test
    imports:
      - span: import input.a["b"]
        refr:
          refbrack:
            span: input.a["b"]
            refr:
              refdot:
                span: input.a
                refr:
                  var: input
                field: a
            index:
              string: b
      - span: import data["c"].d
        refr:
          refdot:
            span: data["c"].d
            refr:
              refbrack:
                span: data["c"]
                refr:
                  var: data
                index:
                  string: c
            field: d

  - note: as
    rego: |
      package test
      import input.x as y
    imports:
      - span: import input.x as y
        refr:
          refdot:
            span: input.x
            refr:
              var: input
            field: x
        as: y

  - note: as/newline
    rego: |
      package test
      import
      input.x
      as
      y
    imports:
      - span: "import\ninput.x\nas\ny"
        refr:
          refdot:
            span: input.x
            refr:
              var: input
            field: x
        as: y

  - note: missing-ref
    rego: |
      package test
      import ( a)
    error: expecting identifier

  - note: missing-ref-1
    rego: |
      package test
      import ["a"]
    error: expecting identifier

  - note: invalid-beginning
    rego: |
      package test
      import foo
    error: "import path must begin with one of: {data, future, input, rego}"

  - note: invalid-beginning-1
    rego: |
      package test
      import foo.bar
    error: "import path must begin with one of: {data, future, input, rego}"

  - note: missing-field-1
    rego: |
      package test
      import data.a.
    error: expecting identifier

  - note: missing-field-2
    rego: |
      package test
      import data.a.b.
    error: expecting identifier

  - note: space-after-dot
    rego: |
      package test
      import input. a
    error: invalid whitespace between . and identifier

  - note: space-before-dot
    rego: |
      package test
      import input .a.b
    error: invalid whitespace before .

  - note: space-after-lbracket
    rego: package test import a ["b"]
    error: invalid whitespace before [

  - note: non-string-index
    rego: package test import a[1]
    error: expected string

  - note: shadow
    rego:
      package test
      import data.x import data.y import data["x"]
    error: import shadows following import defined earlier

  - note: keyword/else
    rego:
      package test
      import data.x as else
    error: "unexpected keyword `else`"

  - note: keyword/as
    rego:
      package test
      import data.x as as
    error: "unexpected keyword `as`"

  - note: as/_
    rego:
      package test
      import data.x as _
    error: "`_` cannot be used as alias"

  - note: as/_
    rego:
      package test
      import data.x as 1
    error: expecting identifier

  - note: as/eof
    rego:
      package test
      import data.x as
    error: expecting identifier

  - note: as/multiple
    rego:
      package test
      import data.x as y
      import data.y as y
    error: import shadows following import defined earlier