def roundtrip(self, stringed, prefix, *path, **kwargs): """ This abstracted test checks that we have proper round trips for various kinds of URL """ self.assertEqual(stringed, repr(urlambda(stringed))) self.assertEqual(stringed, repr(urlambda(prefix, *path, **kwargs))) self.assertEqual(urlambda(stringed).path, urlambda(prefix, *path, **kwargs).path)
def test_processing(self): url = urlambda('http://www.example.com/') self.assertEqual(urlambda(url.prefix, *url.path, **url.state), url) url.path += ['another'] self.assertEqual(urlambda(url.prefix, *url.path, **url.state), url) url = urlambda(u'http://urquell-fn.appspot.com/lib/echo') url.path.append('h') self.assertEqual(repr(url), 'http://urquell-fn.appspot.com/lib/echo/h')
def call_trace(f, *path, **kwargs): """ <p>Execute a function and return all of the debugging information.</p> """ from urquell.invocation import ErrorTrace, execute url = urlambda(f, *path, **kwargs) return execute(repr(url))
def test_query(self): self.assertEqual(urlambda('http://www.example.com/').state, {}) self.assertEqual(urlambda('http://www.example.com/?k=').state, {'k':''}) self.assertEqual(urlambda('http://www.example.com/?k=v').state, {'k':'v'}) self.assertEqual(urlambda('http://www.example.com/?k=v&t=34').state, {'k':'v', 't':34}) self.assertEqual(urlambda('http://www.example.com/?k=&k=v').state, {'k':['', 'v']}) self.assertEqual(urlambda('http://www.example.com/?k=&v=k&k=v&k=v').state, {'k':['', 'v', 'v'], 'v':'k'}) self.assertEqual(urlambda('http://www.example.com/?k=&v=k&k=v&k=p').state, {'k':['', 'v', 'p'], 'v':'k'})
def bind(f, *path, **kwargs): """ <p>Binds an argument list to a function. Optionally, values can also be bound to those arguments using the query string. When the argument list is left unbound, values can later be applied using functions such as lib/call and lib/combinator/K.</p> """ if f and len(path): final = urlambda(f) for p in path: if kwargs.has_key(p): final.path.append(kwargs[p]) else: final.path.append(p) return repr(final) elif f: return f else: return None
def fn(server, *path, **kw): """ <p>Constructs a function from a server name and a path.</p> """ return repr(urlambda("http://%s/" % server, *path, **kw))
def test_prefix(self): self.assertEqual(urlambda('http://www.example.com/').prefix, 'http://www.example.com/') self.assertEqual(urlambda('http://www.example.com/path').prefix, 'http://www.example.com/') self.assertEqual(urlambda('http://www.example.com:456/').prefix, 'http://www.example.com:456/')
def test_query_addin(self): self.assertEqual(urlambda('http://www.example.com/', k=3).state, {'k':3}) self.assertEqual(urlambda('http://www.example.com/?k=', k=None, v='s').state, {'k':None, 'v':'s'}) self.assertEqual(urlambda('http://www.example.com/?k=v', k=4).state, {'k':4}) self.assertEqual(urlambda('http://www.example.com/?k=v&t=34', x=4, t=[]).state, {'k':'v', 't':[], 'x':4})
def test_path_longer(self): self.assertEqual(urlambda('http://www.example.com/', 'earlier', 'end').path, ['earlier', 'end']) self.assertEqual(urlambda('http://www.example.com/path', 'earlier', 'end').path, ['path', 'earlier', 'end']) self.assertEqual(urlambda('http://www.example.com:456//', 'earlier', 'end').path, ['', '', 'earlier', 'end']) self.assertEqual(urlambda('http://www.example.com:456//one', 'earlier', 'end').path, ['', 'one', 'earlier', 'end']) self.assertEqual(urlambda('http://www.example.com:456//one/', 'earlier', 'end').path, ['', 'one', '', 'earlier', 'end'])
def test_path(self): self.assertEqual(urlambda('http://www.example.com/').path, []) self.assertEqual(urlambda('http://www.example.com/path').path, ['path']) self.assertEqual(urlambda('http://www.example.com:456//').path, ['', '']) self.assertEqual(urlambda('http://www.example.com:456//one').path, ['', 'one']) self.assertEqual(urlambda('http://www.example.com:456//one/').path, ['', 'one', ''])