import unittest

from smallwp import templates

class ArgumentTest(unittest.TestCase):
	def testPlainArgs(self):
		tNode = templates.getTree("{{T|a|b|c}}").children[0]
		args = templates.Arguments.fromNode({}, tNode)
		self.assertEqual(args[0], "T")
		self.assertEqual(args[1], "a")
		self.assertEqual(args[2], "b")
		self.assertEqual(args[3], "c")
		self.assertEqual(args[4], "")
	
	def testNamedArgs(self):
		tNode = templates.getTree("{{#ifexpr: T<=0|a=b|b|c}}").children[0]
		args = templates.Arguments.fromNode({}, tNode)
		self.assertEqual(args[0], "ifexpr: T<=0")
		self.assertEqual(args["a"], "b")
		self.assertEqual(args[1], "b")
		context = templates.WikitextContext({"LAT": "70"})
		tNode = templates.getTree("{{abs|{{{LAT|0}}}}}")
		self.assertEqual(templates.makeWikitext(context, tNode), "70.0")
		context = templates.WikitextContext({"LAT": "-70"})
		tNode = templates.getTree("{{abs|{{{LAT|0}}}}}")
		self.assertEqual(templates.makeWikitext(context, tNode), "70.0")
		context = templates.WikitextContext({})
		tNode = templates.getTree("{{abs|{{{LAT|0}}}}}")
		self.assertEqual(templates.makeWikitext(context, tNode), "0.0")

	def testContext(self):
		tNode = templates.getTree("{{foo|x=1|y=2|c}}")
		context = templates.WikitextContext(
			templates.Arguments.fromNode(templates.WikitextContext(), 
				tNode.children[0]))
		tree = templates.getTree("{{{x}}}{{{1}}}{{{y}}}{{{2}}}{{{3}}}{{{4|d}}}")
		self.assertEqual(templates.makeWikitext(context, tree), '1122cd')


def singleTest():
	suite = unittest.makeSuite(ArgumentTest, "testContext")
	runner = unittest.TextTestRunner()
	runner.run(suite)


if __name__=="__main__":
#	unittest.main()
	singleTest()
