Rev 3335: More aggressive test loader for selftest --load-list in http://code.launchpad.net/%7Ev-ladeuil/bzr/bzr.integration

Vincent Ladeuil v.ladeuil+lp at free.fr
Fri Apr 4 11:44:57 BST 2008


At http://code.launchpad.net/%7Ev-ladeuil/bzr/bzr.integration

------------------------------------------------------------
revno: 3335
revision-id: v.ladeuil+lp at free.fr-20080404104423-ugwfbqj7i7pry897
parent: pqm at pqm.ubuntu.com-20080404055943-evqxhz3x63dz9wbt
parent: v.ladeuil+lp at free.fr-20080402134513-xfj7652jfsxg6hwh
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: trunk
timestamp: Fri 2008-04-04 12:44:23 +0200
message:
  More aggressive test loader for selftest --load-list
modified:
  NEWS                           NEWS-20050323055033-4e00b5db738777ff
  bzrlib/plugin.py               plugin.py-20050622060424-829b654519533d69
  bzrlib/tests/TestUtil.py       TestUtil.py-20050824080200-5f70140a2d938694
  bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
  bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
  bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
    ------------------------------------------------------------
    revno: 3302.8.21
    revision-id: v.ladeuil+lp at free.fr-20080402134513-xfj7652jfsxg6hwh
    parent: v.ladeuil+lp at free.fr-20080401094234-ied49b94be3tiwlq
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Wed 2008-04-02 15:45:13 +0200
    message:
      Fixed as per Robert's review.
      
      * bzrlib/tests/test_plugins.py:
      (TestPlugins.test_no_load_plugin_tests_gives_None_for_load_plugin_tests,
      TestPlugins.test_load_plugin_tests_gives_load_plugin_tests_result):
      Updated.
      
      * bzrlib/tests/__init__.py:
      (test_suite): Use load_plugin_tests for plugins.
      
      * bzrlib/plugin.py:
      (PlugIn.load_plugin_tests): Renamed from load_tests to avoid
      confusion disambiguate with the load_tests function defined in
      test modules and plugin modules.
    modified:
      bzrlib/plugin.py               plugin.py-20050622060424-829b654519533d69
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
      bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
    ------------------------------------------------------------
    revno: 3302.8.20
    revision-id: v.ladeuil+lp at free.fr-20080401094234-ied49b94be3tiwlq
    parent: v.ladeuil+lp at free.fr-20080401093717-u3oywqologcr1s7d
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Tue 2008-04-01 11:42:34 +0200
    message:
      Add NEWS entry.
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
    ------------------------------------------------------------
    revno: 3302.8.19
    revision-id: v.ladeuil+lp at free.fr-20080401093717-u3oywqologcr1s7d
    parent: v.ladeuil+lp at free.fr-20080401083930-6jak7atgwu3q00yr
    parent: pqm at pqm.ubuntu.com-20080401091848-6y4f104r061ad8bk
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Tue 2008-04-01 11:37:17 +0200
    message:
      merge bzr.dev
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/bzrdir.py               bzrdir.py-20060131065624-156dfea39c4387cb
      bzrlib/config.py               config.py-20051011043216-070c74f4e9e338e8
      bzrlib/errors.py               errors.py-20050309040759-20512168c4e14fbd
      bzrlib/mail_client.py          mail_client.py-20070809192806-vuxt3t19srtpjpdn-1
      bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
      bzrlib/smart/branch.py         branch.py-20061124031907-mzh3pla28r83r97f-1
      bzrlib/smart/bzrdir.py         bzrdir.py-20061122024551-ol0l0o0oofsu9b3t-1
      bzrlib/smart/client.py         client.py-20061116014825-2k6ada6xgulslami-1
      bzrlib/smart/medium.py         medium.py-20061103051856-rgu2huy59fkz902q-1
      bzrlib/smart/protocol.py       protocol.py-20061108035435-ot0lstk2590yqhzr-1
      bzrlib/smart/repository.py     repository.py-20061128022038-vr5wy5bubyb8xttk-1
      bzrlib/smart/request.py        request.py-20061108095550-gunadhxmzkdjfeek-1
      bzrlib/smart/server.py         server.py-20061110062051-chzu10y32vx8gvur-1
      bzrlib/smart/vfs.py            vfs.py-20061108095550-gunadhxmzkdjfeek-2
      bzrlib/tests/test_errors.py    test_errors.py-20060210110251-41aba2deddf936a8
      bzrlib/tests/test_mail_client.py test_mail_client.py-20070809192806-vuxt3t19srtpjpdn-2
      bzrlib/tests/test_remote.py    test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
      bzrlib/tests/test_smart.py     test_smart.py-20061122024551-ol0l0o0oofsu9b3t-2
      bzrlib/tests/test_smart_transport.py test_ssh_transport.py-20060608202016-c25gvf1ob7ypbus6-2
      bzrlib/tests/test_transport_implementations.py test_transport_implementations.py-20051227111451-f97c5c7d5c49fce7
      bzrlib/tests/test_wsgi.py      test_wsgi.py-20061005091552-rz8pva0olkxv0sd8-1
      bzrlib/transport/__init__.py   transport.py-20050711165921-4978aa7ce1285ad5
      bzrlib/transport/chroot.py     chroot.py-20061011104729-0us9mgm97z378vnt-1
      bzrlib/transport/ftp.py        ftp.py-20051116161804-58dc9506548c2a53
      bzrlib/transport/http/wsgi.py  wsgi.py-20061005091552-rz8pva0olkxv0sd8-2
      bzrlib/transport/remote.py     ssh.py-20060608202016-c25gvf1ob7ypbus6-1
      doc/en/user-guide/http_smart_server.txt fastcgi.txt-20061005091552-rz8pva0olkxv0sd8-3
    ------------------------------------------------------------
    revno: 3302.8.18
    revision-id: v.ladeuil+lp at free.fr-20080401083930-6jak7atgwu3q00yr
    parent: v.ladeuil+lp at free.fr-20080331171715-ovu1ubxwv10nvxit
    parent: v.ladeuil+lp at free.fr-20080331172008-o31h3ai3qb8vwjx4
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Tue 2008-04-01 10:39:30 +0200
    message:
      merge down-thread
    ------------------------------------------------------------
    revno: 3302.8.17
    revision-id: v.ladeuil+lp at free.fr-20080331171715-ovu1ubxwv10nvxit
    parent: v.ladeuil+lp at free.fr-20080331161703-0ueczeko01f5bf2v
    parent: v.ladeuil+lp at free.fr-20080331171123-d1aihpfvqnx6u8mp
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Mon 2008-03-31 19:17:15 +0200
    message:
      merge bzr.dev
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzr                            bzr.py-20050313053754-5485f144c7006fa6
      bzrlib/help_topics/__init__.py help_topics.py-20060920210027-rnim90q9e0bwxvy4-1
    ------------------------------------------------------------
    revno: 3302.8.16
    revision-id: v.ladeuil+lp at free.fr-20080331161703-0ueczeko01f5bf2v
    parent: v.ladeuil+lp at free.fr-20080330202852-doh9ipbxw6zewnc7
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Mon 2008-03-31 18:17:03 +0200
    message:
      Add an optional loader parameter needed when deploying the test
      loader for parametrized inventory_implementations and
      repository_implementations tests.
      
      * bzrlib/tests/__init__.py:
      (multiply_tests_from_modules): Add an optional loader parameter.
    modified:
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
    ------------------------------------------------------------
    revno: 3302.8.15
    revision-id: v.ladeuil+lp at free.fr-20080330202852-doh9ipbxw6zewnc7
    parent: v.ladeuil+lp at free.fr-20080326214440-hvwb7zsfp827m3lq
    parent: v.ladeuil+lp at free.fr-20080330202829-5ups6isujc9z5p8i
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Sun 2008-03-30 22:28:52 +0200
    message:
      merge bzr.dev
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/branch.py               branch.py-20050309040759-e4baf4e0d046576e
      bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
      bzrlib/bzrdir.py               bzrdir.py-20060131065624-156dfea39c4387cb
      bzrlib/errors.py               errors.py-20050309040759-20512168c4e14fbd
      bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
      bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
      bzrlib/reconcile.py            reweave_inventory.py-20051108164726-1e5e0934febac06e
      bzrlib/remote.py               remote.py-20060720103555-yeeg2x51vn0rbtdp-1
      bzrlib/repofmt/knitrepo.py     knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
      bzrlib/repofmt/pack_repo.py    pack_repo.py-20070813041115-gjv5ma7ktfqwsjgn-1
      bzrlib/repofmt/weaverepo.py    presplitout.py-20070125045333-wfav3tsh73oxu3zk-1
      bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
      bzrlib/revision.py             revision.py-20050309040759-e77802c08f3999d5
      bzrlib/smart/medium.py         medium.py-20061103051856-rgu2huy59fkz902q-1
      bzrlib/smart/repository.py     repository.py-20061128022038-vr5wy5bubyb8xttk-1
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
      bzrlib/tests/blackbox/test_serve.py test_serve.py-20060913064329-8t2pvmsikl4s3xhl-1
      bzrlib/tests/branch_implementations/test_branch.py testbranch.py-20050711070244-121d632bc37d7253
      bzrlib/tests/interversionedfile_implementations/test_join.py test_join.py-20060302012326-9b5e9b0f0a03fedc
      bzrlib/tests/repository_implementations/test_reconcile.py test_reconcile.py-20060223022332-572ef70a3288e369
      bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
      bzrlib/tests/test_fetch.py     testfetch.py-20050825090644-f73e07e7dfb1765a
      bzrlib/tests/test_knit.py      test_knit.py-20051212171302-95d4c00dd5f11f2b
      bzrlib/tests/test_log.py       testlog.py-20050728115707-1a514809d7d49309
      bzrlib/tests/test_remote.py    test_remote.py-20060720103555-yeeg2x51vn0rbtdp-2
      bzrlib/tests/test_transport_implementations.py test_transport_implementations.py-20051227111451-f97c5c7d5c49fce7
      bzrlib/tests/test_versionedfile.py test_versionedfile.py-20060222045249-db45c9ed14a1c2e5
      bzrlib/transport/__init__.py   transport.py-20050711165921-4978aa7ce1285ad5
      bzrlib/transport/http/__init__.py http_transport.py-20050711212304-506c5fd1059ace96
      bzrlib/versionedfile.py        versionedfile.py-20060222045106-5039c71ee3b65490
      bzrlib/workingtree.py          workingtree.py-20050511021032-29b6ec0a681e02e3
      doc/developers/repository.txt  repository.txt-20070709152006-xkhlek456eclha4u-1
      doc/en/user-guide/annotating_changes.txt annotating_changes.t-20071122141511-0knao2lklsdsvb1q-1
      doc/en/user-guide/bazaar_workflows.txt bazaar_workflows.txt-20071114035000-q36a9h57ps06uvnl-1
      doc/en/user-guide/installing_bazaar.txt installing_bazaar.tx-20071114035000-q36a9h57ps06uvnl-4
      doc/en/user-guide/introducing_bazaar.txt introducing_bazaar.t-20071114035000-q36a9h57ps06uvnl-5
      doc/en/user-guide/partner_intro.txt partner_workflow.txt-20071122141511-0knao2lklsdsvb1q-4
      doc/en/user-guide/undoing_mistakes.txt undoing_mistakes.txt-20071121092300-8fyacngt1w98e5mp-1
    ------------------------------------------------------------
    revno: 3302.8.14
    revision-id: v.ladeuil+lp at free.fr-20080326214440-hvwb7zsfp827m3lq
    parent: v.ladeuil+lp at free.fr-20080326213706-ekg9wg715ynpq16n
    parent: v.ladeuil+lp at free.fr-20080326214357-q0b9195s9qqfc2pw
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Wed 2008-03-26 22:44:40 +0100
    message:
      merge bzr.dev
    modified:
      NEWS                           NEWS-20050323055033-4e00b5db738777ff
      bzrlib/_knit_load_data_c.pyx   knit_c.pyx-20070509143944-u42gy8w387a10m0j-1
      bzrlib/_knit_load_data_py.py   _knit_load_data_py.p-20070629000948-9a0nh4s118bi5y8n-1
      bzrlib/builtins.py             builtins.py-20050830033751-fc01482b9ca23183
      bzrlib/bundle/__init__.py      changeset.py-20050513021216-b02ab57fb9738913
      bzrlib/bundle/serializer/v4.py v10.py-20070611062757-5ggj7k18s9dej0fr-1
      bzrlib/debug.py                debug.py-20061102062349-vdhrw9qdpck8cl35-1
      bzrlib/fetch.py                fetch.py-20050818234941-26fea6105696365d
      bzrlib/help_topics/__init__.py help_topics.py-20060920210027-rnim90q9e0bwxvy4-1
      bzrlib/knit.py                 knit.py-20051212171256-f056ac8f0fbe1bd9
      bzrlib/log.py                  log.py-20050505065812-c40ce11702fe5fb1
      bzrlib/merge.py                merge.py-20050513021216-953b65a438527106
      bzrlib/multiparent.py          __init__.py-20070410133617-n1jdhcc1n1mibarp-1
      bzrlib/reconcile.py            reweave_inventory.py-20051108164726-1e5e0934febac06e
      bzrlib/repofmt/knitrepo.py     knitrepo.py-20070206081537-pyy4a00xdas0j4pf-1
      bzrlib/repofmt/weaverepo.py    presplitout.py-20070125045333-wfav3tsh73oxu3zk-1
      bzrlib/repository.py           rev_storage.py-20051111201905-119e9401e46257e3
      bzrlib/symbol_versioning.py    symbol_versioning.py-20060105104851-9ecf8af605d15a80
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
      bzrlib/tests/blackbox/test_pull.py test_pull.py-20051201144907-64959364f629947f
      bzrlib/tests/interversionedfile_implementations/test_join.py test_join.py-20060302012326-9b5e9b0f0a03fedc
      bzrlib/tests/repository_implementations/test_check_reconcile.py test_broken.py-20070928125406-62236394w0jpbpd6-2
      bzrlib/tests/repository_implementations/test_iter_reverse_revision_history.py test_iter_reverse_re-20070217015036-spu7j5ggch7pbpyd-1
      bzrlib/tests/repository_implementations/test_repository.py test_repository.py-20060131092128-ad07f494f5c9d26c
      bzrlib/tests/test_bundle.py    test.py-20050630184834-092aa401ab9f039c
      bzrlib/tests/test_knit.py      test_knit.py-20051212171302-95d4c00dd5f11f2b
      bzrlib/tests/test_osutils.py   test_osutils.py-20051201224856-e48ee24c12182989
      bzrlib/tests/test_read_bundle.py test_read_bundle.py-20060615211421-ud8cwr1ulgd914zf-1
      bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
      bzrlib/tests/test_versionedfile.py test_versionedfile.py-20060222045249-db45c9ed14a1c2e5
      bzrlib/versionedfile.py        versionedfile.py-20060222045106-5039c71ee3b65490
      bzrlib/weave.py                knit.py-20050627021749-759c29984154256b
    ------------------------------------------------------------
    revno: 3302.8.13
    revision-id: v.ladeuil+lp at free.fr-20080326213706-ekg9wg715ynpq16n
    parent: v.ladeuil+lp at free.fr-20080326121905-8smldtdh74skxa1i
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Wed 2008-03-26 22:37:06 +0100
    message:
      DocTests can now be filtered at module level too.
      
      * bzrlib/tests/__init__.py:
      (MODULES_TO_DOCTEST): Moved to test_suite().
      (test_suite): DocTestSuite is perfectly happy with a module name.
    modified:
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
    ------------------------------------------------------------
    revno: 3302.8.12
    revision-id: v.ladeuil+lp at free.fr-20080326121905-8smldtdh74skxa1i
    parent: v.ladeuil+lp at free.fr-20080326112940-leugmcpkbzox54c1
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Wed 2008-03-26 13:19:05 +0100
    message:
      Simplify tests.test_suite.
      
      * bzrlib/tests/__init__.py:
      (test_suite): Simplified by creating a
      TestFilteredByModuleTestLoader if needed, using the appropriate
      loader for every category of tests and filtering once at the
      end. Punt for DocTests to keep the commit short.
    modified:
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
    ------------------------------------------------------------
    revno: 3302.8.11
    revision-id: v.ladeuil+lp at free.fr-20080326112940-leugmcpkbzox54c1
    parent: v.ladeuil+lp at free.fr-20080326090634-1yv15m2m2e08uezt
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Wed 2008-03-26 12:29:40 +0100
    message:
      Simplify plugin.load_tests.
      
      * bzrlib/tests/test_plugins.py:
      (TestPlugins.test_no_load_tests_gives_None_for_load_tests)
      (TestPlugins.test_load_tests_gives_load_tests_result): Make the
      tests a bit more real.
    modified:
      bzrlib/plugin.py               plugin.py-20050622060424-829b654519533d69
      bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
    ------------------------------------------------------------
    revno: 3302.8.10
    revision-id: v.ladeuil+lp at free.fr-20080326090634-1yv15m2m2e08uezt
    parent: v.ladeuil+lp at free.fr-20080326084201-5nk05zka1xnoua90
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Wed 2008-03-26 10:06:34 +0100
    message:
      Prepare bzrlib.plugin to use the new test loader.
      
      * bzrlib/tests/test_plugins.py:
      (TestPlugins.test_no_load_tests_gives_None_for_load_tests): Smoke
      tests for plugin.load_tests().
      
      * bzrlib/plugin.py:
      (PlugIn.load_tests): Add the ability to use load_tests() instead
      of test_suite().
    modified:
      bzrlib/plugin.py               plugin.py-20050622060424-829b654519533d69
      bzrlib/tests/test_plugins.py   plugins.py-20050622075746-32002b55e5e943e9
    ------------------------------------------------------------
    revno: 3302.8.9
    revision-id: v.ladeuil+lp at free.fr-20080326084201-5nk05zka1xnoua90
    parent: v.ladeuil+lp at free.fr-20080326084115-uw91u4rgwg40zkri
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Wed 2008-03-26 09:42:01 +0100
    message:
      Fix wrong conflict resolution. loom-newbie error.
      
      * bzrlib/tests/__init__.py:
      (test_suite): Fix wrong conflict resolution.
    modified:
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
    ------------------------------------------------------------
    revno: 3302.8.8
    revision-id: v.ladeuil+lp at free.fr-20080326084115-uw91u4rgwg40zkri
    parent: v.ladeuil+lp at free.fr-20080324220405-vov4nc8l72gez4zx
    parent: v.ladeuil+lp at free.fr-20080326081001-akh733lcdhiep83b
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Wed 2008-03-26 09:41:15 +0100
    message:
      Fix typos
    modified:
      bzrlib/tests/TestUtil.py       TestUtil.py-20050824080200-5f70140a2d938694
      bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
    ------------------------------------------------------------
    revno: 3302.8.7
    revision-id: v.ladeuil+lp at free.fr-20080324220405-vov4nc8l72gez4zx
    parent: v.ladeuil+lp at free.fr-20080324191554-gkdmoqva25niz2iz
    parent: v.ladeuil+lp at free.fr-20080324220159-1d3l3niap11l5bhi
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Mon 2008-03-24 23:04:05 +0100
    message:
      Remove cruft
    modified:
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
    ------------------------------------------------------------
    revno: 3302.8.6
    revision-id: v.ladeuil+lp at free.fr-20080324191554-gkdmoqva25niz2iz
    parent: v.ladeuil+lp at free.fr-20080324184517-poyn4rh728ycmf5a
    parent: v.ladeuil+lp at free.fr-20080324191512-mcx6mmm1cfcz38fa
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Mon 2008-03-24 20:15:54 +0100
    message:
      Help identify duplicates IDs in test suite
    modified:
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
      bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
    ------------------------------------------------------------
    revno: 3302.8.5
    revision-id: v.ladeuil+lp at free.fr-20080324184517-poyn4rh728ycmf5a
    parent: v.ladeuil+lp at free.fr-20080324183945-ghjjej8evq317az0
    parent: v.ladeuil+lp at free.fr-20080324184438-9f3qbvf83jo1pqdm
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Mon 2008-03-24 19:45:17 +0100
    message:
      merge down thread
    modified:
      bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
    ------------------------------------------------------------
    revno: 3302.8.4
    revision-id: v.ladeuil+lp at free.fr-20080324183945-ghjjej8evq317az0
    parent: v.ladeuil+lp at free.fr-20080324183216-65qxsdvvjud16rpc
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Mon 2008-03-24 19:39:45 +0100
    message:
      Cosmetic changes.
      
      * bzrlib/tests/test_selftest.py:
      (TestFilteredByModuleTestLoader._create_loader): Fix useless
      broken line.
      
      * bzrlib/tests/__init__.py:
      (condition_id_in_list): Fix comment.
    modified:
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
      bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
    ------------------------------------------------------------
    revno: 3302.8.3
    revision-id: v.ladeuil+lp at free.fr-20080324183216-65qxsdvvjud16rpc
    parent: v.ladeuil+lp at free.fr-20080324181758-pzlqy05mg3ktdivu
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Mon 2008-03-24 19:32:16 +0100
    message:
      Use better names for TestIdList methods.
      
      * bzrlib/tests/test_selftest.py:
      Update tests.
      
      * bzrlib/tests/__init__.py:
      (TestIdList.is_module_name_used): Renamed to refers_to.
      (TestIdList.test_in): Renamed to includes.
    modified:
      bzrlib/tests/__init__.py       selftest.py-20050531073622-8d0e3c8845c97a64
      bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
    ------------------------------------------------------------
    revno: 3302.8.2
    revision-id: v.ladeuil+lp at free.fr-20080324181758-pzlqy05mg3ktdivu
    parent: v.ladeuil+lp at free.fr-20080324181430-91hpx1x34cfexygw
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Mon 2008-03-24 19:17:58 +0100
    message:
      New test loader reducing modules imports and tests loaded.
      
      * bzrlib/tests/test_selftest.py:
      (TestFilteredByModuleTestLoader): Tests for a loader that don't
      import unneeded modules.
      * bzrlib/tests/TestUtil.py:
      (FilteredByModuleTestLoader): Specialized loader importing and
      loading tests for a reduced set of modules.
    modified:
      bzrlib/tests/TestUtil.py       TestUtil.py-20050824080200-5f70140a2d938694
      bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
    ------------------------------------------------------------
    revno: 3302.8.1
    revision-id: v.ladeuil+lp at free.fr-20080324181430-91hpx1x34cfexygw
    parent: v.ladeuil+lp at free.fr-20080324174247-ngn30tddzl2x3hyr
    parent: v.ladeuil+lp at free.fr-20080324181042-15cfp1w770nf3pgb
    committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
    branch nick: filter-by-module-test-loader
    timestamp: Mon 2008-03-24 19:14:30 +0100
    message:
      merge down-thread
    modified:
      bzrlib/tests/TestUtil.py       TestUtil.py-20050824080200-5f70140a2d938694
      bzrlib/tests/test_selftest.py  test_selftest.py-20051202044319-c110a115d8c0456a
-------------- next part --------------
=== modified file 'NEWS'
--- a/NEWS	2008-04-04 04:05:39 +0000
+++ b/NEWS	2008-04-04 10:44:23 +0000
@@ -148,6 +148,13 @@
       failing test.  Be aware that using this feature is likely to cause
       spurious test failures if used with the full suite. (Andrew Bennetts)
 
+    * selftest --load-list now uses a new more agressive test loader that will
+      avoid loading unneeded modules and building their tests. Plugins can use
+      this new loader by defining a load_tests function instead of a test_suite
+      function. (a forthcoming patch will provide many examples on how to
+      implement this).
+      (Vincent Ladeuil)
+
     * selftest --load-list now does some sanity checks regarding duplicate test
       IDs and tests present in the list but not found in the actual test suite.
       (Vincent Ladeuil)

=== modified file 'bzrlib/plugin.py'
--- a/bzrlib/plugin.py	2008-03-17 13:10:32 +0000
+++ b/bzrlib/plugin.py	2008-04-02 13:45:13 +0000
@@ -407,13 +407,25 @@
         else:
             return None
 
+    def load_plugin_tests(self, loader):
+        """Return the adapted plugin's test suite.
+
+        :param loader: The custom loader that should be used to load additional
+            tests.
+
+        """
+        if getattr(self.module, 'load_tests', None) is not None:
+            return loader.loadTestsFromModule(self.module)
+        else:
+            return None
+
     def version_info(self):
         """Return the plugin's version_tuple or None if unknown."""
         version_info = getattr(self.module, 'version_info', None)
         if version_info is not None and len(version_info) == 3:
             version_info = tuple(version_info) + ('final', 0)
         return version_info
-    
+
     def _get__version__(self):
         version_info = self.version_info()
         if version_info is None:

=== modified file 'bzrlib/tests/TestUtil.py'
--- a/bzrlib/tests/TestUtil.py	2008-03-26 08:10:01 +0000
+++ b/bzrlib/tests/TestUtil.py	2008-03-26 08:41:15 +0000
@@ -141,6 +141,26 @@
         self.test_func_names[test_case_class] = test_fn_names
         return test_fn_names
 
+
+class FilteredByModuleTestLoader(TestLoader):
+    """A test loader that import only the needed modules."""
+
+    def __init__(self, needs_module):
+        """Constructor.
+
+        :param needs_module: a callable taking a module name as a
+            parameter returing True if the module should be loaded.
+        """
+        TestLoader.__init__(self)
+        self.needs_module = needs_module
+
+    def loadTestsFromModuleName(self, name):
+        if self.needs_module(name):
+            return TestLoader.loadTestsFromModuleName(self, name)
+        else:
+            return self.suiteClass()
+
+
 def _load_module_by_name(mod_name):
     parts = mod_name.split('.')
     module = __import__(mod_name)

=== modified file 'bzrlib/tests/__init__.py'
--- a/bzrlib/tests/__init__.py	2008-04-03 00:18:39 +0000
+++ b/bzrlib/tests/__init__.py	2008-04-04 10:44:23 +0000
@@ -109,22 +109,6 @@
 
 default_transport = LocalURLServer
 
-MODULES_TO_DOCTEST = [
-        bzrlib,
-        bzrlib.timestamp,
-        bzrlib.errors,
-        bzrlib.export,
-        bzrlib.inventory,
-        bzrlib.iterablefile,
-        bzrlib.lockdir,
-        bzrlib.merge3,
-        bzrlib.option,
-        bzrlib.store,
-        bzrlib.version_info_formats.format_custom,
-        # quoted to avoid module-loading circularity
-        'bzrlib.tests',
-        ]
-
 
 def packages_to_test():
     """Return a list of packages to test.
@@ -2283,11 +2267,11 @@
 def condition_id_in_list(id_list):
     """Create a condition filter which verify that test's id in a list.
     
-    :param name: A TestIdList object.
+    :param id_list: A TestIdList object.
     :return: A callable that returns True if the test's id appears in the list.
     """
     def condition(test):
-        return id_list.test_in(test.id())
+        return id_list.includes(test.id())
     return condition
 
 
@@ -2659,11 +2643,11 @@
                 modules[mod_name] = True
         self.modules = modules
 
-    def is_module_name_used(self, module_name):
+    def refers_to(self, module_name):
         """Is there tests for the module or one of its sub modules."""
         return self.modules.has_key(module_name)
 
-    def test_in(self, test_id):
+    def includes(self, test_id):
         return self.tests.has_key(test_id)
 
 
@@ -2810,68 +2794,68 @@
         'bzrlib.tests.test_transport_implementations',
         'bzrlib.tests.test_read_bundle',
         ]
-    suite = TestUtil.TestSuite()
     loader = TestUtil.TestLoader()
 
-    if keep_only is not None:
+    if keep_only is None:
+        loader = TestUtil.TestLoader()
+    else:
         id_filter = TestIdList(keep_only)
+        loader = TestUtil.FilteredByModuleTestLoader(id_filter.refers_to)
+    suite = loader.suiteClass()
 
     # modules building their suite with loadTestsFromModuleNames
-    if keep_only is None:
-        suite.addTest(loader.loadTestsFromModuleNames(testmod_names))
-    else:
-        for mod in [m for m in testmod_names
-                    if id_filter.is_module_name_used(m)]:
-            mod_suite = loader.loadTestsFromModuleNames([mod])
-            mod_suite = filter_suite_by_id_list(mod_suite, id_filter)
-            suite.addTest(mod_suite)
+    suite.addTest(loader.loadTestsFromModuleNames(testmod_names))
 
     # modules adapted for transport implementations
     from bzrlib.tests.test_transport_implementations import TransportTestProviderAdapter
     adapter = TransportTestProviderAdapter()
-    if keep_only is None:
-        adapt_modules(test_transport_implementations, adapter, loader, suite)
-    else:
-        for mod in [m for m in test_transport_implementations
-                    if id_filter.is_module_name_used(m)]:
-            mod_suite = TestUtil.TestSuite()
-            adapt_modules([mod], adapter, loader, mod_suite)
-            mod_suite = filter_suite_by_id_list(mod_suite, id_filter)
-            suite.addTest(mod_suite)
+    adapt_modules(test_transport_implementations, adapter, loader, suite)
 
     # modules defining their own test_suite()
     for package in [p for p in packages_to_test()
                     if (keep_only is None
-                        or id_filter.is_module_name_used(p.__name__))]:
+                        or id_filter.refers_to(p.__name__))]:
         pack_suite = package.test_suite()
-        if keep_only is not None:
-            pack_suite = filter_suite_by_id_list(pack_suite, id_filter)
         suite.addTest(pack_suite)
 
-    for mod in MODULES_TO_DOCTEST:
+    modules_to_doctest = [
+        'bzrlib',
+        'bzrlib.errors',
+        'bzrlib.export',
+        'bzrlib.inventory',
+        'bzrlib.iterablefile',
+        'bzrlib.lockdir',
+        'bzrlib.merge3',
+        'bzrlib.option',
+        'bzrlib.store',
+        'bzrlib.tests',
+        'bzrlib.timestamp',
+        'bzrlib.version_info_formats.format_custom',
+        ]
+
+    for mod in modules_to_doctest:
+        if not (keep_only is None or id_filter.refers_to(mod)):
+            # No tests to keep here, move along
+            continue
         try:
             doc_suite = doctest.DocTestSuite(mod)
         except ValueError, e:
             print '**failed to get doctest for: %s\n%s' % (mod, e)
             raise
-        if keep_only is not None:
-            # DocTests may use ids which doesn't contain the module name
-            doc_suite = filter_suite_by_id_list(doc_suite, id_filter)
         suite.addTest(doc_suite)
 
     default_encoding = sys.getdefaultencoding()
     for name, plugin in bzrlib.plugin.plugins().items():
         if keep_only is not None:
-            if not id_filter.is_module_name_used(plugin.module.__name__):
+            if not id_filter.refers_to(plugin.module.__name__):
                 continue
         plugin_suite = plugin.test_suite()
         # We used to catch ImportError here and turn it into just a warning,
         # but really if you don't have --no-plugins this should be a failure.
         # mbp 20080213 - see http://bugs.launchpad.net/bugs/189771
+        if plugin_suite is None:
+            plugin_suite = plugin.load_plugin_tests(loader)
         if plugin_suite is not None:
-            if keep_only is not None:
-                plugin_suite = filter_suite_by_id_list(plugin_suite,
-                                                       id_filter)
             suite.addTest(plugin_suite)
         if default_encoding != sys.getdefaultencoding():
             bzrlib.trace.warning(
@@ -2881,6 +2865,9 @@
             sys.setdefaultencoding(default_encoding)
 
     if keep_only is not None:
+        # Now that the referred modules have loaded their tests, keep only the
+        # requested ones.
+        suite = filter_suite_by_id_list(suite, id_filter)
         # Do some sanity checks on the id_list filtering
         not_found, duplicates = suite_matches_id_list(suite, keep_only)
         for id in not_found:

=== modified file 'bzrlib/tests/test_plugins.py'
--- a/bzrlib/tests/test_plugins.py	2008-03-17 13:10:32 +0000
+++ b/bzrlib/tests/test_plugins.py	2008-04-02 13:45:13 +0000
@@ -32,7 +32,11 @@
 import bzrlib.commands
 import bzrlib.help
 from bzrlib.symbol_versioning import one_three
-from bzrlib.tests import TestCase, TestCaseInTempDir
+from bzrlib.tests import (
+    TestCase,
+    TestCaseInTempDir,
+    TestUtil,
+    )
 from bzrlib.osutils import pathjoin, abspath, normpath
 
 
@@ -282,6 +286,21 @@
         plugin = bzrlib.plugin.plugins()['plugin']
         self.assertEqual('foo', plugin.test_suite())
 
+    def test_no_load_plugin_tests_gives_None_for_load_plugin_tests(self):
+        self.setup_plugin()
+        loader = TestUtil.TestLoader()
+        plugin = bzrlib.plugin.plugins()['plugin']
+        self.assertEqual(None, plugin.load_plugin_tests(loader))
+
+    def test_load_plugin_tests_gives_load_plugin_tests_result(self):
+        source = """
+def load_tests(standard_tests, module, loader):
+    return 'foo'"""
+        self.setup_plugin(source)
+        loader = TestUtil.TestLoader()
+        plugin = bzrlib.plugin.plugins()['plugin']
+        self.assertEqual('foo', plugin.load_plugin_tests(loader))
+
     def test_no_version_info(self):
         self.setup_plugin()
         plugin = bzrlib.plugin.plugins()['plugin']

=== modified file 'bzrlib/tests/test_selftest.py'
--- a/bzrlib/tests/test_selftest.py	2008-03-26 21:43:57 +0000
+++ b/bzrlib/tests/test_selftest.py	2008-03-26 21:44:40 +0000
@@ -1964,23 +1964,23 @@
              'mod1.submod1',
              'mod1.submod2.cl1.meth1', 'mod1.submod2.cl2.meth2',
              ])
-        self.assertTrue(id_list.is_module_name_used('mod1'))
-        self.assertTrue(id_list.is_module_name_used('mod1.submod1'))
-        self.assertTrue(id_list.is_module_name_used('mod1.submod2'))
-        self.assertTrue(id_list.test_in('mod1.cl1.meth1'))
-        self.assertTrue(id_list.test_in('mod1.submod1'))
-        self.assertTrue(id_list.test_in('mod1.func1'))
+        self.assertTrue(id_list.refers_to('mod1'))
+        self.assertTrue(id_list.refers_to('mod1.submod1'))
+        self.assertTrue(id_list.refers_to('mod1.submod2'))
+        self.assertTrue(id_list.includes('mod1.cl1.meth1'))
+        self.assertTrue(id_list.includes('mod1.submod1'))
+        self.assertTrue(id_list.includes('mod1.func1'))
 
     def test_bad_chars_in_params(self):
         id_list = self._create_id_list(['mod1.cl1.meth1(xx.yy)'])
-        self.assertTrue(id_list.is_module_name_used('mod1'))
-        self.assertTrue(id_list.test_in('mod1.cl1.meth1(xx.yy)'))
+        self.assertTrue(id_list.refers_to('mod1'))
+        self.assertTrue(id_list.includes('mod1.cl1.meth1(xx.yy)'))
 
     def test_module_used(self):
         id_list = self._create_id_list(['mod.class.meth'])
-        self.assertTrue(id_list.is_module_name_used('mod'))
-        self.assertTrue(id_list.is_module_name_used('mod.class'))
-        self.assertTrue(id_list.is_module_name_used('mod.class.meth'))
+        self.assertTrue(id_list.refers_to('mod'))
+        self.assertTrue(id_list.refers_to('mod.class'))
+        self.assertTrue(id_list.refers_to('mod.class.meth'))
 
     def test_test_suite(self):
         # This test is slow, so we do a single test with one test in each
@@ -2059,3 +2059,23 @@
         self.assertEquals('bar baz', tlist[3])
 
 
+class TestFilteredByModuleTestLoader(tests.TestCase):
+
+    def _create_loader(self, test_list):
+        id_filter = tests.TestIdList(test_list)
+        loader = TestUtil.FilteredByModuleTestLoader(id_filter.refers_to)
+        return loader
+
+    def test_load_tests(self):
+        test_list = ['bzrlib.tests.test_sampler.DemoTest.test_nothing']
+        loader = self._create_loader(test_list)
+
+        suite = loader.loadTestsFromModuleName('bzrlib.tests.test_sampler')
+        self.assertEquals(test_list, _test_ids(suite))
+
+    def test_exclude_tests(self):
+        test_list = ['bogus']
+        loader = self._create_loader(test_list)
+
+        suite = loader.loadTestsFromModuleName('bzrlib.tests.test_sampler')
+        self.assertEquals([], _test_ids(suite))



More information about the bazaar-commits mailing list