# 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 {{\([0-9]*\.[0-9]*%\)}}