tests: unify test-extension
authorAdrian Buehlmann <adrian@cadifra.com>
Fri, 03 Sep 2010 11:19:50 +0200
changeset 12191 56c74b2df53d
parent 12190 9231c629ec10
child 12192 968e9057ab8a
tests: unify test-extension
tests/test-extension
tests/test-extension.out
tests/test-extension.t
--- a/tests/test-extension	Fri Sep 03 09:46:17 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,181 +0,0 @@
-#!/bin/sh
-# Test basic extension support
-
-"$TESTDIR/hghave" no-outer-repo || exit 80
-
-cat > foobar.py <<EOF
-import os
-from mercurial import commands
-
-def uisetup(ui):
-    ui.write("uisetup called\\n")
-
-def reposetup(ui, repo):
-    ui.write("reposetup called for %s\\n" % os.path.basename(repo.root))
-    ui.write("ui %s= repo.ui\\n" % (ui == repo.ui and "=" or "!"))
-
-def foo(ui, *args, **kwargs):
-    ui.write("Foo\\n")
-
-def bar(ui, *args, **kwargs):
-    ui.write("Bar\\n")
-
-cmdtable = {
-    "foo": (foo, [], "hg foo"),
-    "bar": (bar, [], "hg bar"),
-}
-
-commands.norepo += ' bar'
-EOF
-abspath=`pwd`/foobar.py
-
-mkdir barfoo
-cp foobar.py barfoo/__init__.py
-barfoopath=`pwd`/barfoo
-
-hg init a
-cd a
-echo foo > file
-hg add file
-hg commit -m 'add file'
-
-echo '[extensions]' >> $HGRCPATH
-echo "foobar = $abspath" >> $HGRCPATH
-hg foo
-
-cd ..
-hg clone a b
-
-hg bar
-echo 'foobar = !' >> $HGRCPATH
-
-echo '% module/__init__.py-style'
-echo "barfoo = $barfoopath" >> $HGRCPATH
-cd a
-hg foo
-echo 'barfoo = !' >> $HGRCPATH
-
-# check that extensions are loaded in phases
-cat > foo.py <<EOF
-import os
-name = os.path.basename(__file__).rsplit('.', 1)[0]
-print "1) %s imported" % name
-def uisetup(ui):
-    print "2) %s uisetup" % name
-def extsetup():
-    print "3) %s extsetup" % name
-def reposetup(ui, repo):
-    print "4) %s reposetup" % name
-EOF
-
-cp foo.py bar.py
-echo 'foo = foo.py' >> $HGRCPATH
-echo 'bar = bar.py' >> $HGRCPATH
-
-# command with no output, we just want to see the extensions loaded
-hg paths
-
-# check hgweb's load order
-echo '% hgweb.cgi'
-cat > hgweb.cgi <<EOF
-#!/usr/bin/env python
-from mercurial import demandimport; demandimport.enable()
-from mercurial.hgweb import hgweb
-from mercurial.hgweb import wsgicgi
-
-application = hgweb('.', 'test repo')
-wsgicgi.launch(application)
-EOF
-SCRIPT_NAME='/' SERVER_PORT='80' SERVER_NAME='localhost' python hgweb.cgi \
-    | grep '^[0-9]) ' # ignores HTML output
-
-echo 'foo = !' >> $HGRCPATH
-echo 'bar = !' >> $HGRCPATH
-
-cd ..
-cat > empty.py <<EOF
-'''empty cmdtable
-'''
-cmdtable = {}
-EOF
-emptypath=`pwd`/empty.py
-echo "empty = $emptypath" >> $HGRCPATH
-hg help empty
-echo 'empty = !' >> $HGRCPATH
-
-cat > debugextension.py <<EOF
-'''only debugcommands
-'''
-def debugfoobar(ui, repo, *args, **opts):
-    "yet another debug command"
-    pass
-
-def foo(ui, repo, *args, **opts):
-    """yet another foo command
-
-    This command has been DEPRECATED since forever.
-    """
-    pass
-
-cmdtable = {
-    "debugfoobar": (debugfoobar, (), "hg debugfoobar"),
-    "foo": (foo, (), "hg foo")
-}
-EOF
-debugpath=`pwd`/debugextension.py
-echo "debugextension = $debugpath" >> $HGRCPATH
-echo "% hg help"
-hg help debugextension
-echo "% hg help --verbose"
-hg --verbose help debugextension
-echo "% hg help --debug"
-hg --debug help debugextension
-echo 'debugextension = !' >> $HGRCPATH
-
-echo % issue811
-debugpath=`pwd`/debugissue811.py
-cat > debugissue811.py <<EOF
-'''show all loaded extensions
-'''
-from mercurial import extensions, commands
-
-def debugextensions(ui):
-    "yet another debug command"
-    ui.write("%s\n" % '\n'.join([x for x, y in extensions.extensions()]))
-
-cmdtable = {"debugextensions": (debugextensions, (), "hg debugextensions")}
-commands.norepo += " debugextensions"
-EOF
-echo "debugissue811 = $debugpath" >> $HGRCPATH
-echo "mq=" >> $HGRCPATH
-echo "hgext.mq=" >> $HGRCPATH
-echo "hgext/mq=" >> $HGRCPATH
-
-echo % show extensions
-hg debugextensions
-
-echo '% disabled extension commands'
-HGRCPATH=
-export HGRCPATH
-hg help email
-hg qdel
-hg churn
-echo '% disabled extensions'
-hg help churn
-hg help patchbomb
-echo '% broken disabled extension and command'
-mkdir hgext
-echo > hgext/__init__.py
-cat > hgext/broken.py <<EOF
-"broken extension'
-EOF
-cat > path.py <<EOF
-import os, sys
-sys.path.insert(0, os.environ['HGEXTPATH'])
-EOF
-HGEXTPATH=`pwd`
-export HGEXTPATH
-hg --config extensions.path=./path.py help broken
-hg --config extensions.path=./path.py help foo > /dev/null
-
-exit 0
--- a/tests/test-extension.out	Fri Sep 03 09:46:17 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,134 +0,0 @@
-uisetup called
-reposetup called for a
-ui == repo.ui
-Foo
-uisetup called
-reposetup called for a
-ui == repo.ui
-reposetup called for b
-ui == repo.ui
-updating to branch default
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-uisetup called
-Bar
-% module/__init__.py-style
-uisetup called
-reposetup called for a
-ui == repo.ui
-Foo
-1) foo imported
-1) bar imported
-2) foo uisetup
-2) bar uisetup
-3) foo extsetup
-3) bar extsetup
-4) foo reposetup
-4) bar reposetup
-% hgweb.cgi
-1) foo imported
-1) bar imported
-2) foo uisetup
-2) bar uisetup
-3) foo extsetup
-3) bar extsetup
-4) foo reposetup
-4) bar reposetup
-4) foo reposetup
-4) bar reposetup
-empty extension - empty cmdtable
-
-no commands defined
-% hg help
-debugextension extension - only debugcommands
-
-no commands defined
-% hg help --verbose
-debugextension extension - only debugcommands
-
-list of commands:
-
- foo:
-      yet another foo command
-
-global options:
- -R --repository REPO    repository root directory or name of overlay bundle
-                         file
-    --cwd DIR            change working directory
- -y --noninteractive     do not prompt, assume 'yes' for any required answers
- -q --quiet              suppress output
- -v --verbose            enable additional output
-    --config CONFIG [+]  set/override config option (use 'section.name=value')
-    --debug              enable debugging output
-    --debugger           start debugger
-    --encoding ENCODE    set the charset encoding (default: ascii)
-    --encodingmode MODE  set the charset encoding mode (default: strict)
-    --traceback          always print a traceback on exception
-    --time               time how long the command takes
-    --profile            print command execution profile
-    --version            output version information and exit
- -h --help               display help and exit
-
-[+] marked option can be specified multiple times
-% hg help --debug
-debugextension extension - only debugcommands
-
-list of commands:
-
- debugfoobar:
-      yet another debug command
- foo:
-      yet another foo command
-
-global options:
- -R --repository REPO    repository root directory or name of overlay bundle
-                         file
-    --cwd DIR            change working directory
- -y --noninteractive     do not prompt, assume 'yes' for any required answers
- -q --quiet              suppress output
- -v --verbose            enable additional output
-    --config CONFIG [+]  set/override config option (use 'section.name=value')
-    --debug              enable debugging output
-    --debugger           start debugger
-    --encoding ENCODE    set the charset encoding (default: ascii)
-    --encodingmode MODE  set the charset encoding mode (default: strict)
-    --traceback          always print a traceback on exception
-    --time               time how long the command takes
-    --profile            print command execution profile
-    --version            output version information and exit
- -h --help               display help and exit
-
-[+] marked option can be specified multiple times
-% issue811
-% show extensions
-debugissue811
-mq
-% disabled extension commands
-'email' is provided by the following extension:
-
-    patchbomb  command to send changesets as (a series of) patch emails
-
-use "hg help extensions" for information on enabling extensions
-hg: unknown command 'qdel'
-'qdelete' is provided by the following extension:
-
-    mq  manage a stack of patches
-
-use "hg help extensions" for information on enabling extensions
-hg: unknown command 'churn'
-'churn' is provided by the following extension:
-
-    churn  command to display statistics about repository history
-
-use "hg help extensions" for information on enabling extensions
-% disabled extensions
-churn extension - command to display statistics about repository history
-
-use "hg help extensions" for information on enabling extensions
-patchbomb extension - command to send changesets as (a series of) patch emails
-
-use "hg help extensions" for information on enabling extensions
-% broken disabled extension and command
-broken extension - (no help text available)
-
-use "hg help extensions" for information on enabling extensions
-hg: unknown command 'foo'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-extension.t	Fri Sep 03 11:19:50 2010 +0200
@@ -0,0 +1,320 @@
+Test basic extension support
+
+  $ "$TESTDIR/hghave" no-outer-repo || exit 80
+
+  $ cat > foobar.py <<EOF
+  > import os
+  > from mercurial import commands
+  > 
+  > def uisetup(ui):
+  >     ui.write("uisetup called\\n")
+  > 
+  > def reposetup(ui, repo):
+  >     ui.write("reposetup called for %s\\n" % os.path.basename(repo.root))
+  >     ui.write("ui %s= repo.ui\\n" % (ui == repo.ui and "=" or "!"))
+  > 
+  > def foo(ui, *args, **kwargs):
+  >     ui.write("Foo\\n")
+  > 
+  > def bar(ui, *args, **kwargs):
+  >     ui.write("Bar\\n")
+  > 
+  > cmdtable = {
+  >    "foo": (foo, [], "hg foo"),
+  >    "bar": (bar, [], "hg bar"),
+  > }
+  > 
+  > commands.norepo += ' bar'
+  > EOF
+  $ abspath=`pwd`/foobar.py
+
+  $ mkdir barfoo
+  $ cp foobar.py barfoo/__init__.py
+  $ barfoopath=`pwd`/barfoo
+
+  $ hg init a
+  $ cd a
+  $ echo foo > file
+  $ hg add file
+  $ hg commit -m 'add file'
+
+  $ echo '[extensions]' >> $HGRCPATH
+  $ echo "foobar = $abspath" >> $HGRCPATH
+  $ hg foo
+  uisetup called
+  reposetup called for a
+  ui == repo.ui
+  Foo
+
+  $ cd ..
+  $ hg clone a b
+  uisetup called
+  reposetup called for a
+  ui == repo.ui
+  reposetup called for b
+  ui == repo.ui
+  updating to branch default
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+  $ hg bar
+  uisetup called
+  Bar
+  $ echo 'foobar = !' >> $HGRCPATH
+
+module/__init__.py-style
+
+  $ echo "barfoo = $barfoopath" >> $HGRCPATH
+  $ cd a
+  $ hg foo
+  uisetup called
+  reposetup called for a
+  ui == repo.ui
+  Foo
+  $ echo 'barfoo = !' >> $HGRCPATH
+
+Check that extensions are loaded in phases:
+
+  $ cat > foo.py <<EOF
+  > import os
+  > name = os.path.basename(__file__).rsplit('.', 1)[0]
+  > print "1) %s imported" % name
+  > def uisetup(ui):
+  >     print "2) %s uisetup" % name
+  > def extsetup():
+  >     print "3) %s extsetup" % name
+  > def reposetup(ui, repo):
+  >    print "4) %s reposetup" % name
+  > EOF
+
+  $ cp foo.py bar.py
+  $ echo 'foo = foo.py' >> $HGRCPATH
+  $ echo 'bar = bar.py' >> $HGRCPATH
+
+Command with no output, we just want to see the extensions loaded:
+
+  $ hg paths
+  1) foo imported
+  1) bar imported
+  2) foo uisetup
+  2) bar uisetup
+  3) foo extsetup
+  3) bar extsetup
+  4) foo reposetup
+  4) bar reposetup
+
+Check hgweb's load order:
+
+  $ cat > hgweb.cgi <<EOF
+  > #!/usr/bin/env python
+  > from mercurial import demandimport; demandimport.enable()
+  > from mercurial.hgweb import hgweb
+  > from mercurial.hgweb import wsgicgi
+  > 
+  > application = hgweb('.', 'test repo')
+  > wsgicgi.launch(application)
+  > EOF
+
+  $ SCRIPT_NAME='/' SERVER_PORT='80' SERVER_NAME='localhost' python hgweb.cgi \
+  >    | grep '^[0-9]) ' # ignores HTML output
+  1) foo imported
+  1) bar imported
+  2) foo uisetup
+  2) bar uisetup
+  3) foo extsetup
+  3) bar extsetup
+  4) foo reposetup
+  4) bar reposetup
+  4) foo reposetup
+  4) bar reposetup
+
+  $ echo 'foo = !' >> $HGRCPATH
+  $ echo 'bar = !' >> $HGRCPATH
+
+  $ cd ..
+
+  $ cat > empty.py <<EOF
+  > '''empty cmdtable
+  > '''
+  > cmdtable = {}
+  > EOF
+  $ emptypath=`pwd`/empty.py
+  $ echo "empty = $emptypath" >> $HGRCPATH
+  $ hg help empty
+  empty extension - empty cmdtable
+  
+  no commands defined
+
+  $ echo 'empty = !' >> $HGRCPATH
+
+  $ cat > debugextension.py <<EOF
+  > '''only debugcommands
+  > '''
+  > def debugfoobar(ui, repo, *args, **opts):
+  >     "yet another debug command"
+  >     pass
+  > 
+  > def foo(ui, repo, *args, **opts):
+  >     """yet another foo command
+  > 
+  >     This command has been DEPRECATED since forever.
+  >     """
+  >     pass
+  > 
+  > cmdtable = {
+  >    "debugfoobar": (debugfoobar, (), "hg debugfoobar"),
+  >    "foo": (foo, (), "hg foo")
+  > }
+  > EOF
+  $ debugpath=`pwd`/debugextension.py
+  $ echo "debugextension = $debugpath" >> $HGRCPATH
+
+  $ hg help debugextension
+  debugextension extension - only debugcommands
+  
+  no commands defined
+
+  $ hg --verbose help debugextension
+  debugextension extension - only debugcommands
+  
+  list of commands:
+  
+   foo:
+        yet another foo command
+  
+  global options:
+   -R --repository REPO    repository root directory or name of overlay bundle
+                           file
+      --cwd DIR            change working directory
+   -y --noninteractive     do not prompt, assume 'yes' for any required answers
+   -q --quiet              suppress output
+   -v --verbose            enable additional output
+      --config CONFIG [+]  set/override config option (use 'section.name=value')
+      --debug              enable debugging output
+      --debugger           start debugger
+      --encoding ENCODE    set the charset encoding (default: ascii)
+      --encodingmode MODE  set the charset encoding mode (default: strict)
+      --traceback          always print a traceback on exception
+      --time               time how long the command takes
+      --profile            print command execution profile
+      --version            output version information and exit
+   -h --help               display help and exit
+  
+  [+] marked option can be specified multiple times
+
+  $ hg --debug help debugextension
+  debugextension extension - only debugcommands
+  
+  list of commands:
+  
+   debugfoobar:
+        yet another debug command
+   foo:
+        yet another foo command
+  
+  global options:
+   -R --repository REPO    repository root directory or name of overlay bundle
+                           file
+      --cwd DIR            change working directory
+   -y --noninteractive     do not prompt, assume 'yes' for any required answers
+   -q --quiet              suppress output
+   -v --verbose            enable additional output
+      --config CONFIG [+]  set/override config option (use 'section.name=value')
+      --debug              enable debugging output
+      --debugger           start debugger
+      --encoding ENCODE    set the charset encoding (default: ascii)
+      --encodingmode MODE  set the charset encoding mode (default: strict)
+      --traceback          always print a traceback on exception
+      --time               time how long the command takes
+      --profile            print command execution profile
+      --version            output version information and exit
+   -h --help               display help and exit
+  
+  [+] marked option can be specified multiple times
+  $ echo 'debugextension = !' >> $HGRCPATH
+
+Issue811:
+
+  $ debugpath=`pwd`/debugissue811.py
+  $ cat > debugissue811.py <<EOF
+  > '''show all loaded extensions
+  > '''
+  > from mercurial import extensions, commands
+  > 
+  > def debugextensions(ui):
+  >     "yet another debug command"
+  >     ui.write("%s\n" % '\n'.join([x for x, y in extensions.extensions()]))
+  > 
+  > cmdtable = {"debugextensions": (debugextensions, (), "hg debugextensions")}
+  > commands.norepo += " debugextensions"
+  > EOF
+  $ echo "debugissue811 = $debugpath" >> $HGRCPATH
+  $ echo "mq=" >> $HGRCPATH
+  $ echo "hgext.mq=" >> $HGRCPATH
+  $ echo "hgext/mq=" >> $HGRCPATH
+
+Show extensions:
+
+  $ hg debugextensions
+  debugissue811
+  mq
+
+Disabled extension commands:
+
+  $ HGRCPATH=
+  $ export HGRCPATH
+  $ hg help email
+  'email' is provided by the following extension:
+  
+      patchbomb  command to send changesets as (a series of) patch emails
+  
+  use "hg help extensions" for information on enabling extensions
+  $ hg qdel
+  hg: unknown command 'qdel'
+  'qdelete' is provided by the following extension:
+  
+      mq  manage a stack of patches
+  
+  use "hg help extensions" for information on enabling extensions
+  $ hg churn
+  hg: unknown command 'churn'
+  'churn' is provided by the following extension:
+  
+      churn  command to display statistics about repository history
+  
+  use "hg help extensions" for information on enabling extensions
+
+Disabled extensions:
+
+  $ hg help churn
+  churn extension - command to display statistics about repository history
+  
+  use "hg help extensions" for information on enabling extensions
+  $ hg help patchbomb
+  patchbomb extension - command to send changesets as (a series of) patch emails
+  
+  use "hg help extensions" for information on enabling extensions
+
+Broken disabled extension and command:
+
+  $ mkdir hgext
+  $ echo > hgext/__init__.py
+  $ cat > hgext/broken.py <<EOF
+  > "broken extension'
+  > EOF
+  $ cat > path.py <<EOF
+  > import os, sys
+  > sys.path.insert(0, os.environ['HGEXTPATH'])
+  > EOF
+  $ HGEXTPATH=`pwd`
+  $ export HGEXTPATH
+
+  $ hg --config extensions.path=./path.py help broken
+  broken extension - (no help text available)
+  
+  use "hg help extensions" for information on enabling extensions
+
+  $ hg --config extensions.path=./path.py help foo > /dev/null
+  hg: unknown command 'foo'
+
+  $ exit 0
+