1*9c5db199SXin Li#!/usr/bin/python3 2*9c5db199SXin Li 3*9c5db199SXin Li# Copyright (c) 2020 The Chromium Authors. All rights reserved. 4*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be 5*9c5db199SXin Li# found in the LICENSE file. 6*9c5db199SXin Li 7*9c5db199SXin Lifrom __future__ import print_function 8*9c5db199SXin Li 9*9c5db199SXin Liimport os 10*9c5db199SXin Liimport sys 11*9c5db199SXin Liimport tempfile 12*9c5db199SXin Liimport unittest 13*9c5db199SXin Li 14*9c5db199SXin Lifrom autotest_lib.client.common_lib import seven 15*9c5db199SXin Li 16*9c5db199SXin Li 17*9c5db199SXin Liclass TestExecCompileFile(unittest.TestCase): 18*9c5db199SXin Li """Unittests for Seven helpers.""" 19*9c5db199SXin Li 20*9c5db199SXin Li def _remove_tempfile(self): 21*9c5db199SXin Li if hasattr(self, "tempfile"): 22*9c5db199SXin Li try: 23*9c5db199SXin Li os.remove(self.tempfile) 24*9c5db199SXin Li except OSError: 25*9c5db199SXin Li pass 26*9c5db199SXin Li return None 27*9c5db199SXin Li 28*9c5db199SXin Li def setUp(self): 29*9c5db199SXin Li try: 30*9c5db199SXin Li with tempfile.NamedTemporaryFile(delete=False) as fh: 31*9c5db199SXin Li self.tempfile = fh.name 32*9c5db199SXin Li except Exception: # pylint: disable=broad-except 33*9c5db199SXin Li self._remove_tempfile() 34*9c5db199SXin Li super(TestExecCompileFile, self).setUp() 35*9c5db199SXin Li 36*9c5db199SXin Li def tearDown(self): 37*9c5db199SXin Li super(TestExecCompileFile, self).tearDown() 38*9c5db199SXin Li self._remove_tempfile() 39*9c5db199SXin Li 40*9c5db199SXin Li def testExecSyntaxError(self): 41*9c5db199SXin Li with open(self.tempfile, "wb") as fh: 42*9c5db199SXin Li fh.write(br"(") 43*9c5db199SXin Li 44*9c5db199SXin Li try: 45*9c5db199SXin Li seven.exec_file( 46*9c5db199SXin Li filename=self.tempfile, 47*9c5db199SXin Li globals_={}, 48*9c5db199SXin Li locals_={}, 49*9c5db199SXin Li ) 50*9c5db199SXin Li exn = None 51*9c5db199SXin Li except Exception as e: # pylint: disable=broad-except 52*9c5db199SXin Li exn = e 53*9c5db199SXin Li 54*9c5db199SXin Li self.assertIsInstance(exn, SyntaxError) 55*9c5db199SXin Li 56*9c5db199SXin Li def testExecPrint(self): 57*9c5db199SXin Li with open(self.tempfile, "wb") as fh: 58*9c5db199SXin Li fh.write(br"print 'hi'") 59*9c5db199SXin Li 60*9c5db199SXin Li try: 61*9c5db199SXin Li seven.exec_file( 62*9c5db199SXin Li filename=self.tempfile, 63*9c5db199SXin Li globals_={}, 64*9c5db199SXin Li locals_={}, 65*9c5db199SXin Li ) 66*9c5db199SXin Li exn = None 67*9c5db199SXin Li except Exception as e: # pylint: disable=broad-except 68*9c5db199SXin Li exn = e 69*9c5db199SXin Li 70*9c5db199SXin Li if sys.version_info[0] <= 2: 71*9c5db199SXin Li self.assertIsNone(exn) 72*9c5db199SXin Li else: 73*9c5db199SXin Li self.assertIsInstance(exn, SyntaxError) 74*9c5db199SXin Li 75*9c5db199SXin Li def testExecPrintWithFutureImport(self): 76*9c5db199SXin Li with open(self.tempfile, "wb") as fh: 77*9c5db199SXin Li fh.write(br"from __future__ import print_function; print 'hi'") 78*9c5db199SXin Li 79*9c5db199SXin Li try: 80*9c5db199SXin Li seven.exec_file( 81*9c5db199SXin Li filename=self.tempfile, 82*9c5db199SXin Li globals_={}, 83*9c5db199SXin Li locals_={}, 84*9c5db199SXin Li ) 85*9c5db199SXin Li exn = None 86*9c5db199SXin Li except Exception as e: # pylint: disable=broad-except 87*9c5db199SXin Li exn = e 88*9c5db199SXin Li 89*9c5db199SXin Li self.assertIsInstance(exn, SyntaxError) 90*9c5db199SXin Li 91*9c5db199SXin Li 92*9c5db199SXin Liif __name__ == "__main__": 93*9c5db199SXin Li unittest.main() 94