def test_unwrap(self): from wutu.compiler.grammar import Function, Promise, Provider, String, unwraps http = Provider("$http") promise = http.get(String("http://google.com").compile()) result = Function([], *unwraps(promise)).compile() expected = """ function(){ var result = []; if(result != undefined){ $http.get("http://google.com").then(function(response){ angular.forEach(response.data, function(val){ result.push(val); }) }); } else { return $http.get("http://google.com").then(function(response){ return response.data; }); } return result; } """ compare(self.assertEqual, expected, result)
def test_object(self): from wutu.compiler.grammar import Object, String obj = Object() obj.add_member("something", String("test")) result = obj.compile() expected = "{ \"something\": \"test\" }" compare(self.assertEqual, expected, result)
def test_provider(self): from wutu.compiler.grammar import Provider, String http = Provider("$http") result = http.get(String("http://google.com").compile()) expected = "$http.get(\"http://google.com\")" self.assertEqual(expected, result) http.url = "my_url_generator()" self.assertEqual(["$http.url = my_url_generator();"], http.assignments)
def test_function(self): from wutu.compiler.grammar import Function, String, SimpleDeclare, Expression fun = Function(["name"], [SimpleDeclare("hello_str", String("Hello, "))], Expression("hello_str + \" \" + name")) expected = """ function(name){ hello_str = "Hello, "; return hello_str + " " + name; } """ compare(self.assertEqual, expected, fun.compile())
def test_promise(self): from wutu.compiler.grammar import Provider, Function, SimpleDeclare, String, Expression http = Provider("$http") result = http.get(String("http://google.com").compile()).resolve( Function( ["result"], body=[SimpleDeclare("$scope.test", Expression("result.data"))])) expected = """ $http.get("http://google.com").then(function(result){ $scope.test = result.data; }); """ compare(self.assertEqual, expected, result)
def create_service_js(stream, module): """ Creates AngularJS service from module :param stream: :param module: :return: """ from wutu.util import get_implemented_methods from wutu.compiler.grammar import Provider, Function, Object, SimpleDeclare, String, Expression, unwraps stream.write("wutu.factory('{0}Service', ['$http', ".format( module.__class__.__name__)) http = Provider("$http") params = module.get_identifier() obj = Object() extended = "+ \"/\" + {0} + \"/\"".format( " + \"/\" + ".join(params)) if len(params) > 0 else "" full_url = "base_url() + url {0}".format(extended) obj.add_member("list", Function(None, *unwraps(http.get("base_url() + url")))) obj.add_member( "get", Function(params + ("result", ), *unwraps(http.get(full_url), "result"))) obj.add_member( "put", Function(( "data", "result", ), *unwraps(http.put("base_url() + url", "data"), "result"))) obj.add_member( "post", Function(params=params + ("data", ), returns=http.post(full_url, "data"))) obj.add_member("delete", Function(params=params, returns=http.delete(full_url))) impl = Function([http.name], body=[ SimpleDeclare("url", String(module.__name__), private=True), SimpleDeclare("service", obj, private=True) ], returns=Expression("service")) stream.write(impl.compile()) stream.write("]);\n")
def test_simple_declaration(self): from wutu.compiler.grammar import String, SimpleDeclare, Expression self.assertEqual("var foo = \"bar\";", SimpleDeclare("foo", String("bar"), True).compile())
def test_string(self): from wutu.compiler.grammar import String str = String("test") self.assertEqual("\"test\"", str.compile())