B07emulate.ztst   [plain text]


# Test the "emulate" builtin and related functions.

%prep

  isset() { 
    print -n "${1}: "
    if [[ -o $1 ]]; then print yes; else print no; fi
  }
  showopts() {
    # Set for Bourne shell emulation
    isset shwordsplit
    # Set in native mode and unless "emulate -R" is in use
    isset banghist
  }
  cshowopts() {
    showopts
    # Show a csh option, too
    isset cshnullglob
  }

%test

  (print Before
  showopts
  fn() {
     emulate sh
  }
  fn
   print After
  showopts)
0:Basic use of emulate
>Before
>shwordsplit: no
>banghist: yes
>After
>shwordsplit: yes
>banghist: yes

  fn() {
    emulate -L sh
    print During
    showopts
  }
  print Before
  showopts
  fn
  print After
  showopts
0:Use of emulate -L
>Before
>shwordsplit: no
>banghist: yes
>During
>shwordsplit: yes
>banghist: yes
>After
>shwordsplit: no
>banghist: yes

  (print Before
  showopts
  emulate -R sh
  print After
  showopts)
0:Use of emulate -R
>Before
>shwordsplit: no
>banghist: yes
>After
>shwordsplit: yes
>banghist: no

  print Before
  showopts
  emulate sh -c 'print During; showopts'
  print After
  showopts
0:Use of emulate -c
>Before
>shwordsplit: no
>banghist: yes
>During
>shwordsplit: yes
>banghist: yes
>After
>shwordsplit: no
>banghist: yes

  print Before
  showopts
  emulate -R sh -c 'print During; showopts'
  print After
  showopts
0:Use of emulate -R -c
>Before
>shwordsplit: no
>banghist: yes
>During
>shwordsplit: yes
>banghist: no
>After
>shwordsplit: no
>banghist: yes

  print Before
  showopts
  emulate -R sh -c 'shshowopts() { showopts; }'
  print After definition
  showopts
  print In sticky emulation
  shshowopts
  print After sticky emulation
  showopts
0:Basic sticky function emulation
>Before
>shwordsplit: no
>banghist: yes
>After definition
>shwordsplit: no
>banghist: yes
>In sticky emulation
>shwordsplit: yes
>banghist: no
>After sticky emulation
>shwordsplit: no
>banghist: yes

  print Before
  cshowopts
  emulate -R sh -c 'shshowopts() { cshowopts; }'
  emulate csh -c 'cshshowopts() {
    cshowopts
    print In nested sh emulation
    shshowopts
  }'
  print After definition
  cshowopts
  print In sticky csh emulation
  cshshowopts
  print After sticky emulation
  cshowopts
0:Basic sticky function emulation
>Before
>shwordsplit: no
>banghist: yes
>cshnullglob: no
>After definition
>shwordsplit: no
>banghist: yes
>cshnullglob: no
>In sticky csh emulation
>shwordsplit: no
>banghist: yes
>cshnullglob: yes
>In nested sh emulation
>shwordsplit: yes
>banghist: no
>cshnullglob: no
>After sticky emulation
>shwordsplit: no
>banghist: yes
>cshnullglob: no

  isalp() { if [[ -o alwayslastprompt ]]; then print on; else print off; fi; }
  emulate sh -c 'shfunc_inner() { setopt alwayslastprompt; }'
  emulate csh -c 'cshfunc_inner() { setopt alwayslastprompt; }'
  emulate sh -c 'shfunc_outer() {
    unsetopt alwayslastprompt;
    shfunc_inner;
    isalp
    unsetopt alwayslastprompt
    cshfunc_inner
    isalp
  }'
  shfunc_outer
0:Sticky emulation not triggered if sticky emulation unchanged
>on
>off