From 02124da4efc80b1208a89375b64663e4b64a8bba Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Apr 03 2014 16:16:38 +0000 Subject: Add unit tests Add unit tests to characterize and document the current code and clean up some existing code. Preserve existing behaviour, including all bugs. --- diff --git a/ChangeLog b/ChangeLog index caade9d..b8296d1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,13 @@ 2014-04-02 Omair Majid + * Makefile.am (check-local): New target. + * switch_java_functions.py.in: Refactor code, add docstrings. + (get_pretty_name): New function extracted from get_pretty_names. + (get_pretty_names): Call get_pretty_name. + * tests/test_switch_java_functions.py: New file. + +2014-04-02 Omair Majid + * INSTALL, * Makefile.in, * aclocal.m4, diff --git a/Makefile.am b/Makefile.am index 4308569..a14f5e5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -22,3 +22,6 @@ DISTCLEANFILES = \ install-exec-local: $(mkinstalldirs) $(DESTDIR)$(bindir) ln -sf consolehelper $(DESTDIR)$(bindir)/$(PACKAGE) + +check-local: + $(PYTHON) -m unittest discover -s $(srcdir)/tests diff --git a/switch_java_functions.py.in b/switch_java_functions.py.in index f0baab0..4390fdf 100755 --- a/switch_java_functions.py.in +++ b/switch_java_functions.py.in @@ -279,29 +279,41 @@ def initialize_alternatives_dictionaries(java_identifiers_and_jdks): if java in javadocdir_alternatives: JAVADOCDIR[java] = javadocdir_alternatives[java] -def get_default_java_command(): - if os.path.exists(JAVA_PATH) and os.path.islink(JAVA_PATH): - return os.readlink(JAVA_PATH) +def get_default_java_command(path=JAVA_PATH): + '''Return the default java command (default is '/etc/alternatives/java')''' + if os.path.exists(path) and os.path.islink(path): + return os.readlink(path) else: return None def get_pretty_names(alternative_names): + '''Return a dictionary that maps each item in the input list to the pretty string representation. + + See get_pretty_name for more information''' pretty_names = {} for java in alternative_names: - vendor, version, arch = get_java_split(java) - if vendor == 'sun' or vendor == 'blackdown': - pretty_names[java] = vendor.capitalize() + ' ' + version - elif vendor == 'icedtea': - pretty_names[java] = 'IcedTea' + ' ' + version - elif vendor == 'openjdk': - pretty_names[java] = 'OpenJDK' + ' ' + version - else: - pretty_names[java] = vendor.upper() + ' ' + version - if arch != '': - pretty_names[java] = pretty_names[java] + ' ' + '64-bit' + pretty_names[java] = get_pretty_name(java) return pretty_names +def get_pretty_name(java): + '''Return a pretty name of the form "formatted-name version optional-arch"''' + vendor, version, arch = get_java_split(java) + if vendor == 'sun' or vendor == 'blackdown': + pretty_name = vendor.capitalize() + ' ' + version + elif vendor == 'icedtea': + pretty_name = 'IcedTea' + ' ' + version + elif vendor == 'openjdk': + pretty_name = 'OpenJDK' + ' ' + version + else: + pretty_name = vendor.upper() + ' ' + version + if arch != '': + pretty_name = pretty_name + ' ' + '64-bit' + return pretty_name + def get_java_split(java): + '''Return the tuple (version, vendor, arch) for a directory suffix (1.5.0-gcj.x86_64) + + arch is empty if the directory suffix does not contain arch.''' vendor_arch = java.split('-')[1].split('.') vendor = vendor_arch[0] arch = '' diff --git a/tests/test_switch_java_functions.py b/tests/test_switch_java_functions.py new file mode 100644 index 0000000..5456216 --- /dev/null +++ b/tests/test_switch_java_functions.py @@ -0,0 +1,92 @@ + +import unittest + +import switch_java_functions as funcs + +class SimpleUsage(unittest.TestCase): + + @unittest.skip('implement this test') + def test_switch_java(self): + pass + + @unittest.skip('implement this test') + def test_get_java_identifiers(self): + pass + + @unittest.skip('implement this test') + def test_get_plugin_alternatives(self): + pass + + @unittest.skip('implement this test') + def test_get_javadocdir_alternatives(self): + pass + + @unittest.skip('implement this test') + def test_get_alternatives(self): + pass + + @unittest.skip('implement this test') + def test_initialize_alternative_dictionaries(self): + pass + + def test_get_default_java_command(self): + result = funcs.get_default_java_command('/foo/bar/baz/spam/eggs') + self.assertEquals(result, None) + + def test_get_pretty_names(self): + result = funcs.get_pretty_names([]) + self.assertEquals(result, {}) + + def test_get_pretty_names_x86_64(self): + # this test is not exhaustive. specific tests on all names are + # done separately via test_get_pretty_name_* tests + java1 = '1.7.0-openjdk' + java2 = '1.5.0-sun.x86_64' + result = funcs.get_pretty_names([java1, java2]) + self.assertEquals(result, {java1 : 'OpenJDK 1.7.0', java2: 'Sun 1.5.0 64-bit'}) + + def test_get_pretty_name_no_arch(self): + java_name = '1.7.0-openjdk' + result = funcs.get_pretty_name(java_name) + self.assertEquals(result, 'OpenJDK 1.7.0') + + def test_get_pretty_name_i686(self): + java_name = '1.7.0-openjdk.i686' + result = funcs.get_pretty_name(java_name) + # Yes, i686 -> 64-bit. + self.assertEquals(result, 'OpenJDK 1.7.0 64-bit') + + def test_get_pretty_name_x86_64(self): + java_name = '1.7.0-openjdk.x86_64' + result = funcs.get_pretty_name(java_name) + self.assertEquals(result, 'OpenJDK 1.7.0 64-bit') + + def test_get_pretty_name_vendor_is_icedtea(self): + java_name = '1.7.0-icedtea' + result = funcs.get_pretty_name(java_name) + self.assertEquals(result, 'IcedTea 1.7.0') + + def test_get_pretty_name_vendor_is_sun(self): + java_name = '1.7.0-sun' + result = funcs.get_pretty_name(java_name) + self.assertEquals(result, 'Sun 1.7.0') + + def test_get_pretty_name_vendor_is_oracle(self): + java_name = '1.7.0-oracle' + result = funcs.get_pretty_name(java_name) + self.assertEquals(result, 'ORACLE 1.7.0') + + def test_get_pretty_name_vendor_is_ibm(self): + java_name = '1.7.0-ibm' + result = funcs.get_pretty_name(java_name) + self.assertEquals(result, 'IBM 1.7.0') + + def test_get_java_split_with_arch(self): + input = '1.7.0-openjdk.x86_64' + result = funcs.get_java_split(input) + self.assertEqual(result, ('openjdk', '1.7.0', '.x86_64')) + + def test_get_java_split_without_arch(self): + input = '1.6.0-gcj' + result = funcs.get_java_split(input) + self.assertEqual(result, ('gcj', '1.6.0', ''))