blob: 8159602be98ee3c0cc0100d87ab4dbd034c407a1 [file] [log] [blame]
Tim Petersfc35de42001-03-02 01:48:16 +00001"""Verify that warnings are issued for global statements following use."""
Jeremy Hylton8e43cd72001-02-28 01:51:01 +00002
Brett Cannon2298d532010-03-20 21:48:19 +00003from test.support import run_unittest, check_syntax_error, check_warnings
Thomas Wouters89f507f2006-12-13 04:49:30 +00004import unittest
Jeremy Hylton8e43cd72001-02-28 01:51:01 +00005import warnings
Brett Cannon2298d532010-03-20 21:48:19 +00006
Jeremy Hylton8e43cd72001-02-28 01:51:01 +00007
Thomas Wouters89f507f2006-12-13 04:49:30 +00008class GlobalTests(unittest.TestCase):
Jeremy Hylton8e43cd72001-02-28 01:51:01 +00009
Brett Cannon2298d532010-03-20 21:48:19 +000010 def setUp(self):
11 self._warnings_manager = check_warnings()
12 self._warnings_manager.__enter__()
13 warnings.filterwarnings("error", module="<test string>")
14
15 def tearDown(self):
16 self._warnings_manager.__exit__(None, None, None)
17
18
Thomas Wouters89f507f2006-12-13 04:49:30 +000019 def test1(self):
20 prog_text_1 = """\
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000021def wrong1():
22 a = 1
23 b = 2
24 global a
25 global b
26"""
Ammar Askar025eb982018-09-24 17:12:49 -040027 check_syntax_error(self, prog_text_1, lineno=4, offset=5)
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000028
Thomas Wouters89f507f2006-12-13 04:49:30 +000029 def test2(self):
30 prog_text_2 = """\
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000031def wrong2():
Neal Norwitz752abd02008-05-13 04:55:24 +000032 print(x)
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000033 global x
34"""
Ammar Askar025eb982018-09-24 17:12:49 -040035 check_syntax_error(self, prog_text_2, lineno=3, offset=5)
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000036
Thomas Wouters89f507f2006-12-13 04:49:30 +000037 def test3(self):
38 prog_text_3 = """\
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000039def wrong3():
Neal Norwitz752abd02008-05-13 04:55:24 +000040 print(x)
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000041 x = 2
42 global x
43"""
Ammar Askar025eb982018-09-24 17:12:49 -040044 check_syntax_error(self, prog_text_3, lineno=4, offset=5)
Jeremy Hylton2922ea82001-02-28 23:49:19 +000045
Thomas Wouters89f507f2006-12-13 04:49:30 +000046 def test4(self):
47 prog_text_4 = """\
Jeremy Hylton2922ea82001-02-28 23:49:19 +000048global x
49x = 2
50"""
Thomas Wouters89f507f2006-12-13 04:49:30 +000051 # this should work
52 compile(prog_text_4, "<test string>", "exec")
53
54
55def test_main():
Florent Xicluna41fe6152010-04-02 18:52:12 +000056 with warnings.catch_warnings():
57 warnings.filterwarnings("error", module="<test string>")
58 run_unittest(GlobalTests)
Thomas Wouters89f507f2006-12-13 04:49:30 +000059
60if __name__ == "__main__":
61 test_main()