import json
import unittest

_testCase = [
	("var",{'var':0},True),

	("var is string",{'var':""},True),
        ("var is string",{'var':5},False),
        ("var is string",{'var':True},False),
        ("var is string",{'var':[]},False),
        ("var is string",{'var':{}},False),
        ("var is not string",{'var':""},False),
        ("var is not string",{'var':5},True),
        ("var is not string",{'var':True},True),
        ("var is not string",{'var':[]},True),
        ("var is not string",{'var':{}},True),

	("var is number",{'var':5},True),
        ("var is number",{'var':""},False),
        ("var is number",{'var':True},False),
        ("var is number",{'var':[]},False),
        ("var is number",{'var':{}},False),
        ("var is number",{'var':5.5},True),
        ("var is number",{'var':0.5},True),
        ("var is not number",{'var':5},False),
        ("var is not number",{'var':5.5},False),
        ("var is not number",{'var':0.5},False),
        ("var is not number",{'var':""},True),
        ("var is not number",{'var':True},True),
        ("var is not number",{'var':[]},True),
        ("var is not number",{'var':{}},True),

        ("var is bool",{'var':True},True),
        ("var is bool",{'var':False},True),
        ("var is bool",{'var':5},False),
        ("var is bool",{'var':0.5},False),
        ("var is bool",{'var':5.5},False),
        ("var is bool",{'var':""},False),
        ("var is bool",{'var':[]},False),
        ("var is bool",{'var':{}},False),
        ("var not is bool",{'var':True},False),
        ("var not is bool",{'var':False},False),
        ("var is not bool",{'var':5},True),
        ("var is not bool",{'var':0.5},True),
        ("var is not bool",{'var':5.5},True),
        ("var is not bool",{'var':""},True),
        ("var is not bool",{'var':[]},True),
        ("var is not bool",{'var':{}},True),

        ("var is list",{'var':[]},True),
        ("var is not list",{'var':[]},False),

        ("var is not dict",{'var':{}},False),
        ("var is dict",{'var':{}},True),

	("var == 'text'",{'var':"text"},True),
        ("var == 'text'",{'var':"not text"},False),
        ("var == 'text'",{'var':5},False),
        ("var == 'text'",{'var':True},False),
        ("var == 'text'",{'var':[]},False),
        ("var == 'text'",{'var':{}},False),
	("var == 5",{'var':5},True),
        ("var == false",{'var':True},True),
        ("var == []",{'var':[]},True),
        ("var == {}",{'var':{}},True),
        ("var == 5",{'var':"5"},False),
        ("var == true",{'var':"true"},False),

	("true",{},True),
	("false",{},False)
]

class TestPredicateParse(unittest.TestCase):
	def test_all(self):
		for expr,ctx,expect in _testCase:
			result = predicateParse(expr,ctx)
			self.assertEqual(expect,result,expr)



if __name__ == '__main__':
	unittest.main()
