Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5315)

Unified Diff: chrome/test/mini_installer/test_installer.py

Issue 22480002: Use unittest framework in the Automated Installer Testing Framework. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Change verifiers to classes. Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/mini_installer/test_installer.py
diff --git a/chrome/test/mini_installer/test_installer.py b/chrome/test/mini_installer/test_installer.py
index a59bf9164074f3706728b0b4042490dfee34f2c3..bf35341a596cb354764f5ebbc38cb0d412b3cc75 100644
--- a/chrome/test/mini_installer/test_installer.py
+++ b/chrome/test/mini_installer/test_installer.py
@@ -13,9 +13,9 @@ import argparse
import json
import os
import subprocess
+import unittest
-import settings
-import verifier
+from verifier import Verifier
class Config:
@@ -34,6 +34,88 @@ class Config:
self.tests = []
+class InstallerTest(unittest.TestCase):
+ """Tests a test case in the config file."""
Mathieu 2013/08/09 17:25:15 The guide says you should describe class attribute
sukolsak 2013/08/09 21:12:38 Done.
+
+ def __init__(self, test, config):
+ """Constructor.
+
+ Args:
+ test: An array of alternating state names and action names, starting and
+ ending with state names.
+ config: The Config object.
+ """
+ super(InstallerTest, self).__init__()
Mathieu 2013/08/09 17:25:15 initialize self._current_state to None. It's best
sukolsak 2013/08/09 21:12:38 Done.
+ self.test = test
Mathieu 2013/08/09 17:25:15 therefore self._test self._config self._verifier
sukolsak 2013/08/09 21:12:38 Done.
+ self.config = config
+ self.verifier = Verifier(self)
Mathieu 2013/08/09 16:08:43 you are passing the whole object in the Verifier c
gab 2013/08/09 16:16:11 We would love to avoid this! Is there any way to i
Mathieu 2013/08/09 17:25:15 How about throwing an exception with a useful mess
sukolsak 2013/08/09 21:19:40 I have removed |testcase| from verifier (and thus
+
+ def runTest(self):
+ """Run the test case."""
+ test = self.test
Mathieu 2013/08/09 17:25:15 use self._test throughout
sukolsak 2013/08/09 21:12:38 Done.
+
+ # |test| is an array of alternating state names and action names, starting
+ # and ending with state names. Therefore, its length must be odd.
+ self.assertEqual(len(test) % 2, 1, 'The length of test array must be odd')
Mathieu 2013/08/09 17:25:15 -expectation should be 1st param self.assertEqual
sukolsak 2013/08/09 21:12:38 Done.
+
+ self._RunResetCommand()
+
+ self.current_state = test[0]
+ self._VerifyCurrentState()
+
+ for i in range(1, len(test), 2):
Mathieu 2013/08/09 17:25:15 Add a comment saying exactly what you're looping o
sukolsak 2013/08/09 21:12:38 Done.
+ action = test[i]
+ self._RunCommand(self.config.actions[action])
+
+ self.current_state = test[i + 1]
+ self._VerifyCurrentState()
+
+ def __str__(self):
Mathieu 2013/08/09 17:25:15 nit: bring it up to be next to __init__?
sukolsak 2013/08/09 21:12:38 Done.
+ """Returns a string representing the test case.
+
+ This method returns a string created by joining state names and action names
Mathieu 2013/08/09 17:25:15 "This method returns" -> Returns: A string cre
sukolsak 2013/08/09 21:12:38 Done.
+ together with ' -> ', for example,
+ 'Test: clean -> install chrome -> chrome_installed'.
+ """
+ return 'Test: %s' % (' -> '.join(self.test))
+
+ def shortDescription(self):
+ """Returns None as the short description to suppress its printing.
+
Mathieu 2013/08/09 17:25:15 Add a line saying: Overriden from unittest.TestCa
sukolsak 2013/08/09 21:12:38 Done.
+ The default implementation of this method returns the docstring of the
+ runTest method, which is not useful since it's the same for every test case.
+ The description from the __str__ method is informative enough.
+ """
+ return None
+
+ def failureException(self, msg):
+ """Returns an AssertionError with the current state information.
+
+ The default implementation of this method returns AssertionError(msg).
+ We add the current state information to the message so that we know where
+ the test fails.
+
+ Args:
+ msg: The error message.
+
+ Returns:
+ An AssertionError.
+ """
+ return AssertionError("In state '%s', %s" % (self.current_state, msg))
+
+ def _VerifyCurrentState(self):
+ """Verifies that the current machine state matches the expected machine
Mathieu 2013/08/09 17:25:15 Make it fit on one line
sukolsak 2013/08/09 21:12:38 Done.
+ state."""
+ self.verifier.Verify(self.config.states[self.current_state])
+
+ def _RunCommand(self, command):
+ subprocess.call(command, shell=True)
+
+ def _RunResetCommand(self):
+ # TODO(sukolsak): Need to figure how exactly we want to reset.
Mathieu 2013/08/09 17:25:15 nit: put this TODO in place of _RunResetCommand, a
sukolsak 2013/08/09 21:12:38 Done.
+ pass
+
+
def MergePropertyDictionaries(current_property, new_property):
"""Merges the new property dictionary into the current property dictionary.
@@ -100,54 +182,16 @@ def ParseConfigFile(filename):
return config
-def VerifyState(config, state):
- """Verifies that the current machine states match the given machine states.
-
- Args:
- config: A Config object.
- state: The current state.
- """
- # TODO(sukolsak): Think of ways of preserving the log when the test fails but
- # not printing these when the test passes.
- print settings.PRINT_STATE_PREFIX + state
- verifier.Verify(config.states[state])
-
-
-def RunCommand(command):
- print settings.PRINT_COMMAND_PREFIX + command
- subprocess.call(command, shell=True)
-
-
-def RunResetCommand():
- print settings.PRINT_COMMAND_PREFIX + 'Reset'
- # TODO(sukolsak): Need to figure how exactly we want to reset.
-
-
def Test(config):
Mathieu 2013/08/09 17:25:15 rename to RunTests? Having test everywhere makes m
sukolsak 2013/08/09 21:12:38 Done.
"""Tests the installer using the given Config object.
Args:
config: A Config object.
"""
+ suite = unittest.TestSuite()
for test in config.tests:
- print settings.PRINT_TEST_PREFIX + ' -> '.join(test)
-
- # A Test object is an array of alternating state names and action names.
- # The array starts and ends with states. Therefore, the length must be odd.
- assert(len(test) % 2 == 1)
-
- RunResetCommand()
-
- current_state = test[0]
- VerifyState(config, current_state)
- # TODO(sukolsak): Quit the test early if VerifyState fails at any point.
-
- for i in range(1, len(test), 2):
- action = test[i]
- RunCommand(config.actions[action])
-
- current_state = test[i + 1]
- VerifyState(config, current_state)
+ suite.addTest(InstallerTest(test, config))
+ unittest.TextTestRunner(verbosity=2).run(suite)
def main():

Powered by Google App Engine
This is Rietveld 408576698