xref: /aosp_15_r20/external/autotest/client/common_lib/seven_unittest.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
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