test_overwrite.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. """g.remove tests
  2. (C) 2013 by the GRASS Development Team
  3. This program is free software under the GNU General Public
  4. License (>=v2). Read the file COPYING that comes with GRASS
  5. for details.
  6. :author: Vaclav Petras
  7. """
  8. import grass.gunittest
  9. from grass.gunittest.gmodules import SimpleModule
  10. from grass.gunittest.gutils import is_map_in_mapset
  11. from grass.gunittest.checkers import (text_to_keyvalue, keyvalue_equals,
  12. diff_keyvalue)
  13. class RasterRenameTestCase(grass.gunittest.TestCase):
  14. """Test wrong input of parameters for g.list module"""
  15. def setUp(self):
  16. """Create maps in a small region.
  17. The raster exists must be renewed for every test.
  18. """
  19. self.use_temp_region()
  20. self.runModule("g.region", s=0, n=5, w=0, e=5, res=1)
  21. self.runModule("r.mapcalc", expression="rename_1 = 1")
  22. self.runModule("r.mapcalc", expression="rename_2 = 20")
  23. self.runModule("r.mapcalc", expression="rename_3 = 300")
  24. self.runModule("r.mapcalc", expression="exists = 50000")
  25. self.to_remove = ['rename_1', 'rename_2', 'rename_3', 'exists']
  26. def tearDown(self):
  27. """Remove temporary region and renamed maps (and also old if needed)"""
  28. self.runModule('g.remove', name=self.to_remove, type=['raster'], flags='f')
  29. self.del_temp_region()
  30. def test_raster(self):
  31. """Test that raster rename works"""
  32. module = SimpleModule('g.rename', raster=['rename_1', 'renamed_1'])
  33. self.assertModule(module)
  34. new_names = ['renamed_1']
  35. self.to_remove.extend(new_names)
  36. for name in new_names:
  37. self.assertRasterExists(name)
  38. def test_preserve_existing_raster(self):
  39. """Test that existing raster is preserved"""
  40. # TODO: write the same for other types
  41. # TODO: create a general functions to avoid duplication
  42. runivar = SimpleModule('r.univar', flags='g', map='exists')
  43. self.runModule(runivar, expecting_stdout=True)
  44. original_runivar = text_to_keyvalue(runivar.outputs.stdout,
  45. sep='=', skip_empty=True)
  46. module = SimpleModule('g.rename', raster=['rename_3', 'exists'], overwrite=False)
  47. self.assertModule(module)
  48. self.assertRasterExists('exists', msg="Destination (existing) map (to) should exist")
  49. self.assertRasterExists('rename_3', msg="Source map (from) should exist")
  50. runivar = SimpleModule('r.univar', flags='g', map='exists')
  51. self.runModule(runivar, expecting_stdout=True)
  52. new_runivar = text_to_keyvalue(runivar.outputs.stdout,
  53. sep='=', skip_empty=True)
  54. if not keyvalue_equals(dict_a=original_runivar, dict_b=new_runivar,
  55. precision=1e-7):
  56. unused, missing, mismatch = diff_keyvalue(dict_a=original_runivar,
  57. dict_b=new_runivar,
  58. precision=1e-7)
  59. if mismatch:
  60. msg = "Raster map changed. It was probably overwritten.\n"
  61. msg += "Difference between r.univar of maps:\n"
  62. msg += "mismatch values"
  63. msg += " (key, reference, actual): %s\n" % mismatch
  64. self.fail(msg)
  65. def test_overwrite_existing_raster(self):
  66. """Test that existing raster is overriden if desired"""
  67. runivar_source = SimpleModule('r.univar', flags='g', map='rename_3')
  68. self.runModule(runivar_source, expecting_stdout=True)
  69. original_runivar_source = text_to_keyvalue(runivar_source.outputs.stdout,
  70. sep='=', skip_empty=True)
  71. runivar_target = SimpleModule('r.univar', flags='g', map='exists')
  72. self.runModule(runivar_target, expecting_stdout=True)
  73. original_runivar_target = text_to_keyvalue(runivar_target.outputs.stdout,
  74. sep='=', skip_empty=True)
  75. module = SimpleModule('g.rename', raster=['rename_3', 'exists'], overwrite=True)
  76. self.assertModule(module)
  77. self.assertRasterExists('exists', msg="Destination (here: existing) map (to) should exist after rename")
  78. self.assertFalse(is_map_in_mapset('rename_3', type='raster'),
  79. msg="Source map (from) should not exist after rename")
  80. runivar = SimpleModule('r.univar', flags='g', map='exists')
  81. self.runModule(runivar, expecting_stdout=True)
  82. new_runivar = text_to_keyvalue(runivar.outputs.stdout,
  83. sep='=', skip_empty=True)
  84. # both these tests are probably redundant but let's test thoroughly
  85. if keyvalue_equals(dict_a=original_runivar_target, dict_b=new_runivar,
  86. precision=1e-7):
  87. msg = "Raster map did not change. It probably wasn't overwritten."
  88. self.fail(msg)
  89. if not keyvalue_equals(dict_a=original_runivar_source, dict_b=new_runivar,
  90. precision=1e-7):
  91. unused, missing, mismatch = diff_keyvalue(dict_a=original_runivar_source,
  92. dict_b=new_runivar,
  93. precision=1e-7)
  94. if mismatch:
  95. msg = "Destination raster map is not the same as source."
  96. msg += " It probably wasn't overwritten.\n"
  97. msg += "Difference between r.univar of maps:\n"
  98. msg += "mismatch values"
  99. msg += " (key, reference, actual): %s\n" % mismatch
  100. self.fail(msg)
  101. if __name__ == '__main__':
  102. grass.gunittest.test()