blob: a98e339aa2a610561c3397f52729b250a0266da7 [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 +00005
6import warnings
Brett Cannon2298d532010-03-20 21:48:19 +00007
Jeremy Hylton8e43cd72001-02-28 01:51:01 +00008
Thomas Wouters89f507f2006-12-13 04:49:30 +00009class GlobalTests(unittest.TestCase):
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000010
Brett Cannon2298d532010-03-20 21:48:19 +000011 def setUp(self):
12 self._warnings_manager = check_warnings()
13 self._warnings_manager.__enter__()
14 warnings.filterwarnings("error", module="<test string>")
15
16 def tearDown(self):
17 self._warnings_manager.__exit__(None, None, None)
18
19
Thomas Wouters89f507f2006-12-13 04:49:30 +000020 def test1(self):
21 prog_text_1 = """\
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000022def wrong1():
23 a = 1
24 b = 2
25 global a
26 global b
27"""
Thomas Wouters89f507f2006-12-13 04:49:30 +000028 check_syntax_error(self, prog_text_1)
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000029
Thomas Wouters89f507f2006-12-13 04:49:30 +000030 def test2(self):
31 prog_text_2 = """\
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000032def wrong2():
Neal Norwitz752abd02008-05-13 04:55:24 +000033 print(x)
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000034 global x
35"""
Thomas Wouters89f507f2006-12-13 04:49:30 +000036 check_syntax_error(self, prog_text_2)
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000037
Thomas Wouters89f507f2006-12-13 04:49:30 +000038 def test3(self):
39 prog_text_3 = """\
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000040def wrong3():
Neal Norwitz752abd02008-05-13 04:55:24 +000041 print(x)
Jeremy Hylton8e43cd72001-02-28 01:51:01 +000042 x = 2
43 global x
44"""
Thomas Wouters89f507f2006-12-13 04:49:30 +000045 check_syntax_error(self, prog_text_3)
Jeremy Hylton2922ea82001-02-28 23:49:19 +000046
Thomas Wouters89f507f2006-12-13 04:49:30 +000047 def test4(self):
48 prog_text_4 = """\
Jeremy Hylton2922ea82001-02-28 23:49:19 +000049global x
50x = 2
51"""
Thomas Wouters89f507f2006-12-13 04:49:30 +000052 # this should work
53 compile(prog_text_4, "<test string>", "exec")
54
55
56def test_main():
57 run_unittest(GlobalTests)
58
59if __name__ == "__main__":
60 test_main()