""" 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 from grass.script.utils import decode 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 = decode(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()