| #!/usr/bin/env python |
| # Copyright 2017 the V8 project authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import os |
| import subprocess |
| import sys |
| import tempfile |
| import unittest |
| |
| TOOLS_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| |
| PREDICTABLE_WRAPPER = os.path.join( |
| TOOLS_DIR, 'predictable_wrapper.py') |
| |
| PREDICTABLE_MOCKED = os.path.join( |
| TOOLS_DIR, 'unittests', 'testdata', 'predictable_mocked.py') |
| |
| def call_wrapper(mode): |
| """Call the predictable wrapper under test with a mocked file to test. |
| |
| Instead of d8, we use python and a python mock script. This mock script is |
| expecting two arguments, mode (one of 'equal', 'differ' or 'missing') and |
| a path to a temporary file for simulating non-determinism. |
| """ |
| fd, state_file = tempfile.mkstemp() |
| os.close(fd) |
| try: |
| args = [ |
| sys.executable, |
| PREDICTABLE_WRAPPER, |
| sys.executable, |
| PREDICTABLE_MOCKED, |
| mode, |
| state_file, |
| ] |
| proc = subprocess.Popen(args, stdout=subprocess.PIPE) |
| proc.communicate() |
| return proc.returncode |
| finally: |
| os.unlink(state_file) |
| |
| |
| class PredictableTest(unittest.TestCase): |
| def testEqualAllocationOutput(self): |
| self.assertEqual(0, call_wrapper('equal')) |
| |
| def testNoAllocationOutput(self): |
| self.assertEqual(2, call_wrapper('missing')) |
| |
| def testDifferentAllocationOutput(self): |
| self.assertEqual(3, call_wrapper('differ')) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |