about summary refs log tree commit diff
path: root/Test/V04features.ztst
diff options
context:
space:
mode:
Diffstat (limited to 'Test/V04features.ztst')
-rw-r--r--Test/V04features.ztst162
1 files changed, 162 insertions, 0 deletions
diff --git a/Test/V04features.ztst b/Test/V04features.ztst
new file mode 100644
index 000000000..f5f136b65
--- /dev/null
+++ b/Test/V04features.ztst
@@ -0,0 +1,162 @@
+%prep
+
+# Do some tests on handling of features.
+# This also does some slightly more sophisticated loading and
+# unloading tests than we did in V01zmodload.ztst.
+#
+# We use zsh/datetime because it has a list of features that is short
+# but contains two types.
+
+  if ! (zmodload zsh/datetime >/dev/null 2>/dev/null); then
+    ZTST_unimplemented="can't load the zsh/datetime module for testing"
+  fi
+
+%test
+  zmodload -F zsh/datetime
+  zmodload -lF zsh/datetime
+0:Loading modules with no features
+>-b:strftime
+>-p:EPOCHSECONDS
+
+  zmodload -F zsh/datetime b:strftime
+  zmodload -lF zsh/datetime
+0:Enabling features
+>+b:strftime
+>-p:EPOCHSECONDS
+
+  zmodload -F zsh/datetime +p:EPOCHSECONDS -b:strftime
+  zmodload -lF zsh/datetime
+0:Disabling features
+>-b:strftime
+>+p:EPOCHSECONDS
+
+  zmodload -Fe zsh/datetime p:EPOCHSECONDS b:strftime
+0:Testing existing features
+
+  zmodload -Fe zsh/datetime +p:EPOCHSECONDS
+0:Testing features are in given state (on feature is on)
+
+  zmodload -Fe zsh/datetime -p:EPOCHSECONDS
+1:Testing features are in given state (on feature is not off
+
+  zmodload -Fe zsh/datetime +p:strftime
+1:Testing features are in given state (off feature is not on)
+
+  zmodload -Fe zsh/datetime -b:strftime
+0:Testing features are in given state (off feature is off
+
+  zmodload -Fe zsh/datetime p:EPOCHSECONDS b:strftime b:mktimebetter
+1:Testing non-existent features
+
+  zmodload -FlP dtf zsh/datetime
+  for feature in b:strftime p:EPOCHSECONDS; do
+    if [[ ${${dtf[(R)?$feature]}[1]} = + ]]; then
+      print $feature is enabled
+    else
+      print $feature is disabled
+    fi
+  done
+0:Testing features via array parameter
+>b:strftime is disabled
+>p:EPOCHSECONDS is enabled
+
+  fn() {
+    local EPOCHSECONDS=scruts
+    print $EPOCHSECONDS
+    print ${(t)EPOCHSECONDS}
+  }
+  fn
+  if [[ $EPOCHSECONDS = <-> ]]; then
+    print EPOCHSECONDS is a number
+  else
+    print EPOCHSECONDS is some random piece of junk
+  fi
+  print ${(t)EPOCHSECONDS}
+0:Module special parameter is hidden by a local parameter
+>scruts
+>scalar-local
+>EPOCHSECONDS is a number
+>integer-readonly-hide-hideval-special
+
+  typeset +h EPOCHSECONDS
+  fn() {
+    local EPOCHSECONDS=scruts
+    print Didn\'t get here >&2
+  }
+  fn
+1:Unhidden readonly special can't be assigned to when made local
+?fn:1: read-only variable: EPOCHSECONDS
+
+  zmodload -u zsh/datetime
+0:Module unloaded
+
+  zmodload -e zsh/datetime
+1:Module doesn't exist when unloaded
+
+  zmodload -Fe zsh/datetime p:EPOCHSECONDS
+1:Module doesn't have features when unloaded
+
+  fn() {
+    local EPOCHSECONDS=scrimf
+    zmodload zsh/datetime
+  }
+  fn
+# status is zero because load succeded although features not all enabled
+2:Failed to add parameter if local parameter present
+?fn:2: Can't add module parameter `EPOCHSECONDS': local parameter exists
+?fn:zsh/datetime:2: error when adding parameter `EPOCHSECONDS'
+
+  zmodload -lF zsh/datetime
+0:Feature state with loading after error enabling
+>+b:strftime
+>-p:EPOCHSECONDS
+
+  zmodload -F zsh/datetime p:EPOCHSECONDS
+  zmodload -Fe zsh/datetime +p:EPOCHSECONDS
+0:Successfully added feature parameter that previously failed
+
+  fn() {
+    local EPOCHSECONDS=scrooble
+    zmodload -u zsh/datetime
+    print $EPOCHSECONDS
+  }
+  fn
+  print ${+EPOCHSECONDS}
+0:Successfully unloaded a module despite a parameter being hidden
+>scrooble
+>0
+
+  EPOCHSECONDS=(any old parameter)
+  print -l $EPOCHSECONDS
+0:Using parameter as normal after unloading is OK
+>any
+>old
+>parameter
+
+  print strftime is ${builtins[strftime]:-undefined}
+  zmodload -F zsh/datetime b:strftime
+  print strftime is ${builtins[strftime]:-undefined}
+  zmodload -F zsh/datetime -b:strftime
+  print strftime is ${builtins[strftime]:-undefined}
+0:Enabling and disabling of builtins as features
+>strftime is undefined
+>strftime is defined
+>strftime is undefined
+
+  zmodload -u zsh/datetime
+  zmodload zsh/datetime
+2:Loading won't override global parameter
+?(eval):2: Can't add module parameter `EPOCHSECONDS': parameter already exists
+?(eval):zsh/datetime:2: error when adding parameter `EPOCHSECONDS'
+
+  unset EPOCHSECONDS
+  zmodload -F zsh/datetime p:EPOCHSECONDS
+  zmodload -Fe zsh/datetime +p:EPOCHSECONDS
+0:unsetting a global parameter allows feature parameter to be enabled
+
+  zmodload -F zsh/datetime -b:strftime -p:EPOCHSECONDS
+  zmodload zsh/datetime
+  zmodload -lF zsh/datetime
+0:zmodload with no -F enables all features
+>+b:strftime
+>+p:EPOCHSECONDS