Example #1
0
 def test_frame_stack(self):
     """Test push/pop frame operations"""
     c = Context()
     c['foo'] = {}
     c.push_frame('foo')
     self.assertEqual(c.get_frame(), '.foo')
     c['bar'] = 1
     self.assertEqual(c.root['foo']['bar'], 1)
     c.pop_frame()
     self.assertEqual(c.get_frame(), '.')
     c['baz'] = 2
     self.assertEqual(c.root['baz'], 2)
Example #2
0
 def test_root_indices(self):
     """Test root indices"""
     c = Context()
     c['foo'] = {}
     c['baz'] = 2
     c.push_frame('foo')  # In .foo
     c['bar'] = 1
     self.assertEqual(c['.baz'], 2)
     self.assertEqual(c['bar'], 1)
     c.push_frame('.')  # In .
     self.assertEqual(c['baz'], 2)
     self.assertEqual(c['foo.bar'], 1)
     c.pop_frame()  # In .foo
     self.assertEqual(c['.baz'], 2)
     self.assertEqual(c['bar'], 1)
     self.assertEqual(c['.foo.bar'], 1)
Example #3
0
 def test_scope(self):
     """Test scope facility"""
     c = Context()
     c["foo"] = dict(a=1, b=2)
     c["bar"] = {}
     c.push_frame(".foo")
     self.assertEqual(c["a"], 1)
     self.assertEqual(c["b"], 2)
     self.assert_("c" not in c)
     c.push_scope(".bar")
     c[".bar.c"] = 3
     self.assert_("c" in c)
     self.assertEqual(c["c"], 3)
     c.pop_scope()
     self.assert_("c" not in c)
     self.assertEqual(c["a"], 1)
     self.assertEqual(c["b"], 2)
Example #4
0
 def test_scope(self):
     """Test scope facility"""
     c = Context()
     c['foo'] = dict(a=1, b=2)
     c['bar'] = {}
     c.push_frame('.foo')
     self.assertEqual(c['a'], 1)
     self.assertEqual(c['b'], 2)
     self.assert_('c' not in c)
     c.push_scope('.bar')
     c['.bar.c'] = 3
     self.assert_('c' in c)
     self.assertEqual(c['c'], 3)
     c.pop_scope()
     self.assert_('c' not in c)
     self.assertEqual(c['a'], 1)
     self.assertEqual(c['b'], 2)
Example #5
0
 def test_scope(self):
     """Test scope facility"""
     c = Context()
     c['foo'] = dict(a=1, b=2)
     c['bar'] = {}
     c.push_frame('.foo')
     self.assertEqual(c['a'], 1)
     self.assertEqual(c['b'], 2)
     self.assert_('c' not in c)
     c.push_scope('.bar')
     c['.bar.c'] = 3
     self.assert_('c' in c)
     self.assertEqual(c['c'], 3)
     c.pop_scope()
     self.assert_('c' not in c)
     self.assertEqual(c['a'], 1)
     self.assertEqual(c['b'], 2)
Example #6
0
 def test_get_root(self):
     """Test looking up root object"""
     c = Context({'foo': [1, 2, 3]})
     self.assertEqual(c[''], {'foo': [1, 2, 3]})
     c.push_frame('foo')
     self.assertEqual(c[''], [1, 2, 3])
     c.push_frame('.foo')
     self.assertEqual(c[''], [1, 2, 3])
     c.push_frame('.')
     self.assertEqual(c[''], {'foo': [1, 2, 3]})
Example #7
0
 def test_get_root(self):
     """Test looking up root object"""
     c = Context({"foo": [1, 2, 3]})
     self.assertEqual(c[""], {"foo": [1, 2, 3]})
     c.push_frame("foo")
     self.assertEqual(c[""], [1, 2, 3])
     c.push_frame(".foo")
     self.assertEqual(c[""], [1, 2, 3])
     c.push_frame(".")
     self.assertEqual(c[""], {"foo": [1, 2, 3]})
Example #8
0
 def test_get_root(self):
     """Test looking up root object"""
     c = Context({'foo': [1, 2, 3]})
     self.assertEqual(c[''], {'foo': [1, 2, 3]})
     c.push_frame('foo')
     self.assertEqual(c[''], [1, 2, 3])
     c.push_frame('.foo')
     self.assertEqual(c[''], [1, 2, 3])
     c.push_frame('.')
     self.assertEqual(c[''], {'foo': [1, 2, 3]})
Example #9
0
    def testModifiers(self):
        m = self.modifiers

        c = Context({
            'call': {
                'world': "World!"
            },
            'permissions': ['read'],
            'request': {
                'path_qs': '/foo/bar/baz?page=1',
                'path': '/foo/bar/baz',
                'query_string': 'page=1'
            }
        })
        c.push_frame('call')

        assert m.abs(c, -5) == 5
        assert m.abs(c, 5) == 5
        assert m.abs(c, 0) == 0

        assert m.all(c, [1, 1, 1])
        assert not m.all(c, [1, 0, 1])
        assert m.all(c, [])

        # missing app:

        assert m.basename(c, 'foo') == 'foo'
        assert m.basename(c, 'foo/bar') == 'bar'

        assert m.bool(c, 1) is True
        assert m.bool(c, 0) is False

        assert m.capitalize(c, 'hello') == 'Hello'

        assert m.ceil(c, 3.14) == 4.0

        assert m.choices(c, _Choices()) == [1, 2, 3]

        assert m.intchoices(c, _Choices()) == [2, 3, 4]

        assert list(m.chain(c, [[1, 2], [3, 4]])) == [1, 2, 3, 4]

        assert m.chr(c, 32) == ' '

        assert m.collect(c, (['Hello', 'World'], 1)) == ['e', 'o']

        objs = [Mock(id=1, a='hello'), Mock(id=2, a='world')]
        assert m.collectmap(c, [objs, 'a']) == {'hello': objs[0], 'world': objs[1]}

        assert m.collectids(c, objs) == [1, 2]

        assert m.commalist(c, ['hello', 'world']) == 'hello,world'
        assert m.commaspacelist(c, ['hello', 'world']) == 'hello, world'
        assert m.commasplit(c, 'foo,bar') == ['foo', 'bar']

        assert m.copy(c, {'foo': 'bar'}) == {'foo': 'bar'}

        # missing csrf

        assert m.d(c, '3') == 3

        # missing data

        assert m.date(c, '2015-12-20') == datetime.date(2015, 12, 20)
        assert m.datetime(c, '2015-12-20T16:43:15.479619') == datetime.datetime(2015, 12, 20, 16, 43, 15, 479619, tzinfo=UTC)

        assert m.debug(c, 5) == '5'
        assert m.debug(c, '5') == "'5'"

        assert m.dict('c', [('foo', 'bar')]) == {'foo': 'bar'}

        assert m.dirname(c, 'foo/bar') == 'foo'

        assert m.domain(c, 'http://www.willmcgugan.com/foo/') == 'www.willmcgugan.com'

        assert m.dropchar(c, 'foo') == 'oo'

        # missing enum

        assert list(m.enumerate(c, 'foo')) == [(0, 'f'), (1, 'o'), (2, 'o')]
        assert list(m.enumerate1(c, 'foo')) == [(1, 'f'), (2, 'o'), (3, 'o')]

        assert m.epoch(c, 0) == datetime.datetime(1970, 1, 1, tzinfo=UTC)

        assert m.eval(c, '1+2') == 3

        assert m.exists(c, 'foo')
        assert not m.exists(c, Missing())

        assert m.ext('foo.bar', '.bar')

        assert m.filesize(c, 1024) == '1.0kB'
        assert m.first(c, 'foo') == 'f'
        assert m.flat(c, [1, [2, 3]]) == [1, 2, 3]
        assert m.float(c, '3.14') == 3.14
        assert m.floor(c, 3.14) == 3
        assert m.parsejson(c, '''{"foo": "bar"}''') == {'foo': 'bar'}

        # missing get

        objs = [Mock(a='foo'), Mock(a='foo')]
        assert m.group(c, [objs, 'a'])['foo'] == [objs[0], objs[1]]

        # missing hasdata
        assert m.html(c, '<h1>header</h1>') == '<h1>header</h1>'
        assert hasattr(m.html(c, '<h1>header</h1>'), 'html_safe')

        objs = [Mock(id=1, a='hello'), Mock(id=2, a='world')]

        assert m.ids(c, objs) == [1, 2]

        assert m.int(c, '3') == 3
        assert m.int(c, 3.14) == 3

        assert m.isbool(c, True)
        assert m.isbool(c, False)
        assert not m.isbool(c, 0)

        assert not m.isemail(c, 'notanemal')
        assert m.isemail(c, '*****@*****.**')

        assert m.isfloat(c, 3.14)
        assert not m.isfloat(c, '3.14')

        assert m.isint(c, 3)
        assert not m.isint(c, '3')

        assert m.isnone(c, None)
        assert not m.isnone(c, 'None')
        assert not m.isnone(c, 0)

        assert m.isnumber(c, 5)
        assert m.isnumber(c, 3.14)
        assert m.isnumber(c, -10)
        assert not m.isnumber(c, None)

        assert m.isstr(c, 'str')
        assert m.isstr(c, '')
        assert not m.isstr(c, 3)

        assert m.items(c, {'foo': 'bar'}) == [('foo', 'bar')]

        assert m.join(c, ['foo', 'bar']) == 'foobar'

        assert m.joinspace(c, ['foo', 'bar']) == 'foo bar'

        assert m.joinwith(c, (['foo', 'bar'], '-')) == 'foo-bar'

        assert m.keys(c, {'foo': 'bar'}) == ['foo']

        assert m.last(c, [1, 2, 3]) == 3

        assert m.len(c, [1, 2, 3, 4]) == 4

        assert m.linebreaks(c, 'a\nb') == 'a<br>\nb'

        assert m.list(c, 'abc') == ['a', 'b', 'c']

        # missing localize

        assert m.log10(c, 100.0) == 2.0

        assert m.lower(c, 'Hello') == 'hello'

        assert m.lstrip(c, '  \nHello\n') == 'Hello\n'

        assert m.map(c, [['foo', 'bar']]) == {'foo': 'bar'}

        assert m.max(c, [1, 2, 3, 0]) == 3

        assert m.md5(c, 'hello') == '5d41402abc4b2a76b9719d911017c592'
        assert m.md5(c, io.BytesIO(b'hello')) == '5d41402abc4b2a76b9719d911017c592'

        assert m.min(c, [1, 2, 3, 0]) == 0

        assert not m.missing(c, 'foo')
        assert m.missing(c, Missing())

        assert m.none(c, 0) is None
        assert m.none(c, 1) == 1

        assert m.partition(c, ['hello-world', '-']) == ('hello', '-', 'world')
        assert m.partition(c, 'hello world') == ('hello', ' ', 'world')

        assert m.parsedatetime(c, ['5/7/1974', '%d/%m/%Y']) == datetime.datetime(1974, 7, 5)

        assert m.rpartition(c, ['foo-bar-baz', '-']) == ('foo-bar', '-', 'baz')
        assert m.rpartition(c, 'foo bar baz') == ('foo bar', ' ', 'baz')

        assert isinstance(m.path(c, 'foo/bar'), modifiers.Path)

        assert m.slashjoin(c, ['foo/', '/bar']) == 'foo/bar'

        assert m.permission(c, 'read')
        assert not m.permission(c, 'write')

        assert m.prettylist(c, ['foo', 'bar']) == "'foo', 'bar'"

        assert m.qsupdate(c, {'page': '3'}) == 'page=3'

        assert m.quote(c, 'hello') == '"hello"'
        assert m.relto(c, '/bar') == '../../bar'

        # missing render

        assert m.renderable(c, Mock()) == 'ok'

        assert m.remap(c, {'foo': 'bar', 'baz': 'bar'}) in [{'bar': ['foo', 'baz']}, {'bar': ['baz', 'foo']}]

        assert list(m.reversed(c, [1, 3, 4])) == [4, 3, 1]

        assert m.reversesorted(c, [1, 5, 2]) == [5, 2, 1]

        objs = [Mock(id=5), Mock(id=10)]
        assert m.reversesortedkey(c, [objs, 'id']) == [objs[1], objs[0]]

        assert m.round(c, 3.14) == 3
        assert m.round(c, [3.14, 1]) == 3.1

        assert m.rstrip(c, '  hello  ') == '  hello'
        assert m.safe(c, 'test') == 'test'
        assert hasattr(m.safe(c, 'test'), 'html_safe')

        assert m.seqlast(c, [1, 2]) == [(False, 1), (True, 2)]

        assert m.set(c, [1, 2]) == {1, 2}

        assert isinstance(m.slice(c, [1, 2]), slice)

        assert m.slug(c, 'hello world') == 'hello-world'

        assert m.sorted(c, [1, 3, 0]) == [0, 1, 3]

        objs = [Mock(n=50), Mock(n=0)]
        assert m.sortedkey(c, [objs, 'n']) == [objs[1], objs[0]]

        assert m.split(c, 'foo bar baz') == ['foo', 'bar', 'baz']
        assert m.split(c, ['foo-bar-baz', '-']) == ['foo', 'bar', 'baz']

        assert m.splitfirst(c, 'foo bar baz') == 'foo'
        assert m.splitlast(c, 'foo bar baz') == 'baz'

        assert m.splitlines(c, 'foo\nbar') == ['foo', 'bar']
        assert m.squote(c, 'Hello') == "'Hello'"

        assert m.str(c, 5) == '5'

        assert m.strip(c, ' \nfoo \n ') == 'foo'
        self.assertEqual(m.stripall(c, ['a', ' b', 'c ', ' d ', '\t  e  \n\n ']), ['a', 'b', 'c', 'd', 'e'])

        assert m.striptags(c, '<p>Hello</p>') == ' Hello'
        assert m.sub(c, 'Hello ${world}') == 'Hello World!'

        assert m.sum(c, [1, 2, 3]) == 6

        assert m.swapcase(c, 'Hello') == 'hELLO'

        assert m.time(c, '09:45:30.0') == datetime.time(9, 45, 30)
        assert m.time(c, 'notatime') is None

        assert m.trim(c, ['longlonglong', 3]) == 'lon'

        assert m.ctime(c, 'Sun Jul  5 00:00:00 2015') == datetime.datetime(2015, 7, 5)

        assert m.timespan(c, '1d').hours == 24

        assert m.title(c, 'hello world') == 'Hello World'

        assert len(m.token(c, 3)) == 3

        assert m.json(c, [5]) == "[5]"
        assert m.type(c, 5) is type(5)

        assert m.unique(c, [1, 1, 2, 3]) == [1, 2, 3]

        assert m.upper(c, 'hello') == 'HELLO'

        assert isinstance(m.url(c, 'http://www.moyaproject.com'), URL)

        assert m.urldecode(c, 'foo=bar').copy() == {'foo': ['bar']}

        assert 'foo=egg' in m.urlupdate(c, {'foo': 'egg'})

        assert m.urlunquote(c, '%20') == ' '
        assert m.urlquote(c, ' ') == '%20'

        re_uuid = re.compile(r'[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')
        assert re_uuid.match(m.uuid(c, 1))
        assert re_uuid.match(m.uuid(c, 4))
        assert re_uuid.match(m.uuid(c, [3, 'http://www.moyaproject']))

        assert m.validfloat(c, '5')
        assert m.validfloat(c, '3.14')
        assert not m.validfloat(c, '3.14.3')

        assert m.validint(c, '5')
        assert m.validint(c, 5)
        assert not m.validint(c, '5.3')

        assert m.values(c, {'foo': 'bar'}) == ['bar']

        assert m.version(c, '3.2.3').major == 3
        assert isinstance(m.version(c, '3.2.3'), Version)

        self.assertEqual(m.zip(c, [[1, 2], [3, 4]]), [(1, 3), (2, 4)])

        assert m.versionspec(c, 'moya.tests==1.0.0').name == 'moya.tests'
        assert isinstance(m.versionspec(c, 'moya.tests==1.0.0'), VersionSpec)
Example #10
0
    def testModifiers(self):
        m = self.modifiers

        c = Context({
            "call": {
                "world": "World!"
            },
            "permissions": ["read"],
            "request": {
                "path_qs": "/foo/bar/baz?page=1",
                "path": "/foo/bar/baz",
                "query_string": "page=1",
            },
        })
        c.push_frame("call")

        assert m.abs(c, -5) == 5
        assert m.abs(c, 5) == 5
        assert m.abs(c, 0) == 0

        assert m.all(c, [1, 1, 1])
        assert not m.all(c, [1, 0, 1])
        assert m.all(c, [])

        # missing app:

        assert m.basename(c, "foo") == "foo"
        assert m.basename(c, "foo/bar") == "bar"

        assert m.bool(c, 1) is True
        assert m.bool(c, 0) is False

        assert m.capitalize(c, "hello") == "Hello"

        assert m.ceil(c, 3.14) == 4.0

        assert m.choices(c, _Choices()) == [1, 2, 3]

        assert m.intchoices(c, _Choices()) == [2, 3, 4]

        assert list(m.chain(c, [[1, 2], [3, 4]])) == [1, 2, 3, 4]

        assert m.chr(c, 32) == " "

        assert m.collect(c, (["Hello", "World"], 1)) == ["e", "o"]

        objs = [Mock(id=1, a="hello"), Mock(id=2, a="world")]
        assert m.collectmap(c, [objs, "a"]) == {
            "hello": objs[0],
            "world": objs[1]
        }

        assert m.collectids(c, objs) == [1, 2]

        assert m.commalist(c, ["hello", "world"]) == "hello,world"
        assert m.commaspacelist(c, ["hello", "world"]) == "hello, world"
        assert m.commasplit(c, "foo,bar") == ["foo", "bar"]

        assert m.copy(c, {"foo": "bar"}) == {"foo": "bar"}

        # missing csrf

        assert m.d(c, "3") == 3

        # missing data

        assert m.date(c, "2015-12-20") == datetime.date(2015, 12, 20)
        assert m.datetime(
            c, "2015-12-20T16:43:15.479619") == datetime.datetime(2015,
                                                                  12,
                                                                  20,
                                                                  16,
                                                                  43,
                                                                  15,
                                                                  479619,
                                                                  tzinfo=UTC)

        assert m.debug(c, 5) == "5"
        assert m.debug(c, "5") == "'5'"

        assert m.dict("c", [("foo", "bar")]) == {"foo": "bar"}

        assert m.dirname(c, "foo/bar") == "foo"

        assert m.domain(
            c, "http://www.willmcgugan.com/foo/") == "www.willmcgugan.com"

        assert m.dropchar(c, "foo") == "oo"

        # missing enum

        assert list(m.enumerate(c, "foo")) == [(0, "f"), (1, "o"), (2, "o")]
        assert list(m.enumerate1(c, "foo")) == [(1, "f"), (2, "o"), (3, "o")]

        assert m.epoch(c, 0) == datetime.datetime(1970, 1, 1, tzinfo=UTC)

        assert m.eval(c, "1+2") == 3

        assert m.exists(c, "foo")
        assert not m.exists(c, Missing())

        assert m.ext("foo.bar", ".bar")

        assert m.filesize(c, 1024) == "1.0 KB"
        assert m.first(c, "foo") == "f"
        assert m.flat(c, [1, [2, 3]]) == [1, 2, 3]
        assert m.float(c, "3.14") == 3.14
        assert m.floor(c, 3.14) == 3
        assert m.parsejson(c, """{"foo": "bar"}""") == {"foo": "bar"}

        # missing get

        objs = [Mock(a="foo"), Mock(a="foo")]
        assert m.group(c, [objs, "a"])["foo"] == [objs[0], objs[1]]

        # missing hasdata
        assert m.html(c, "<h1>header</h1>") == "<h1>header</h1>"
        assert hasattr(m.html(c, "<h1>header</h1>"), "html_safe")

        objs = [Mock(id=1, a="hello"), Mock(id=2, a="world")]

        assert m.ids(c, objs) == [1, 2]

        assert m.int(c, "3") == 3
        assert m.int(c, 3.14) == 3

        assert m.isbool(c, True)
        assert m.isbool(c, False)
        assert not m.isbool(c, 0)

        assert not m.isemail(c, "notanemal")
        assert m.isemail(c, "*****@*****.**")

        assert m.isfloat(c, 3.14)
        assert not m.isfloat(c, "3.14")

        assert m.isint(c, 3)
        assert not m.isint(c, "3")

        assert m.isnone(c, None)
        assert not m.isnone(c, "None")
        assert not m.isnone(c, 0)

        assert m.isnumber(c, 5)
        assert m.isnumber(c, 3.14)
        assert m.isnumber(c, -10)
        assert not m.isnumber(c, None)

        assert m.isstr(c, "str")
        assert m.isstr(c, "")
        assert not m.isstr(c, 3)

        assert m.items(c, {"foo": "bar"}) == [("foo", "bar")]

        assert m.join(c, ["foo", "bar"]) == "foobar"

        assert m.joinspace(c, ["foo", "bar"]) == "foo bar"

        assert m.joinwith(c, (["foo", "bar"], "-")) == "foo-bar"

        assert m.keys(c, {"foo": "bar"}) == ["foo"]

        assert m.last(c, [1, 2, 3]) == 3

        assert m.len(c, [1, 2, 3, 4]) == 4

        assert m.linebreaks(c, "a\nb") == "a<br>\nb"

        assert m.list(c, "abc") == ["a", "b", "c"]

        # missing localize

        assert m.log10(c, 100.0) == 2.0

        assert m.lower(c, "Hello") == "hello"

        assert m.lstrip(c, "  \nHello\n") == "Hello\n"

        assert m.max(c, [1, 2, 3, 0]) == 3

        assert m.md5(c, "hello") == "5d41402abc4b2a76b9719d911017c592"
        assert m.md5(
            c, io.BytesIO(b"hello")) == "5d41402abc4b2a76b9719d911017c592"

        assert m.min(c, [1, 2, 3, 0]) == 0

        assert not m.missing(c, "foo")
        assert m.missing(c, Missing())

        assert m.none(c, 0) is None
        assert m.none(c, 1) == 1

        assert m.partition(c, ["hello-world", "-"]) == ("hello", "-", "world")
        assert m.partition(c, "hello world") == ("hello", " ", "world")

        assert m.parsedatetime(c,
                               ["5/7/1974", "%d/%m/%Y"]) == datetime.datetime(
                                   1974, 7, 5)

        assert m.rpartition(c, ["foo-bar-baz", "-"]) == ("foo-bar", "-", "baz")
        assert m.rpartition(c, "foo bar baz") == ("foo bar", " ", "baz")

        assert isinstance(m.path(c, "foo/bar"), modifiers.Path)

        assert m.slashjoin(c, ["foo/", "/bar"]) == "foo/bar"

        assert m.permission(c, "read")
        assert not m.permission(c, "write")

        assert m.prettylist(c, ["foo", "bar"]) == "'foo', 'bar'"

        assert m.qsupdate(c, {"page": "3"}) == "page=3"

        assert m.quote(c, "hello") == '"hello"'
        assert m.relto(c, "/bar") == "../../bar"

        # missing render

        assert m.renderable(c, Mock()) == "ok"

        assert m.remap(c, {
            "foo": "bar",
            "baz": "bar"
        }) in [
            {
                "bar": ["foo", "baz"]
            },
            {
                "bar": ["baz", "foo"]
            },
        ]

        assert list(m.reversed(c, [1, 3, 4])) == [4, 3, 1]

        assert m.rsorted(c, [1, 5, 2]) == [5, 2, 1]

        objs = [Mock(id=5), Mock(id=10)]
        assert m.rsortedby(c, [objs, "id"]) == [objs[1], objs[0]]

        assert m.round(c, 3.14) == 3
        assert m.round(c, [3.14, 1]) == 3.1

        assert m.rstrip(c, "  hello  ") == "  hello"
        assert m.safe(c, "test") == "test"
        assert hasattr(m.safe(c, "test"), "html_safe")

        assert m.seqlast(c, [1, 2]) == [(False, 1), (True, 2)]

        assert m.set(c, [1, 2]) == {1, 2}

        assert isinstance(m.slice(c, [1, 2]), slice)

        assert m.slug(c, "hello world") == "hello-world"

        assert m.sorted(c, [1, 3, 0]) == [0, 1, 3]

        objs = [Mock(n=50), Mock(n=0)]
        assert m.sortedby(c, [objs, "n"]) == [objs[1], objs[0]]

        assert m.split(c, "foo bar baz") == ["foo", "bar", "baz"]
        assert m.split(c, ["foo-bar-baz", "-"]) == ["foo", "bar", "baz"]

        assert m.splitfirst(c, "foo bar baz") == "foo"
        assert m.splitlast(c, "foo bar baz") == "baz"

        assert m.splitlines(c, "foo\nbar") == ["foo", "bar"]
        assert m.squote(c, "Hello") == "'Hello'"

        assert m.str(c, 5) == "5"

        assert m.strip(c, " \nfoo \n ") == "foo"
        self.assertEqual(
            m.stripall(c, ["a", " b", "c ", " d ", "\t  e  \n\n "]),
            ["a", "b", "c", "d", "e"],
        )

        assert m.striptags(c, "<p>Hello</p>") == " Hello"
        assert m.sub(c, "Hello ${world}") == "Hello World!"

        assert m.sum(c, [1, 2, 3]) == 6

        assert m.swapcase(c, "Hello") == "hELLO"

        assert m.time(c, "09:45:30.0") == datetime.time(9, 45, 30)
        assert m.time(c, "notatime") is None

        assert m.trim(c, ["longlonglong", 3]) == "lon"

        assert m.ctime(c, "Sun Jul  5 00:00:00 2015") == datetime.datetime(
            2015, 7, 5)

        assert m.timespan(c, "1d").hours == 24

        assert m.title(c, "hello world") == "Hello World"

        assert len(m.token(c, 3)) == 3

        assert m.json(c, [5]) == "[5]"
        assert m.type(c, 5) is type(5)

        assert m.unique(c, [1, 1, 2, 3]) == [1, 2, 3]

        assert m.upper(c, "hello") == "HELLO"

        assert isinstance(m.url(c, "http://www.moyaproject.com"), URL)

        assert m.urldecode(c, "foo=bar").copy() == {"foo": ["bar"]}

        assert "foo=egg" in m.urlupdate(c, {"foo": "egg"})

        assert m.urlunquote(c, "%20") == " "
        assert m.urlquote(c, " ") == "%20"

        re_uuid = re.compile(
            r"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}")
        assert re_uuid.match(m.uuid(c, 1))
        assert re_uuid.match(m.uuid(c, 4))
        assert re_uuid.match(m.uuid(c, [3, "http://www.moyaproject"]))

        assert m.validfloat(c, "5")
        assert m.validfloat(c, "3.14")
        assert not m.validfloat(c, "3.14.3")

        assert m.validint(c, "5")
        assert m.validint(c, 5)
        assert not m.validint(c, "5.3")

        assert m.values(c, {"foo": "bar"}) == ["bar"]

        assert m.version(c, "3.2.3").major == 3
        assert isinstance(m.version(c, "3.2.3"), Version)

        self.assertEqual(m.zip(c, [[1, 2], [3, 4]]), [(1, 3), (2, 4)])

        assert m.versionspec(c, "moya.tests==1.0.0").name == "moya.tests"
        assert isinstance(m.versionspec(c, "moya.tests==1.0.0"), VersionSpec)