def test_call(self): self.assert_output('foo(1, 2)', 'foo(1,2);') self.assert_output('foo.bar(1, 2)', 'foo.bar(1,2);') self.assert_output('foo(1, *bar)', 'foo(1,...bar);') with self.assertRaises(TranslationError): translate('foo(1, bar=2)')
def test_delete(self): self.assert_output("del foo['bar']", 'delete foo["bar"]') self.assert_output('del foo.bar', 'delete foo.bar') with self.assertRaises(TranslationError): translate('del foo') with self.assertRaises(TranslationError): translate('del foo.bar, bar["baz"]')
def test_subscript(self): self.assert_output('a[1]', 'a[1];') self.assert_output("a['b']", 'a["b"];') self.assert_output('a[:2]', 'a.slice(0,2);') self.assert_output('a[2:]', 'a.slice(2);') self.assert_output('a[:]', 'a.slice();') with self.assertRaises(TranslationError): translate('a[::2]') with self.assertRaises(TranslationError): translate('a[1:2, 3]')
def test_binary_op(self): self.assert_output('a + b', 'a+b;') self.assert_output('a - b', 'a-b;') self.assert_output('a * b', 'a*b;') self.assert_output('a / b', 'a/b;') self.assert_output('a // b', 'Math.floor(a/b);') self.assert_output('a % b', 'a%b;') self.assert_output('a ** b', 'Math.pow(a,b);') self.assert_output('a << b', 'a<<b;') self.assert_output('a >> b', 'a>>b;') self.assert_output('a | b', 'a|b;') self.assert_output('a & b', 'a&b;') self.assert_output('a ^ b', 'a^b;') with self.assertRaises(TranslationError): translate('a @ b')
def test_function_def(self): self.assert_output( 'def foo(a):\n return a + 1', 'function foo(a) {return a+1;}' ) self.assert_output( 'def foo(a, *b):\n pass', 'function foo(a,...b) {}', ) with self.assertRaises(TranslationError): translate('def foo(a, **b):\n pass') with self.assertRaises(TranslationError): translate('@bar\ndef foo(a):\n pass')
def test_compare(self): self.assert_output('a < b > c', 'a<b>c;') with self.assertRaises(TranslationError): translate('a not in b')
def assert_output(self, source, expected): actual = translate(source) self.assertEqual(actual, expected)
def test_dict(self): self.assert_output("{'a': 1, 'b': 2}", '{a:1,b:2};') with self.assertRaises(TranslationError): translate("{a: 1}")
def test_ellipsis(self): with self.assertRaises(TranslationError): translate('[1, ..., 2]')
def test_raise(self): self.assert_output('raise "foo"', 'throw "foo"') with self.assertRaises(TranslationError): translate('raise "foo" from "bar"')