def test_parse_function_multi_params(self):
     self.assertEqual(
         Pipeline.parse('#plus(1, 2)'),
         Message([
             Function(name='plus', messages=[
                 Message([PlainText(name='1')]),
                 Message([PlainText(name='2')])
             ])
         ])
     )
 def test_str_function_multi_params(self):
     self.assertEqual(
         str(
             Message([
                 Function(name='plus', messages=[
                     Message([PlainText(name='1')]),
                     Message([PlainText(name='2')])
                 ])
             ])
         ),
         '3'
     )
 def test_parse_mix(self):
     self.assertEqual(
         Pipeline.parse('Alive Device: #alives() / #devices()'),
         Message([
             PlainText(name='Alive Device: '),
             Function(name='alives', messages=[
                 Message([])
             ]),
             PlainText(name=' / '),
             Function(name='devices', messages=[
                 Message([])
             ])
         ])
     )
 def test_parse_escaped(self):
     self.assertEqual(
         Pipeline.parse('\\\\\\#\\#Hello\\\\world!\\#\\#'),  # means '\\\#\#Hello\\world!\#\#'
         Message(tokens=[
             PlainText(name='\\##Hello\\world!##')  # means '\##Hello\world!##'
         ])
     )
    def test_str_deep(self):
        """
        Note: This testcase only succeeds within 24 hours from initialization of DB.
        (Because of 'alives' function)

        """
        self.assertEqual(
            str(
                Message([
                    PlainText(name='Alive Device Ratio: '),
                    Function(name='divide', messages=[
                        Message([
                            Function(name='alives', messages=[
                                Message([])
                            ]),
                        ]),
                        Message([
                            Function(name='devices', messages=[
                                Message([])
                            ]),
                        ]),
                    ])
                ])
            ),
            'Alive Device Ratio: 0.75'
        )
 def test_parse_normal(self):
     self.assertEqual(
         Pipeline.parse('Hello!'),
         Message(tokens=[
             PlainText(name='Hello!')
         ])
     )
 def test_str_normal(self):
     self.assertEqual(
         str(
             Message(tokens=[
                 PlainText(name='Hello!')
             ])
         ),
         'Hello!'
     )
 def test_str_escaped(self):
     self.assertEqual(
         str(
             Message(tokens=[
                 PlainText(name='\\##Hello\\world!##')  # means '\##Hello\world!##'
             ])
         ),
         '\\##Hello\\world!##'  # means '\##Hello\world!##'
     )
 def test_parse_function_report(self):
     self.assertEqual(
         Pipeline.parse('#report(GPU480)'),
         Message([
             Function(name='report', messages=[
                 Message([
                     PlainText(name='GPU480')
                 ])
             ])
         ])
     )
 def test_extra_param_error(self):
     self.assertRaises(
         FunctionParamUnmatchError,
         str,
         Message([
             Function(name='devices', messages=[
                 Message([
                     PlainText(name='extra_word')
                 ])
             ])
         ])
     )
 def test_str_function_report(self):
     self.assertEqual(
         str(
             Message([
                 Function(name='report', messages=[
                     Message([
                         PlainText(name='GPU480')
                     ])
                 ])
             ])
         ),
         'GPU Information Here.'
     )
    def test_parse_deep(self):
        """
        Note: This testcase only succeeds within 24 hours from initialization of DB.
        (Because of 'alives' function)

        """
        self.assertEqual(
            Pipeline.parse('Alive Device Ratio: #divide(#alives(), #devices())'),
            Message([
                PlainText(name='Alive Device Ratio: '),
                Function(name='divide', messages=[
                    Message([
                        Function(name='alives', messages=[
                            Message([])
                        ]),
                    ]),
                    Message([
                        Function(name='devices', messages=[
                            Message([])
                        ]),
                    ]),
                ])
            ])
        )