Esempio n. 1
0
    def test_answer_correctly(self):

        r1 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'hola')
        self.assertEqual(r1.message, '¿De qué tipo quieres tu café?')
        self.assertEqual(r1.next_node, 'node1')

        r2 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'latte',
                                      r1.next_node, r1.data)
        self.assertEqual(r2.message, '¿De qué tamaño quieres tu café?')
        self.assertEqual(r2.data.get('type'), 'latte')
        self.assertEqual(r2.next_node, 'node1')

        r3 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'mediano',
                                      r2.next_node, r2.data)
        self.assertEqual(r3.message, '¿Lo quieres con crema?')
        self.assertEqual(r3.data.get('size'), 'mediano')
        self.assertEqual(r3.next_node, 'node1')

        r4 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'no', r3.next_node,
                                      r3.data)
        self.assertEqual(r4.message,
                         'Tu pedido es un latte mediano sin crema?')
        self.assertEqual(r4.data.get('with-cream'), False)
        self.assertEqual(r4.next_node, 'node3')

        r5 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'si', r4.next_node,
                                      r4.data)
        self.assertEqual(r5.message, 'Confirmado')
        self.assertEqual(r5.data.get('confirm'), True)
        self.assertEqual(r5.next_node, None)
Esempio n. 2
0
    def test_in_disgression_check(self):

        r1 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'digress?', 'node1')
        self.assertEqual(r1.message, 'Sí')

        r2 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'digress?', 'node2')
        self.assertEqual(r2.message, 'No')
Esempio n. 3
0
    def test_before_block(self):

        r = BotlangSystem().eval_bot(self.SLOTS_WITH_BEFORE, 'hola', 'node1')
        self.assertEqual(r.data['meta'], 'b')

        r = BotlangSystem().eval_bot(self.SLOTS_WITH_BEFORE, 'a', 'node1')
        self.assertEqual(r.data['meta'], 'a')
Esempio n. 4
0
    def test_give_partial_information(self):

        r1 = BotlangSystem().eval_bot(
            self.SLOTS_DIGRESS, 'Hola, quiero un cafe mocha grande por favor')
        self.assertEqual(r1.message, '¿Lo quieres con crema?')
        self.assertEqual(r1.data.get('type'), 'mocha')
        self.assertEqual(r1.data.get('size'), 'grande')
        self.assertEqual(r1.next_node, 'node1')

        r2 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'si', r1.next_node,
                                      r1.data)
        self.assertEqual(r2.message, 'Tu pedido es un mocha grande con crema?')
        self.assertEqual(r2.data.get('with-cream'), True)
        self.assertEqual(r2.next_node, 'node3')

        r3 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'no', r2.next_node,
                                      r2.data)
        self.assertEqual(r3.message, 'Bueno, ¿qué café quieres?')
        self.assertEqual(r3.next_node, 'node1')

        r4 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'un latte grande',
                                      r3.next_node, r3.data)
        self.assertEqual(r4.message, '¿Lo quieres con crema?')
        self.assertEqual(r4.next_node, 'node1')

        r5 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'si', r4.next_node,
                                      r4.data)
        self.assertEqual(r5.message, 'Tu pedido es un latte grande con crema?')
        self.assertEqual(r5.next_node, 'node3')
Esempio n. 5
0
    def test_recursive_digression(self):

        r1 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'mocha', 'node1')
        self.assertEqual(r1.message, '¿De qué tamaño quieres tu café?')
        self.assertEqual(r1.next_node, 'node1')

        r2 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'coffee',
                                      r1.next_node, r1.data)
        self.assertEqual(r2.message, '¿De qué tipo quieres tu café?')
        self.assertEqual(r2.next_node, 'node1')
Esempio n. 6
0
    def test_exception_values(self):

        self.assertFalse(BotlangSystem().eval('(exception? #t)'))
        self.assertFalse(BotlangSystem().eval('(exception? nil)'))
        self.assertTrue(BotlangSystem().eval(
            '(exception? (try-catch (fun () (get (make-dict) 1)) (fun (e) e)))'
        ))
        self.assertFalse(BotlangSystem().eval(
            '(exception? (try-catch (fun () (get (list 1) 0)) (fun (e) e)))'))
        self.assertTrue(BotlangSystem().eval(
            '(exception? (try-catch (fun () (get (list 1) 1)) (fun (e) e)))'))
Esempio n. 7
0
    def test_optional_slot(self):

        r1 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS,
                                      'descuento 123 para mocha chico',
                                      'node1')
        self.assertEqual(r1.data.get('discount'), '123')
        self.assertEqual(r1.message, '¿Lo quieres con crema?')

        r2 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'si', r1.next_node,
                                      r1.data)
        self.assertEqual(r2.message, 'Tu pedido es un mocha chico con crema?')

        r3 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'si', r2.next_node,
                                      r2.data)
        self.assertEqual(r3.message, 'Confirmado. Te saldrá gratis :)')
Esempio n. 8
0
    def test_primitives_exception(self):

        try:
            BotlangSystem().eval('(+ (list 1) #f)')
            self.fail('Should not reach this')
        except BotlangErrorException as e:
            self.assertEqual(len(e.stack), 1)
Esempio n. 9
0
    def test_answer_incorrectly_no_digress(self):

        r1 = BotlangSystem().eval_bot(
            self.SLOTS_NO_DIGRESS,
            'Hola, quiero un cafe americano chico por favor')
        self.assertEqual(r1.message, '¿Lo quieres con crema?')
        self.assertEqual(r1.next_node, 'node1')

        r2 = BotlangSystem().eval_bot(self.SLOTS_NO_DIGRESS, 'qwerty',
                                      r1.next_node, r1.data)
        self.assertEqual(r2.message, '¿Lo quieres con crema?')
        self.assertEqual(r2.next_node, 'node1')

        r3 = BotlangSystem().eval_bot(self.SLOTS_NO_DIGRESS, 'no',
                                      r2.next_node, r2.data)
        self.assertEqual(r3.message,
                         'Tu pedido es un americano chico sin crema?')
        self.assertEqual(r3.next_node, 'node3')
Esempio n. 10
0
    def test_stack_trace(self):

        code = """
            (begin
                (define f
                    (fun (n)
                        (fun (x) (n x))
                    )
                )
                (define g (f 3))

                (+ (g 3) (g 2))
            )
        """
        try:
            BotlangSystem().eval(code)
            self.fail('Should not reach this')
        except BotlangErrorException as e:
            self.assertEqual(len(e.stack), 5)
            self.assertTrue(
                e.print_stack_trace().endswith('3 is not a function'))
            self.assertTrue('line 5' in e.print_stack_trace())

        code = """
            [define API_KEY "Yzy4kaJjPsWz7LVRB6Q86GcnJX9SvxaC"]
            [define ACCESS_HEADERS
                (make-dict
                    (list
                        (cons "Content-Type" "application/json")
                        (cons "ApiKey" API_KEY)
                    )
                )
            ]
            (non-existent-function 1)
        """
        try:
            BotlangSystem().eval(code)
        except BotlangErrorException as e:
            self.assertEqual(len(e.stack), 2)
Esempio n. 11
0
    def test_to_json(self):

        json_list = BotlangSystem.run('(to-json (list 1 2 3))')
        self.assertEqual(json_list, "[1, 2, 3]")

        json_dict = BotlangSystem.run(
            '(to-json (make-dict (list (cons "a" 2))))')
        self.assertEqual(json_dict, '{"a": 2}')

        python_dict = {'a': None, 'b': 'hola', 'c': 12, 'd': True, 'e': False}
        runtime = BotlangSystem()
        runtime.environment.update({'python-dict': python_dict})
        json_dict = runtime.eval('(to-json python-dict)')
        self.assertEqual(json_dict, json.dumps(python_dict, sort_keys=True))
Esempio n. 12
0
    def test_digression(self):

        r1 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS,
                                      'Hola, quiero un latte por favor')
        self.assertEqual(r1.message, '¿De qué tamaño quieres tu café?')
        self.assertEqual(r1.next_node, 'node1')

        # Digression with return
        r2 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'ctm', r1.next_node,
                                      r1.data)
        self.assertEqual(r2.message, 'No me insultes')
        self.assertEqual(r2.next_node, 'node1')

        r3 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'lo quiero mediano',
                                      r2.next_node, r2.data)
        self.assertEqual(r3.message, '¿Lo quieres con crema?')
        self.assertEqual(r3.next_node, 'node1')

        # Digression without return
        r4 = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'chao', r3.next_node,
                                      r3.data)
        self.assertEqual(r4.message, 'Adiós')
        self.assertEqual(r4.next_node, None)
        self.assertEqual(r4.bot_state, 'BOT_ENDED')
Esempio n. 13
0
    def test_from_json(self):

        python_list = BotlangSystem.run('(from-json "[1, 2, 3]")')
        self.assertEqual(python_list, [1, 2, 3])

        json_dict = json.dumps({
            'a': None,
            'b': 'hola',
            'c': 12,
            'd': True,
            'e': False
        })
        runtime = BotlangSystem()
        runtime.environment.update({'json-dict': json_dict})
        python_dict = runtime.eval('(from-json json-dict)')

        self.assertDictEqual(json.loads(json_dict), python_dict)
Esempio n. 14
0
    def test_return_does_not_interfere(self):

        r = BotlangSystem().eval_bot(self.SLOTS_DIGRESS, 'ctm', 'node2')
        self.assertEqual(r.message, 'No me insultes')
        self.assertEqual(r.next_node, None)
        self.assertEqual(r.bot_state, 'BOT_ENDED')