def test_partial(self): yield self.resetTables() task = two.task.Task(self.app, None, 1, 2, twcommon.misc.now()) task.set_writable() ctx = EvalPropContext(task, loctx=self.loctx, level=LEVEL_EXECUTE) res = yield ctx.eval('functools.partial(int)()', evaltype=EVALTYPE_CODE) self.assertEqual(res, 0) res = yield ctx.eval('functools.partial(int, "10")()', evaltype=EVALTYPE_CODE) self.assertEqual(res, 10) res = yield ctx.eval('functools.partial(int)("11")', evaltype=EVALTYPE_CODE) self.assertEqual(res, 11) res = yield ctx.eval('functools.partial(int, "10", 4)()', evaltype=EVALTYPE_CODE) self.assertEqual(res, 4) res = yield ctx.eval('functools.partial(int)("11", 4)', evaltype=EVALTYPE_CODE) self.assertEqual(res, 5) res = yield ctx.eval('functools.partial(int, "12")(4)', evaltype=EVALTYPE_CODE) self.assertEqual(res, 6) res = yield ctx.eval('functools.partial(int, "10", base=5)()', evaltype=EVALTYPE_CODE) self.assertEqual(res, 5) res = yield ctx.eval('functools.partial(int)("11", base=5)', evaltype=EVALTYPE_CODE) self.assertEqual(res, 6) res = yield ctx.eval('functools.partial(int, "12")(base=5)', evaltype=EVALTYPE_CODE) self.assertEqual(res, 7) res = yield ctx.eval('propint = code("int(x, base=base)", args="x, base=None")', evaltype=EVALTYPE_CODE) res = yield ctx.eval('functools.partial(propint, "10", base=6)()', evaltype=EVALTYPE_CODE) self.assertEqual(res, 6) res = yield ctx.eval('functools.partial(propint)("11", base=6)', evaltype=EVALTYPE_CODE) self.assertEqual(res, 7) res = yield ctx.eval('functools.partial(propint, "12")(base=6)', evaltype=EVALTYPE_CODE) self.assertEqual(res, 8) res = yield ctx.eval('functools.partial(ObjectId, "528d3862689e9d17a7a96473")()', evaltype=EVALTYPE_CODE) self.assertEqual(res, ObjectId('528d3862689e9d17a7a96473')) res = yield ctx.eval('functools.partial(ObjectId)("528d3862689e9d17a7a96474")', evaltype=EVALTYPE_CODE) self.assertEqual(res, ObjectId('528d3862689e9d17a7a96474')) res = yield ctx.eval('functools.partial(location)()', evaltype=EVALTYPE_CODE) self.assertEqual(res, self.exlocid) res = yield ctx.eval('functools.partial(location)(None)', evaltype=EVALTYPE_CODE) self.assertEqual(res, self.exlocid) with self.assertRaises(TypeError): res = yield ctx.eval('functools.partial(foo)()', locals={'foo':open}, evaltype=EVALTYPE_CODE)
def test_assignments(self): yield self.resetTables() task = two.task.Task(self.app, None, 1, 2, twcommon.misc.now()) task.set_writable() ctx = EvalPropContext(task, loctx=self.loctx, level=LEVEL_EXECUTE) res = yield ctx.eval('z = 7\nz', evaltype=EVALTYPE_CODE) self.assertEqual(res, 7) res = yield ctx.eval('x1,x2 = 1,2\n[x2,x1]', evaltype=EVALTYPE_CODE) self.assertEqual(res, [2,1]) res = yield ctx.eval('ls[1] = 7\nls', evaltype=EVALTYPE_CODE) self.assertEqual(res, [1,7,3]) res = yield ctx.eval('ls[0:2] = [6,5,4]\nls', evaltype=EVALTYPE_CODE) self.assertEqual(res, [6,5,4,3]) res = yield ctx.eval('map["one"] = "ONE"\nmap', evaltype=EVALTYPE_CODE) self.assertEqual(res, {'one':'ONE', 'two':2, 'three':3}) res = yield ctx.eval('z1=z2=_z3=9\nz1,z2,_z3', evaltype=EVALTYPE_CODE) self.assertEqual(res, (9,9,9)) res = yield ctx.eval('ls[:] = (8,7,6,5)\nls', evaltype=EVALTYPE_CODE) self.assertEqual(res, [8,7,6,5]) res = yield ctx.eval('ls[-2:] = (9,10)\nls', evaltype=EVALTYPE_CODE) self.assertEqual(res, [8,7,9,10]) res = yield ctx.eval('z = [None,True,2,3.5,"x",[],{},datetime.now,ObjectId("5251ff29689e9dc10a0a7018")]\nz', evaltype=EVALTYPE_CODE) self.assertEqual(res, [None,True,2,3.5,"x",[],{},task.starttime,ObjectId("5251ff29689e9dc10a0a7018")]) res = yield ctx.eval('z = {"x":2,"y":{},"z":[],"w":datetime.now}\nz', evaltype=EVALTYPE_CODE) self.assertEqual(res, {"x":2,"y":{},"z":[],"w":task.starttime}) res = yield ctx.eval('z = (1,"z",True)\nz', evaltype=EVALTYPE_CODE) self.assertEqual(res, (1,"z",True)) with self.assertRaises(TypeError): yield ctx.eval('notvalid = set()', evaltype=EVALTYPE_CODE) with self.assertRaises(TypeError): yield ctx.eval('notvalid = {"$x":123}', evaltype=EVALTYPE_CODE) with self.assertRaises(TypeError): yield ctx.eval('notvalid = {"x.y":123}', evaltype=EVALTYPE_CODE) with self.assertRaises(TypeError): yield ctx.eval('notvalid = {"x":set()}', evaltype=EVALTYPE_CODE) with self.assertRaises(TypeError): yield ctx.eval('notvalid = [player]', evaltype=EVALTYPE_CODE)
def test_callables(self): yield self.resetTables() task = two.task.Task(self.app, None, 1, 2, twcommon.misc.now()) task.set_writable() ctx = EvalPropContext(task, loctx=self.loctx, level=LEVEL_EXECUTE) @tornado.gen.coroutine def deffunc(key, code, args=None): prop = { 'type':'code', 'text':code } if args is not None: prop['args'] = args res = yield ctx.eval('%s = %s' % (key, repr(prop)), evaltype=EVALTYPE_CODE) yield deffunc('func', 'return 3') res = yield ctx.eval('func()', evaltype=EVALTYPE_CODE) self.assertEqual(res, 3) res = yield ctx.eval('func', evaltype=EVALTYPE_CODE) self.assertEqual(res, 3) res = yield ctx.eval('[func]', evaltype=EVALTYPE_CODE) self.assertEqual(res, [{'type':'code', 'text':'return 3'}]) with self.assertRaises(TypeError): res = yield ctx.eval('func+1', evaltype=EVALTYPE_CODE) yield deffunc('func', '4') res = yield ctx.eval('func()', evaltype=EVALTYPE_CODE) self.assertEqual(res, 4) yield deffunc('func2', 'func') res = yield ctx.eval('func2()', evaltype=EVALTYPE_CODE) self.assertEqual(res, 4) yield deffunc('func', 'return 5\nreturn 6') res = yield ctx.eval('func()', evaltype=EVALTYPE_CODE) self.assertEqual(res, 5) res = yield ctx.eval('func2()', evaltype=EVALTYPE_CODE) self.assertEqual(res, 5) yield deffunc('func', 'if 3>2:\n return 6\nreturn 7') res = yield ctx.eval('func()', evaltype=EVALTYPE_CODE) self.assertEqual(res, 6) yield deffunc('func', 'if 3<2:\n return 6\nreturn 7') res = yield ctx.eval('func2()', evaltype=EVALTYPE_CODE) self.assertEqual(res, 7) yield deffunc('func', 'nosuch') with self.assertRaises(twcommon.excepts.SymbolError): res = yield ctx.eval('func()', evaltype=EVALTYPE_CODE) with self.assertRaises(twcommon.excepts.SymbolError): res = yield ctx.eval('func2()', evaltype=EVALTYPE_CODE) yield deffunc('func', 'q+1', 'q') res = yield ctx.eval('func(4)', evaltype=EVALTYPE_CODE) self.assertEqual(res, 5) res = yield ctx.eval('func(q=5)', evaltype=EVALTYPE_CODE) self.assertEqual(res, 6) with self.assertRaises(TypeError): res = yield ctx.eval('func()', evaltype=EVALTYPE_CODE) with self.assertRaises(TypeError): res = yield ctx.eval('func(qq=1)', evaltype=EVALTYPE_CODE) yield deffunc('func', 'q+2', 'q=1') res = yield ctx.eval('func(4)', evaltype=EVALTYPE_CODE) self.assertEqual(res, 6) res = yield ctx.eval('func()', evaltype=EVALTYPE_CODE) self.assertEqual(res, 3) yield deffunc('func', 'w+q', 'w, q=1') res = yield ctx.eval('func(4)', evaltype=EVALTYPE_CODE) self.assertEqual(res, 5) res = yield ctx.eval('func(4,3)', evaltype=EVALTYPE_CODE) self.assertEqual(res, 7) res = yield ctx.eval('func(q=2,w=3)', evaltype=EVALTYPE_CODE) self.assertEqual(res, 5) with self.assertRaises(TypeError): res = yield ctx.eval('func(q=1)', evaltype=EVALTYPE_CODE) res = yield ctx.eval('func(*[4,5])', evaltype=EVALTYPE_CODE) self.assertEqual(res, 9) res = yield ctx.eval('func(*[6], **{"q":7})', evaltype=EVALTYPE_CODE) self.assertEqual(res, 13) yield deffunc('func', '(ls, map)', '*ls, **map') res = yield ctx.eval('func()', evaltype=EVALTYPE_CODE) self.assertEqual(res, ((), {})) res = yield ctx.eval('func(1,2)', evaltype=EVALTYPE_CODE) self.assertEqual(res, ((1,2), {})) res = yield ctx.eval('func(q=3)', evaltype=EVALTYPE_CODE) self.assertEqual(res, ((), {'q':3})) res = yield ctx.eval('func(2,q=3)', evaltype=EVALTYPE_CODE) self.assertEqual(res, ((2,), {'q':3})) with self.assertRaises(TypeError): res = yield ctx.eval('_x=1\n_x()', evaltype=EVALTYPE_CODE) with self.assertRaises(TypeError): res = yield ctx.eval('_()', evaltype=EVALTYPE_CODE) with self.assertRaises(TypeError): res = yield ctx.eval('player()', evaltype=EVALTYPE_CODE) with self.assertRaises(TypeError): res = yield ctx.eval('foo()', locals={'foo':object()}, evaltype=EVALTYPE_CODE) with self.assertRaises(TypeError): res = yield ctx.eval('foo()', locals={'foo':object}, evaltype=EVALTYPE_CODE) with self.assertRaises(TypeError): res = yield ctx.eval('foo("bar")', locals={'foo':open}, evaltype=EVALTYPE_CODE) with self.assertRaises(TypeError): res = yield ctx.eval('foo()', locals={'foo':input}, evaltype=EVALTYPE_CODE) res = yield ctx.eval('foo()', locals={'foo':str}, evaltype=EVALTYPE_CODE) self.assertEqual(res, '')