import unittest
import urllib2

from yadis.discover import discover

def parseManifest(lines):
    cases = []
    for line in lines:
        if line.startswith('#') or not line.strip():
            continue

        # remove newline
        assert line[-1] == '\n'
        line = line[:-1]

        # split fields
        parts = line.split('\t')
        assert len(parts) == 3

        cases.append(tuple(parts))

    return cases

class DiscoverTestCase(unittest.TestCase):
    def __init__(self, input_url, normalized_url, xrds_url):
        unittest.TestCase.__init__(self)
        self.input_url = input_url
        self.normalized_url = normalized_url
        self.xrds_url = xrds_url

    def runTest(self):
        normalized_url, content = discover(self.input_url)

        msg = 'Identity URL mismatch: actual = %r, expected = %r' % (
            normalized_url, self.normalized_url)
        self.failUnlessEqual(self.normalized_url, normalized_url, msg)

        resp = urllib2.urlopen(self.xrds_url)
        expected_content = resp.read()
        resp.close()

        msg = 'XRDS content mismatch: actual = %r, expected = %r' % (
            content, expected_content)
        self.failUnlessEqual(expected_content, content, msg)

    def shortDescription(self):
        return "%s (%s)" % (self.input_url, self.__class__.__module__)

def mkSuite(parsed):
    test_cases = [DiscoverTestCase(*t) for t in parsed]
    return unittest.TestSuite(test_cases)

def mkSuiteFromURL(manifest_url):
    req = urllib2.urlopen(manifest_url)
    parsed = parseManifest(req)
    return mkSuite(parsed)

def test(url):
    suite = mkSuiteFromURL(url)
    runner = unittest.TextTestRunner()
    return runner.run(suite)

if __name__ == '__main__':
    import sys
    test(sys.argv[1])


syntax highlighted by Code2HTML, v. 0.9.1