# Empty values are permitted and reasonable, especially when just establishing
# expansion order.
#
# DEFINE: %{empty}=
# RUN: echo "'%{empty}'"
# CHECK:''
#
# REDEFINE: %{empty}=
# RUN: echo "'%{empty}'"
# CHECK:''

# A value consisting only of whitespace is trimmed to the empty string.
#
#               v~~ intentional whitespace
# DEFINE: %{ws}=   
# RUN: echo "'%{ws}'"
# CHECK:''
#
#                 v intentional whitespace
# REDEFINE: %{ws}= 
# RUN: echo "'%{ws}'"
# CHECK:''

# Whitespace is not required around the name or value.
#
# DEFINE:%{no-whitespace}=abc
# RUN: echo "'%{no-whitespace}'"
# CHECK:'abc'
#
# REDEFINE:%{no-whitespace}=HelloWorld
# RUN: echo "'%{no-whitespace}'"
# CHECK:'HelloWorld'

# Whitespace is not required between substitutions in a value.
#
# DEFINE: %{adjacent0} = foo
# DEFINE: %{adjacent1} = bar
# DEFINE: %{has-adjacent-substs} = %{adjacent0}%{adjacent1}
# RUN: echo "'%{has-adjacent-substs}'"
# CHECK:'foobar'
#
# REDEFINE: %{has-adjacent-substs} = %{adjacent0}%{adjacent1}%{adjacent0}
# RUN: echo "'%{has-adjacent-substs}'"
# CHECK:'foobarfoo'

# Exact whitespace is preserved within the value, but whitespace enclosing the
# name or value is discarded.  ('%{' and '}' are part of the name, and
# whitespace in between isn't permitted.)
#
#                                       v~~ intentional whitespace
# DEFINE:   %{whitespace}  =  abc    def   
# RUN: echo "'%{whitespace}'"
# CHECK:'abc    def'
#                                      v intentional whitespace
# REDEFINE: %{whitespace} = Hello World 
# RUN: echo "'%{whitespace}'"
# CHECK:'Hello World'

# Line continuations in the value are permitted and collapse whitespace.
#
# DEFINE: %{continue} = abc\
# DEFINE:def \
# DEFINE:ghi\
# DEFINE: jkl \
# DEFINE: mno  \
# DEFINE:  pqr 
#             ^ intentional whitespace
# RUN: echo "'%{continue}'"
# CHECK:'abc def ghi jkl mno pqr'
#
# REDEFINE: %{continue} =  abc  \
# REDEFINE: def
# RUN: echo "'%{continue}'"
# CHECK:'abc def'

# Whitespace at the end of the line after a '\' is ignored, and it's treated as
# a line continuation.  Otherwise, the behavior would be hard to understand
# because it looks like a line continuation.
#
#                                   v~~~~~~~~~~~ intentional whitespace
# DEFINE: %{ws-after-continue}=foo \            
# DEFINE: bar                      \ 
#                                   ^ intentional whitespace
# DEFINE: baz
# RUN: echo "'%{ws-after-continue}'"
# CHECK:'foo bar baz'
#
#                                     v intentional whitespace
# REDEFINE: %{ws-after-continue}=foo \ 
# REDEFINE: bar                      \            
#                                     ^~~~~~~~~~~~ intentional whitespace
# REDEFINE: baz
# RUN: echo "'%{ws-after-continue}'"
# CHECK:'foo bar baz'

# A line continuation is recognized anywhere.  It should be used only where
# whitespace is permitted because it reduces to a single space.
#
# Directives with at least one non-whitespace character (could be '\') are
# permitted even if they contribute nothing to the value.  There might be no
# practical use, but check that it behaves as expected.
#
# DEFINE:\
# DEFINE:%{blank-lines}\
# DEFINE:\
# DEFINE:=\
# DEFINE:\
# DEFINE:a
# RUN: echo "'%{blank-lines}'"
# CHECK:'a'
#
# REDEFINE:                  \
# REDEFINE: %{blank-lines}   \
# REDEFINE:                  \
# REDEFINE:                = \
# REDEFINE:                  \
# REDEFINE:      a           \
# REDEFINE:                  \
# REDEFINE:      b           \
# REDEFINE:                  \
# REDEFINE:      c
# RUN: echo "'%{blank-lines}'"
# CHECK:'a b c'

# The fourth DEFINE line is deceptive because it looks like a new substitution,
# but it's actually a continuation of the previous value.
#
# DEFINE: %{name}=x
# DEFINE: %{value}=3
# DEFINE: %{deceptive-continue}=echo \
# DEFINE: %{name}=%{value}
# RUN: %{deceptive-continue}
# CHECK:x=3

# CHECK:{{ *}}Passed: 1
