示例#1
0
文件: tests.py 项目: pawroman/fn.py
    def test_lazy_orcall(self):
        def from_mimetype(request):
            # you can return both value or Option
            return request.get("mimetype", None)

        def from_extension(request):
            # you can return both value or Option
            return monad.Option(request.get("url", None))\
                        .map(lambda s: s.split(".")[-1])

        # extract value from extension
        r = dict(url="myfile.png")
        self.assertEqual("PNG", monad.Option(r.get("type", None)) \
                                     .or_call(from_mimetype, r) \
                                     .or_call(from_extension, r) \
                                     .map(operator.methodcaller("upper")) \
                                     .get_or(""))

        # extract value from mimetype
        r = dict(url="myfile.svg", mimetype="png")
        self.assertEqual("PNG", monad.Option(r.get("type", None)) \
                                     .or_call(from_mimetype, r) \
                                     .or_call(from_extension, r) \
                                     .map(operator.methodcaller("upper")) \
                                     .get_or(""))

        # type is set directly
        r = dict(url="myfile.jpeg", mimetype="svg", type="png")
        self.assertEqual("PNG", monad.Option(r.get("type", None)) \
                                     .or_call(from_mimetype, r) \
                                     .or_call(from_extension, r) \
                                     .map(operator.methodcaller("upper")) \
                                     .get_or(""))
示例#2
0
文件: tests.py 项目: pawroman/fn.py
 def test_create_option(self):
     self.assertIsInstance(monad.Option("A"), monad.Full)
     self.assertIsInstance(monad.Option(10), monad.Full)
     self.assertIsInstance(monad.Option(10, lambda x: x > 7), monad.Full)
     self.assertIsInstance(monad.Option(None), monad.Empty)
     self.assertIsInstance(monad.Option(False), monad.Full)
     self.assertIsInstance(monad.Option(0), monad.Full)
     self.assertIsInstance(monad.Option(False, checker=bool), monad.Empty)
     self.assertIsInstance(monad.Option(0, checker=bool), monad.Empty)
     self.assertIsInstance(monad.Option(10, lambda x: x > 70), monad.Empty)
示例#3
0
文件: tests.py 项目: pawroman/fn.py
 def test_option_repr(self):
     self.assertEqual("Full(10)", repr(monad.Full(10)))
     self.assertEqual("Full(in box!)", repr(monad.Full("in box!")))
     self.assertEqual("Empty()", repr(monad.Empty()))
     self.assertEqual("Empty()", repr(monad.Option(None)))
示例#4
0
文件: tests.py 项目: pawroman/fn.py
 def test_stringify(self):
     self.assertEqual("Full(10)", str(monad.Full(10)))
     self.assertEqual("Full(in box!)", str(monad.Full("in box!")))
     self.assertEqual("Empty()", str(monad.Empty()))
     self.assertEqual("Empty()", str(monad.Option(None)))
示例#5
0
文件: tests.py 项目: pawroman/fn.py
 def from_extension(request):
     # you can return both value or Option
     return monad.Option(request.get("url", None))\
                 .map(lambda s: s.split(".")[-1])
示例#6
0
文件: tests.py 项目: pawroman/fn.py
 def test_empty_check(self):
     self.assertTrue(monad.Empty().empty)
     self.assertTrue(monad.Option(None).empty)
     self.assertTrue(monad.Option.from_call(lambda: None).empty)
     self.assertFalse(monad.Option(10).empty)
     self.assertFalse(monad.Full(10).empty)
示例#7
0
文件: tests.py 项目: pawroman/fn.py
 def parameter(self, name):
     return monad.Option(self.get(name, None))