old_contents: from pychecker2 import main
  from pychecker2 import Options
  from pychecker2 import VariableChecks
  
  import unittest
  
  class WarningTester(unittest.TestCase):
      def __init__(self, arg):
          unittest.TestCase.__init__(self, arg)
          self.options = Options.Options()
          self.checklist = main.create_checklist(self.options)
          self.argv = []
  
      def check_warning(self, w, expected_line, expected_type, *expected_args):
          warn_line, warn_type, warn_args = w
          try:
              self.assertEqual(warn_type, expected_type)
              self.assertEqual(warn_line, expected_line)
              self.assertEqual(len(warn_args), len(expected_args))
              for i in range(len(expected_args)):
                  self.assertEqual(warn_args[i], expected_args[i])
          except AssertionError:          # help w/debugging
              print warn_line, warn_type, warn_args
              print expected_line, expected_type, expected_args
              raise
  
      def check_file(self, data):
          import tempfile, os
          fname = tempfile.mktemp()
          fp = open(fname, 'wb')
          try:
              fp.write(data)
              fp.close()
              f, = self.options.process_options(self.argv + [fname])
              self.checklist.check_file(f)
          finally:
              fp.close()
              os.unlink(fname)
          return f
  
      def warning(self, test, line, warning, *args):
          f = self.check_file(test)
          assert len(f.warnings) == 1, "More than one warning:" + `f.warnings`
          self.check_warning(f.warnings[0], line, warning, *args)
  
      def silent(self, test):
          f = self.check_file(test)
          if f.warnings:
              print f.warnings
          self.assertEqual(len(f.warnings), 0)
  
      def setUp(self):
          self.argv = []
          
  
new_contents: from pychecker2 import main
  from pychecker2 import Options
  from pychecker2 import VariableChecks
  
  import unittest
  
  class WarningTester(unittest.TestCase):
      def __init__(self, arg):
          unittest.TestCase.__init__(self, arg)
          self.options = Options.Options()
          self.checklist = main.create_checklist(self.options)
          self.argv = []
  
      def check_warning(self, w, expected_line, expected_type, *expected_args):
          warn_line, warn_type, warn_args = w
          try:
              self.assertEqual(warn_type, expected_type)
              self.assertEqual(warn_line, expected_line)
              self.assertEqual(len(warn_args), len(expected_args))
              for i in range(len(expected_args)):
                  self.assertEqual(warn_args[i], expected_args[i])
          except AssertionError:          # help w/debugging
              print warn_line, warn_type, warn_args
              print expected_line, expected_type, expected_args
              raise
  
      def check_file(self, data):
          import tempfile, os
          fname = tempfile.mktemp()
          fp = open(fname, 'wb')
          try:
              fp.write(data)
              fp.close()
              f, = self.options.process_options(self.argv + [fname])
              self.checklist.check_file(f)
          finally:
              fp.close()
              os.unlink(fname)
          return f
  
      def warning_file(self, f, line, warning, *args):
          assert len(f.warnings) == 1, "More than one warning:" + `f.warnings`
          self.check_warning(f.warnings[0], line, warning, *args)
  
      def warning(self, test, line, warning, *args):
          f = self.check_file(test)
          self.warning_file(f, line, warning, *args)
  
      def silent(self, test):
          f = self.check_file(test)
          if f.warnings:
              print f.warnings
          self.assertEqual(len(f.warnings), 0)
  
      def setUp(self):
          self.argv = []
          
  
subject: refactor warning() method into a function that takes data, and a function that takes a file object