%prep

# Test the use of styles, if the zsh/zutil module is available.

  if ! zmodload zsh/zutil 2>/dev/null; then
    ZTST_unimplemented="can't load the zsh/zutil module for testing"
  fi

%test
  zstyle :random:stuff any-old-style with any old value
  zstyle :randomly:chosen some-other-style I can go on and on
  zstyle -d
  zstyle
0:zstyle -d restores a pristine state

# patterns should be ordered by weight, so add in reverse order to check
  zstyle ':ztst:context*' scalar-style other-scalar-value
  zstyle ':ztst:context:*' scalar-style second-scalar-value
  zstyle ':ztst:context:sub1' scalar-style scalar-value
  zstyle ':ztst:context:sub1' array-style array value elements 'with spaces'
  zstyle ':ztst:context*' boolean-style false
  zstyle ':ztst:context:sub1' boolean-style true
0:defining styles

# styles are now sorted, but patterns are in order of definition
  zstyle
0:listing styles in default format
>array-style
>        :ztst:context:sub1 array value elements 'with spaces'
>boolean-style
>        :ztst:context:sub1 true
>        :ztst:context* false
>scalar-style
>        :ztst:context:sub1 scalar-value
>        :ztst:context:* second-scalar-value
>        :ztst:context* other-scalar-value

  zstyle -L
0:listing styles in zstyle format
>zstyle :ztst:context:sub1 array-style array value elements 'with spaces'
>zstyle :ztst:context:sub1 boolean-style true
>zstyle ':ztst:context*' boolean-style false
>zstyle :ztst:context:sub1 scalar-style scalar-value
>zstyle ':ztst:context:*' scalar-style second-scalar-value
>zstyle ':ztst:context*' scalar-style other-scalar-value

  zstyle -b :ztst:context:sub1 boolean-style bool; print $bool
  zstyle -t :ztst:context:sub1 boolean-style
0:boolean test -b/-t + true
>yes

  zstyle -b :ztst:context:sub2 boolean-style bool; print $bool
  zstyle -t :ztst:context:sub2 boolean-style
1:boolean test -b/-t + false
>no

  zstyle -b :ztst:context:sub1 boolean-unset-style bool; print $bool
  zstyle -t :ztst:context:sub1 boolean-unset-style
2:boolean test -b/-t + unset
>no

  zstyle -T :ztst:context:sub1 boolean-style
0:boolean test -T + true

  zstyle -T :ztst:context:sub2 boolean-style
1:boolean test -T + false

  zstyle -T :ztst:context:sub1 boolean-unset-style
0:boolean test -T + unset

  zstyle -s :ztst:context:sub1 scalar-style scalar && print $scalar
  zstyle -s :ztst:context:sub2 scalar-style scalar && print $scalar
  zstyle -s :ztst:contextual-psychedelia scalar-style scalar && print $scalar
  zstyle -s :ztst:contemplative scalar-style scalar || print no match
0:pattern matching rules
>scalar-value
>second-scalar-value
>other-scalar-value
>no match

  zstyle -s :ztst:context:sub1 array-style scalar + && print $scalar
0:scalar with separator
>array+value+elements+with spaces

  zstyle -e :ztst:\* eval-style 'reply=($something)'
  something=(one two three)
  zstyle -a :ztst:eval eval-style array && print -l $array
0:zstyle -e evaluations
>one
>two
>three

# pattern ordering on output is not specified, so although in the
# current implementation it's deterministic we shouldn't
# assume it's always the same.  Thus we sort the array.
# (It might be a nice touch to order patterns by weight, which is
# the way they are stored for each separate style.)
  zstyle -g array && print -l ${(o)array}
0:retrieving patterns
>:ztst:*
>:ztst:context*
>:ztst:context:*
>:ztst:context:sub1

  zstyle -m :ztst:context:sub1 array-style 'w* *s'
0:positive pattern match

  zstyle -m :ztst:context:sub1 array-style 'v'
1:negative pattern match

  zstyle -g array ':ztst:context*' && print -l $array
0:retrieving styles by pattern
>boolean-style
>scalar-style

  zstyle -g array ':ztst:context:sub1' array-style && print -l $array
0:retrieving values by pattern and name
>array
>value
>elements
>with spaces

  zstyle -d :ztst:context:sub1
  zstyle
0:deleting styles by pattern only
>boolean-style
>        :ztst:context* false
>eval-style
>(eval)  :ztst:* 'reply=($something)'
>scalar-style
>        :ztst:context:* second-scalar-value
>        :ztst:context* other-scalar-value

  zstyle -d :ztst:context\* scalar-style
  zstyle
0:deleting styles by pattern and style name
>boolean-style
>        :ztst:context* false
>eval-style
>(eval)  :ztst:* 'reply=($something)'
>scalar-style
>        :ztst:context:* second-scalar-value

