================================================================================
simple quoted template expression
================================================================================

foo = "${ var.bar }"

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (quoted_template
            (quoted_template_start)
            (template_interpolation
              (template_interpolation_start)
              (expression
                (variable_expr
                  (identifier))
                (get_attr
                  (identifier)))
              (template_interpolation_end))
            (quoted_template_end)))))))

================================================================================
empty template interpolation
================================================================================

foo = "${}"

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (quoted_template
            (quoted_template_start)
            (template_interpolation
              (template_interpolation_start)
              (template_interpolation_end))
            (quoted_template_end)))))))

================================================================================
template for expression in quoted template
================================================================================

foo = "%{ for a in b } prefix-${a} %{ endfor }"

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (quoted_template
            (quoted_template_start)
            (template_directive
              (template_for
                (template_for_start
                  (template_directive_start)
                  (identifier)
                  (expression
                    (variable_expr
                      (identifier)))
                  (template_directive_end))
                (template_literal)
                (template_interpolation
                  (template_interpolation_start)
                  (expression
                    (variable_expr
                      (identifier)))
                  (template_interpolation_end))
                (template_for_end
                  (template_directive_start)
                  (template_directive_end))))
            (quoted_template_end)))))))

================================================================================
escaped template for directive
================================================================================

foo = "%{ for a in b } %%{ endfor } %{ endfor }"

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (quoted_template
            (quoted_template_start)
            (template_directive
              (template_for
                (template_for_start
                  (template_directive_start)
                  (identifier)
                  (expression
                    (variable_expr
                      (identifier)))
                  (template_directive_end))
                (template_literal)
                (template_for_end
                  (template_directive_start)
                  (template_directive_end))))
            (quoted_template_end)))))))

================================================================================
escaped template for directive 2
================================================================================

foo = "%%{ for a in b } %%{ endfor }"

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (literal_value
          (string_lit
            (quoted_template_start)
            (template_literal)
            (quoted_template_end)))))))

================================================================================
template for directive with weird whitespace
================================================================================

foo = "%{     for a in b   } %{      endfor    }"

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (quoted_template
            (quoted_template_start)
            (template_directive
              (template_for
                (template_for_start
                  (template_directive_start)
                  (identifier)
                  (expression
                    (variable_expr
                      (identifier)))
                  (template_directive_end))
                (template_for_end
                  (template_directive_start)
                  (template_directive_end))))
            (quoted_template_end)))))))

================================================================================
template for expression in heredoc template
================================================================================

foo = <<EOF
%{ for a in b ~}

prefix-${a}

%{~ endfor }
EOF

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (heredoc_template
            (heredoc_start)
            (heredoc_identifier)
            (template_directive
              (template_for
                (template_for_start
                  (template_directive_start)
                  (identifier)
                  (expression
                    (variable_expr
                      (identifier)))
                  (strip_marker)
                  (template_directive_end))
                (template_literal)
                (template_interpolation
                  (template_interpolation_start)
                  (expression
                    (variable_expr
                      (identifier)))
                  (template_interpolation_end))
                (template_for_end
                  (template_directive_start)
                  (strip_marker)
                  (template_directive_end))))
            (heredoc_identifier)))))))

================================================================================
empty heredoc template
================================================================================

foo = <<END
END

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (heredoc_template
            (heredoc_start)
            (heredoc_identifier)
            (heredoc_identifier)))))))

================================================================================
heredoc with fake ending
================================================================================

foo = <<END
  END    not!
END

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (heredoc_template
            (heredoc_start)
            (heredoc_identifier)
            (template_literal)
            (heredoc_identifier)))))))

================================================================================
quoted template expression with escaped strings and fake strip marker
================================================================================

foo = "${ " ~ " }"

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (quoted_template
            (quoted_template_start)
            (template_interpolation
              (template_interpolation_start)
              (expression
                (literal_value
                  (string_lit
                    (quoted_template_start)
                    (template_literal)
                    (quoted_template_end))))
              (template_interpolation_end))
            (quoted_template_end)))))))

================================================================================
quoted template with nested quoted template
================================================================================

foo = "p-${ foo("v-${a.b}") }"

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (quoted_template
            (quoted_template_start)
            (template_literal)
            (template_interpolation
              (template_interpolation_start)
              (expression
                (function_call
                  (identifier)
                  (function_arguments
                    (expression
                      (template_expr
                        (quoted_template
                          (quoted_template_start)
                          (template_literal)
                          (template_interpolation
                            (template_interpolation_start)
                            (expression
                              (variable_expr
                                (identifier))
                              (get_attr
                                (identifier)))
                            (template_interpolation_end))
                          (quoted_template_end)))))))
              (template_interpolation_end))
            (quoted_template_end)))))))

================================================================================
quoted template interpolation with strip markers
================================================================================

foo = "hello ${~ "world" ~} hello"

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (quoted_template
            (quoted_template_start)
            (template_literal)
            (template_interpolation
              (template_interpolation_start)
              (strip_marker)
              (expression
                (literal_value
                  (string_lit
                    (quoted_template_start)
                    (template_literal)
                    (quoted_template_end))))
              (strip_marker)
              (template_interpolation_end))
            (template_literal)
            (quoted_template_end)))))))

================================================================================
quoted template object expression in template
================================================================================

foo = "${ {a=b}[a] }"

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (quoted_template
            (quoted_template_start)
            (template_interpolation
              (template_interpolation_start)
              (expression
                (collection_value
                  (object
                    (object_start)
                    (object_elem
                      (expression
                        (variable_expr
                          (identifier)))
                      (expression
                        (variable_expr
                          (identifier))))
                    (object_end)))
                (index
                  (new_index
                    (expression
                      (variable_expr
                        (identifier))))))
              (template_interpolation_end))
            (quoted_template_end)))))))

================================================================================
escaped template interpolation start
================================================================================

foo = "hello $${ world"

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (literal_value
          (string_lit
            (quoted_template_start)
            (template_literal)
            (quoted_template_end)))))))

================================================================================
tricky heredoc
================================================================================

foo = <<END
    contains fake endings
    END (ineligible) END
END

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (heredoc_template
            (heredoc_start)
            (heredoc_identifier)
            (template_literal)
            (heredoc_identifier)))))))

================================================================================
heredoc with identifier that does not fit into the serialization buffer (should not crash)
================================================================================

foo = <<XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (heredoc_template
            (heredoc_start)
            (heredoc_identifier)
            (heredoc_identifier)))))))

================================================================================
template if directive in quoted template
================================================================================

foo = "%{if cond } foo %{else} bar %{endif}"

--------------------------------------------------------------------------------

(config_file
  (body
    (attribute
      (identifier)
      (expression
        (template_expr
          (quoted_template
            (quoted_template_start)
            (template_directive
              (template_if
                (template_if_branch
                  (template_if_intro
                    (template_directive_start)
                    (expression
                      (variable_expr
                        (identifier)))
                    (template_directive_end))
                  (template_literal))
                (template_else_branch
                  (template_else_intro
                    (template_directive_start)
                    (template_directive_end))
                  (template_literal))
                (template_if_end
                  (template_directive_start)
                  (template_directive_end))))
            (quoted_template_end)))))))
