~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/testing.txt

  • Committer: Andrew Bennetts
  • Date: 2011-02-07 04:14:29 UTC
  • mfrom: (5535.4.26 fetch-all-tags-309682)
  • mto: This revision was merged to the branch mainline in revision 5648.
  • Revision ID: andrew.bennetts@canonical.com-20110207041429-3kc1blj34rvvxod9
Merge fetch-all-tags-309682.

Show diffs side-by-side

added added

removed removed

Lines of Context:
329
329
We make selective use of doctests__.  In general they should provide
330
330
*examples* within the API documentation which can incidentally be tested.  We
331
331
don't try to test every important case using doctests |--| regular Python
332
 
tests are generally a better solution.  That is, we just use doctests to
333
 
make our documentation testable, rather than as a way to make tests.
 
332
tests are generally a better solution.  That is, we just use doctests to make
 
333
our documentation testable, rather than as a way to make tests. Be aware that
 
334
doctests are not as well isolated as the unit tests, if you need more
 
335
isolation, you're likely want to write unit tests anyway if only to get a
 
336
better control of the test environment.
334
337
 
335
338
Most of these are in ``bzrlib/doc/api``.  More additions are welcome.
336
339
 
968
971
 
969
972
Please see bzrlib.treebuilder for more details.
970
973
 
 
974
PreviewTree
 
975
~~~~~~~~~~~
 
976
 
 
977
PreviewTrees are based on TreeTransforms.  This means they can represent
 
978
virtually any state that a WorkingTree can have, including unversioned files.
 
979
They can be used to test the output of anything that produces TreeTransforms,
 
980
such as merge algorithms and revert.  They can also be used to test anything
 
981
that takes arbitrary Trees as its input.
 
982
 
 
983
::
 
984
 
 
985
  # Get an empty tree to base the transform on.
 
986
  b = self.make_branch('.')
 
987
  empty_tree = b.repository.revision_tree(_mod_revision.NULL_REVISION)
 
988
  tt = TransformPreview(empty_tree)
 
989
  self.addCleanup(tt.finalize)
 
990
  # Empty trees don't have a root, so add it first.
 
991
  root = tt.new_directory('', ROOT_PARENT, 'tree-root')
 
992
  # Set the contents of a file.
 
993
  tt.new_file('new-file', root, 'contents', 'file-id')
 
994
  preview = tt.get_preview_tree()
 
995
  # Test the contents.
 
996
  self.assertEqual('contents', preview.get_file_text('file-id'))
 
997
 
 
998
PreviewTrees can stack, with each tree falling back to the previous::
 
999
 
 
1000
  tt2 = TransformPreview(preview)
 
1001
  self.addCleanup(tt2.finalize)
 
1002
  tt2.new_file('new-file2', tt2.root, 'contents2', 'file-id2')
 
1003
  preview2 = tt2.get_preview_tree()
 
1004
  self.assertEqual('contents', preview2.get_file_text('file-id'))
 
1005
  self.assertEqual('contents2', preview2.get_file_text('file-id2'))
 
1006
 
971
1007
 
972
1008
Temporarily changing state
973
1009
~~~~~~~~~~~~~~~~~~~~~~~~~~
977
1013
 
978
1014
    self.overrideAttr(osutils, '_cached_user_encoding', 'latin-1')
979
1015
 
 
1016
Temporarily changing environment variables
 
1017
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
1018
 
 
1019
If yout test needs to temporarily change some environment variable value
 
1020
(which generally means you want it restored at the end), you can use::
 
1021
 
 
1022
    self.overrideEnv('BZR_ENV_VAR', 'new_value')
 
1023
 
 
1024
If you want to remove a variable from the environment, you should use the
 
1025
special ``None`` value::
 
1026
 
 
1027
    self.overrideEnv('PATH', None)
 
1028
 
 
1029
If you add a new feature which depends on a new environment variable, make
 
1030
sure it behaves properly when this variable is not defined (if applicable) and
 
1031
if you need to enforce a specific default value, check the
 
1032
``TestCase._cleanEnvironment`` in ``bzrlib.tests.__init__.py`` which defines a
 
1033
proper set of values for all tests.
 
1034
 
980
1035
Cleaning up
981
1036
~~~~~~~~~~~
982
1037