"""Verify that warnings are issued for global statements following use."""

from test.test_support import run_unittest, check_syntax_error
import unittest
import warnings


class GlobalTests(unittest.TestCase):

    def test1(self):
        prog_text_1 = """\
def wrong1():
    a = 1
    b = 2
    global a
    global b
"""
        check_syntax_error(self, prog_text_1)

    def test2(self):
        prog_text_2 = """\
def wrong2():
    print x
    global x
"""
        check_syntax_error(self, prog_text_2)

    def test3(self):
        prog_text_3 = """\
def wrong3():
    print x
    x = 2
    global x
"""
        check_syntax_error(self, prog_text_3)

    def test4(self):
        prog_text_4 = """\
global x
x = 2
"""
        # this should work
        compile(prog_text_4, "<test string>", "exec")


def test_main():
    with warnings.catch_warnings():
        warnings.filterwarnings("error", module="<test string>")
        run_unittest(GlobalTests)

if __name__ == "__main__":
    test_main()
