""" TEST: test_addons_modules.py AUTHOR(S): Vaclav Petras PURPOSE: Test for g.extension individual modules/extensions handling COPYRIGHT: (C) 2015 Vaclav Petras, and by the GRASS Development Team This program is free software under the GNU General Public License (>=v2). Read the file COPYING that comes with GRASS for details. """ from grass.gunittest.case import TestCase from grass.gunittest.main import test from grass.gunittest.gmodules import SimpleModule from grass.gunittest.utils import silent_rmtree import os MODULES_OUTPUT = """\ d.frame d.mon2 g.copyall g.isis3mt g.proj.all r.gdd r.geomorphon r.le.patch r.le.pixel r.traveltime r.univar2 v.civil v.class.ml v.class.mlpy v.colors2 v.delaunay3d v.ellipse v.in.proj v.in.redwg v.neighborhoodmatrix v.transects wx.metadata """.replace('\n', os.linesep) class TestModulesMetadata(TestCase): url = 'file://' + os.path.abspath('data') def test_listing(self): """List individual extensions/modules/addons""" module = SimpleModule('g.extension', flags='l', url=self.url) self.assertModule(module) stdout = module.outputs.stdout self.assertMultiLineEqual(stdout, MODULES_OUTPUT) class TestModulesFromDifferentSources(TestCase): url = 'file://' + os.path.abspath('data/sample_modules') path = os.path.join('data', 'sample_modules') install_prefix = 'gextension_test_install_path' # TODO: this is wrong for MS Win files = [ os.path.join(install_prefix, 'scripts', 'r.plus.example'), os.path.join(install_prefix, 'docs', 'html', 'r.plus.example.html'), ] # to create archives from the source, the following was used: # zip r.plus.example.zip r.plus.example/* # tar czvf r.plus.example.tar.gz r.plus.example # cd r.plus.example/ # tar czvf ../r.plus.example_sep.tar.gz * def setUp(self): """Make sure we are not dealing with some old files""" if os.path.exists(self.install_prefix): files = os.listdir(self.install_prefix) if files: RuntimeError("Install prefix path '{}' contains files {}" .format(self.install_prefix, files)) def tearDown(self): """Remove created files""" silent_rmtree(self.install_prefix) def test_directory_install(self): """Test installing extension from directory""" self.assertModule('g.extension', extension='r.plus.example', url=os.path.join(self.path, 'r.plus.example'), prefix=self.install_prefix) # TODO: this is wrong for MS Win for file in self.files: self.assertFileExists(file) def test_targz_install(self): """Test installing extension from local .tar.gz""" self.assertModule('g.extension', extension='r.plus.example', url=os.path.join(self.path, 'r.plus.example.tar.gz'), prefix=self.install_prefix) for file in self.files: self.assertFileExists(file) def test_remote_targz_without_dir_install(self): """Test installing extension from (remote) .tar.gz without main dir""" self.assertModule('g.extension', extension='r.plus.example', url=self.url + '/' + 'r.plus.example_sep.tar.gz', prefix=self.install_prefix, verbose=True) for file in self.files: self.assertFileExists(file) def test_remote_zip_install(self): """Test installing extension from .zip specified by URL (local)""" self.assertModule('g.extension', extension='r.plus.example', url=self.url + '/' + 'r.plus.example.zip', prefix=self.install_prefix) for file in self.files: self.assertFileExists(os.path.join(file)) if __name__ == '__main__': test()