# Path: tests/util.py
# def check_call(cmd, expected_retcode=0, stdin_str="", **kwargs):
# def DataPath(path):
# def GetDataPathContents():
#   def assertMatchesRegex(self, regex, string):
#   def setUp(self):
#   def tearDown(self):
#   def setUp(self):
#   def GetExamplePath(self, name):
#   def GetTestDataPath(self, *path):
#   def GetPath(self, *path):
#   def setUp(self):
#   def tearDown(self):
#   def CheckCallWithPath(self, cmd, expected_retcode=0, stdin_str=""):
#   def ConvertZipToDict(self, zip):
#   def ConvertDictToZip(self, dict):
#   def setUp(self):
#   def tearDown(self):
#   def setUp(self):
#   def MakeLoaderAndLoad(self,
#                         problems=None,
#                         extra_validation=True,
#                         gtfs_factory=None):
#   def AppendToArchiveContents(self, arcname, s):
#   def SetArchiveContents(self, arcname, contents):
#   def GetArchiveContents(self, arcname):
#   def RemoveArchive(self, arcname):
#   def GetArchiveNames(self):
#   def CreateZip(self):
#   def DumpZipFile(self, zf):
#   def setUp(self):
#   def Load(self, feed_name):
#   def ExpectInvalidValue(self, feed_name, column_name):
#   def ExpectMissingFile(self, feed_name, file_name):
#   def setUp(self):
#   def tearDown(self):
#   def ExpectNoProblems(self, object):
#   def ValidateAndExpectMissingValue(self, object, column_name):
#   def ExpectMissingValueInClosure(self, column_name, c):
#   def ValidateAndExpectInvalidValue(self, object, column_name,
#                                     value=INVALID_VALUE):
#   def ExpectInvalidValueInClosure(self, column_name, value=INVALID_VALUE,
#                                   c=None):
#   def ValidateAndExpectInvalidFloatValue(self, object, value):
#   def ValidateAndExpectOtherProblem(self, object):
#   def ExpectOtherProblemInClosure(self, c):
#   def ValidateAndExpectDateOutsideValidRange(self, object, column_name,
#                                              value=INVALID_VALUE):
#   def ExpectException(self, type_name, column_name=None, value=INVALID_VALUE):
#   def SimpleSchedule(self):
#   def __init__(self, test_case, ignore_types=None):
#   def _Report(self, e):
#   def PopException(self, type_name):
#   def FormatException(self, exce, tb):
#   def TearDownAssertNoMoreExceptions(self):
#   def AssertNoMoreExceptions(self):
#   def PopColumnSpecificException(self, type_name, column_name, file_name=None):
#   def PopInvalidValue(self, column_name, file_name=None):
#   def PopMissingValue(self, column_name, file_name=None):
#   def PopDateOutsideValidRange(self, column_name, file_name=None):
#   def PopDuplicateColumn(self, file_name, header, count):
#   def _SortExceptionGroups(self):
#     def ProcessExceptionGroup():
#   def __init__(self, test_case, ignore_types=("ExpirationDate",)):
#   def _Report(self, e):
# def GetTestFailureProblemReporter(test_case,
#                                   ignore_types=("ExpirationDate",)):
#   def __init__(self):
#   def ExpirationDate(self, expiration, context=None):
# class TestCase(unittest.TestCase):
# class RedirectStdOutTestCaseBase(TestCase):
# class GetPathTestCase(TestCase):
# class TempDirTestCaseBase(GetPathTestCase):
# class TempFileTestCaseBase(TestCase):
# class MemoryZipTestCase(TestCase):
# class LoadTestCase(TestCase):
# class ValidationTestCase(TestCase):
# class RecordingProblemAccumulator(transitfeed.ProblemAccumulatorInterface):
# class TestFailureProblemAccumulator(transitfeed.ProblemAccumulatorInterface):
# class ExceptionProblemReporterNoExpiration(transitfeed.ProblemReporter):
#   _IGNORE_TYPES = ["ExpirationDate"]
# INVALID_VALUE = Exception()
# 
# Path: transitfeed/compat.py



import datetime
import feedvalidator
import os.path
import re
import transitfeed
import unittest
import urllib2
import zipfile
from tests import util
from transitfeed.compat import StringIO
from urllib2 import HTTPError, URLError
    self.check_duplicate_trips = True
    self.latest_version = transitfeed.__version__
    self.output = 'fake-filename.zip'
    self.manual_entry = False
    self.service_gap_interval = None
    self.extension = None
    self.error_types_ignore_list = None


class FeedValidatorTestCase(util.TempDirTestCaseBase):
  def testBadEolContext(self):
    """Make sure the filename is included in the report of a bad eol."""

    filename = "routes.txt"
    old_zip = zipfile.ZipFile(
        self.GetPath('tests', 'data', 'good_feed.zip'), 'r')
    content_dict = self.ConvertZipToDict(old_zip)
    old_routes = content_dict[filename]
    new_routes = old_routes.replace('\n', '\r\n', 1)
    self.assertNotEquals(old_routes, new_routes)
    content_dict[filename] = new_routes
    new_zipfile_mem = self.ConvertDictToZip(content_dict)

    options = MockOptions()
    output_file = StringIO()
    feedvalidator.RunValidationOutputToFile(
        new_zipfile_mem, options, output_file)
    self.assertMatchesRegex(filename, output_file.getvalue())



# Path: tests/util.py
# def check_call(cmd, expected_retcode=0, stdin_str="", **kwargs):
# def DataPath(path):
# def GetDataPathContents():
#   def assertMatchesRegex(self, regex, string):
#   def setUp(self):
#   def tearDown(self):
#   def setUp(self):
#   def GetExamplePath(self, name):
#   def GetTestDataPath(self, *path):
#   def GetPath(self, *path):
#   def setUp(self):
#   def tearDown(self):
#   def CheckCallWithPath(self, cmd, expected_retcode=0, stdin_str=""):
#   def ConvertZipToDict(self, zip):
#   def ConvertDictToZip(self, dict):
#   def setUp(self):
#   def tearDown(self):
#   def setUp(self):
#   def MakeLoaderAndLoad(self,
#                         problems=None,
#                         extra_validation=True,
#                         gtfs_factory=None):
#   def AppendToArchiveContents(self, arcname, s):
#   def SetArchiveContents(self, arcname, contents):
#   def GetArchiveContents(self, arcname):
#   def RemoveArchive(self, arcname):
#   def GetArchiveNames(self):
#   def CreateZip(self):
#   def DumpZipFile(self, zf):
#   def setUp(self):
#   def Load(self, feed_name):
#   def ExpectInvalidValue(self, feed_name, column_name):
#   def ExpectMissingFile(self, feed_name, file_name):
#   def setUp(self):
#   def tearDown(self):
#   def ExpectNoProblems(self, object):
#   def ValidateAndExpectMissingValue(self, object, column_name):
#   def ExpectMissingValueInClosure(self, column_name, c):
#   def ValidateAndExpectInvalidValue(self, object, column_name,
#                                     value=INVALID_VALUE):
#   def ExpectInvalidValueInClosure(self, column_name, value=INVALID_VALUE,
#                                   c=None):
#   def ValidateAndExpectInvalidFloatValue(self, object, value):
#   def ValidateAndExpectOtherProblem(self, object):
#   def ExpectOtherProblemInClosure(self, c):
#   def ValidateAndExpectDateOutsideValidRange(self, object, column_name,
#                                              value=INVALID_VALUE):
#   def ExpectException(self, type_name, column_name=None, value=INVALID_VALUE):
#   def SimpleSchedule(self):
#   def __init__(self, test_case, ignore_types=None):
#   def _Report(self, e):
#   def PopException(self, type_name):
#   def FormatException(self, exce, tb):
#   def TearDownAssertNoMoreExceptions(self):
#   def AssertNoMoreExceptions(self):
#   def PopColumnSpecificException(self, type_name, column_name, file_name=None):
#   def PopInvalidValue(self, column_name, file_name=None):
#   def PopMissingValue(self, column_name, file_name=None):
#   def PopDateOutsideValidRange(self, column_name, file_name=None):
#   def PopDuplicateColumn(self, file_name, header, count):
#   def _SortExceptionGroups(self):
#     def ProcessExceptionGroup():
#   def __init__(self, test_case, ignore_types=("ExpirationDate",)):
#   def _Report(self, e):
# def GetTestFailureProblemReporter(test_case,
#                                   ignore_types=("ExpirationDate",)):
#   def __init__(self):
#   def ExpirationDate(self, expiration, context=None):
# class TestCase(unittest.TestCase):
# class RedirectStdOutTestCaseBase(TestCase):
# class GetPathTestCase(TestCase):
# class TempDirTestCaseBase(GetPathTestCase):
# class TempFileTestCaseBase(TestCase):
# class MemoryZipTestCase(TestCase):
# class LoadTestCase(TestCase):
# class ValidationTestCase(TestCase):
# class RecordingProblemAccumulator(transitfeed.ProblemAccumulatorInterface):
# class TestFailureProblemAccumulator(transitfeed.ProblemAccumulatorInterface):
# class ExceptionProblemReporterNoExpiration(transitfeed.ProblemReporter):
#   _IGNORE_TYPES = ["ExpirationDate"]
# INVALID_VALUE = Exception()
# 
# Path: transitfeed/compat.py



# Path: tests/testfeedvalidator.py
import datetime
import feedvalidator
import os.path
import re
import transitfeed
import unittest
import urllib2
import zipfile
from tests import util
from transitfeed.compat import StringIO
from urllib2 import HTTPError, URLError

    self.check_duplicate_trips = True
    self.latest_version = transitfeed.__version__
    self.output = 'fake-filename.zip'
    self.manual_entry = False
    self.service_gap_interval = None
    self.extension = None
    self.error_types_ignore_list = None


class FeedValidatorTestCase(util.TempDirTestCaseBase):
  def testBadEolContext(self):
    """Make sure the filename is included in the report of a bad eol."""

    filename = "routes.txt"
    old_zip = zipfile.ZipFile(
        self.GetPath('tests', 'data', 'good_feed.zip'), 'r')
    content_dict = self.ConvertZipToDict(old_zip)
    old_routes = content_dict[filename]
    new_routes = old_routes.replace('\n', '\r\n', 1)
    self.assertNotEquals(old_routes, new_routes)
    content_dict[filename] = new_routes
    new_zipfile_mem = self.ConvertDictToZip(content_dict)

    options = MockOptions()
    output_file = StringIO()
    feedvalidator.RunValidationOutputToFile(
        new_zipfile_mem, options, output_file)
    self.assertMatchesRegex(filename, output_file.getvalue())



class LimitPerTypeProblemReporterTestCase(util.TestCase):