#!/usr/bin/env python ''' onFileChange.py ~/deflDev/tests/test_microlang.py ~/deflDev/defl/_microlang_.py -- ~/deflDev/bin/pythonDeflDev.py - python ~/deflDev/tests/test_microlang.py ''' import defl import os import shlex import pathlib from defl import log, cl, Path from defl.testing_ import Tester from defl._microlang_ import * tester = Tester(name=__file__) @tester.add() def test(): ml = MicroLang(['!', '(', ')', "&&", 1]) assert ml._eval() == ['not', '(', ')', 'and', 1], ml.statements assert ml.eval() == True def z(): return False @tester.add() def test(): ml = MicroLang(['!', '(', ')', "&&", z]) assert ml._eval() == ['not', '(', ')', 'and', F], ml._eval() assert ml.eval() == False def syntaxError(run): try: r = run().eval() raise ValueError(r) except SyntaxError: ... @tester.add() def test(): syntaxError(lambda: MicroLang(['!!', '(', ')', "&&", z])) @tester.add() def test(): assert MicroLang([]).eval() == N assert MicroLang('').eval() == N @tester.add() def test(): a = {'a': T, 'b': F, 'c': F} assert not MicroLang("a and b", env=a) assert MicroLang("a and !b", env=a) assert MicroLang("a and !b and !c", env=a) # assert MicroLang("x and !x and !", env=a) @tester.add() def test(): filt = ['^a', 'and', 'b$'] def match(x): def wrap(y): return bool(re.compile(x).search(y)) return wrap c = MicroLang([x if MicroLang.isToken(x) else match(x) for x in filt]) assert c.stmnts[0]('a') assert c.stmnts[2]('b') print(c.stmnts) assert c.eval('ab') assert not c.eval('a') @tester.add() def test(): try: assert MicroLang("") raise ValueError() except TypeError as e: ... assert MicroLang("").eval() == N @tester.add() def test(): assert MicroLang(['True']) assert MicroLang([True]) assert MicroLang([1]) assert not MicroLang(['False']) assert not MicroLang([False]) assert not MicroLang([0]) assert MicroLang(['k'], env={'k': T}) assert not MicroLang(['k'], env={'k': F}) assert not MicroLang(['!', '!', '(', ')', "&&", z]) assert not MicroLang('false') assert MicroLang('true') assert MicroLang('true and not false') assert not MicroLang('true and ! not false') assert not MicroLang('true and ! ! false') assert not MicroLang('true and !! false') assert MicroLang('true and !!! false') assert MicroLang('true and !~! false') assert not MicroLang('11-11') assert MicroLang('11+11') assert not MicroLang('-11+11') assert MicroLang('-11+-11') @tester.add() def test(): if not MicroLang(['True']): raise ValueError() if MicroLang(['False']): raise ValueError() assert not MicroLang(['False']) log.info(tester.run()) tester.exitWithStatus()