def test_create_option(self): self.assertIsInstance(option.Option("A"), option.Full) self.assertIsInstance(option.Option(10), option.Full) self.assertIsInstance(option.Option(10, lambda x: x > 7), option.Full) self.assertIsInstance(option.Option(None), option.Empty) self.assertIsInstance(option.Option(False), option.Full) self.assertIsInstance(option.Option(0), option.Full) self.assertIsInstance(option.Option(False, checker=bool), option.Empty) self.assertIsInstance(option.Option(0, checker=bool), option.Empty) self.assertIsInstance(option.Option(10, lambda x: x > 70), option.Empty)
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 option.Option(request.get("url", None))\ .map(lambda s: s.split(".")[-1]) # extract value from extension r = dict(url="myfile.png") self.assertEqual( "PNG", option.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", option.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", option.Option(r.get("type", None)).or_call( from_mimetype, r).or_call(from_extension, r).map(operator.methodcaller("upper")).get_or(""))
def from_extension(request): # you can return both value or Option return option.Option(request.get("url", None))\ .map(lambda s: s.split(".")[-1])
def test_empty_check(self): self.assertTrue(option.Empty().empty) self.assertTrue(option.Option(None).empty) self.assertTrue(option.Option.from_call(lambda: None).empty) self.assertFalse(option.Option(10).empty) self.assertFalse(option.Full(10).empty)
def parameter(self, name): return option.Option(self.get(name, None))
def test_option_repr(self): self.assertEqual("Full(10)", repr(option.Full(10))) self.assertEqual("Full(in box!)", repr(option.Full("in box!"))) self.assertEqual("Empty()", repr(option.Empty())) self.assertEqual("Empty()", repr(option.Option(None)))
def test_stringify(self): self.assertEqual("Full(10)", str(option.Full(10))) self.assertEqual("Full(in box!)", str(option.Full("in box!"))) self.assertEqual("Empty()", str(option.Empty())) self.assertEqual("Empty()", str(option.Option(None)))