# Copyright 2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

from portage.tests import TestCase
from portage.dep import paren_reduce
from portage.dbapi.porttree import _src_uri_validate
from portage.exception import InvalidDependString

class SrcUri(TestCase):

	def testSrcUri(self):

		tests = [
			( "0", "http://foo/bar -> blah.tbz2"                     , False ),
			( "1", "http://foo/bar -> blah.tbz2"                     , False ),
			( "2", "http://foo/bar -> blah.tbz2"                     , True  ),
			( "2", "foo? ( http://foo/bar -> blah.tbz2 )"            , True  ),
			( "2", "http://foo/bar -> foo? ( ftp://foo/a )"          , False ),
			( "2", "http://foo/bar -> bar.tbz2 foo? ( ftp://foo/a )" , True  ),
			( "2", "http://foo/bar blah.tbz2 ->"                     , False ),
			( "2", "-> http://foo/bar blah.tbz2 )"                   , False ),
			( "2", "http://foo/bar ->"                               , False ),
			( "2", "foo? ( http://foo/bar -> ) blah.tbz2"            , False ),
			( "2", "http://foo/bar -> foo/blah.tbz2"                 , False ),
		]

		for eapi, src_uri, valid in tests:
			try:
				_src_uri_validate("cat/pkg-1", eapi, paren_reduce(src_uri))
			except InvalidDependString:
				self.assertEqual(valid, False)
			else:
				self.assertEqual(valid, True)
