cubicweb/test/unittest_toolsutils.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Fri, 26 Aug 2016 14:31:25 +0200
changeset 11452 628dd5832495
parent 11451 ae58ba20418c
child 11476 a9f26de5ea6c
permissions -rw-r--r--
[test] Add a test for toolsutils.read_config
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9740
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     1
# copyright 2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     3
#
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     4
# This file is part of CubicWeb.
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     5
#
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     9
# any later version.
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    10
#
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    14
# details.
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    15
#
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    18
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
11452
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    20
import tempfile
11451
ae58ba20418c [test] Use plain unittest in unittest_toolsutils
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    21
import unittest
9740
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
11452
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    23
from cubicweb.toolsutils import RQLExecuteMatcher, read_config
9740
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    25
11451
ae58ba20418c [test] Use plain unittest in unittest_toolsutils
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
    26
class RQLExecuteMatcherTests(unittest.TestCase):
9740
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    27
    def matched_query(self, text):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    28
        match = RQLExecuteMatcher.match(text)
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    29
        if match is None:
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    30
            return None
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    31
        return match['rql_query']
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    32
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    33
    def test_unknown_function_dont_match(self):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    34
        self.assertIsNone(self.matched_query('foo'))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    35
        self.assertIsNone(self.matched_query('rql('))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    36
        self.assertIsNone(self.matched_query('hell("")'))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    37
        self.assertIsNone(self.matched_query('eval("rql(\'bla\''))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    38
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    39
    def test_rql_other_parameters_dont_match(self):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    40
        self.assertIsNone(self.matched_query('rql("Any X WHERE X eid %(x)s")'))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    41
        self.assertIsNone(self.matched_query('rql("Any X WHERE X eid %(x)s", {'))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    42
        self.assertIsNone(self.matched_query('session.execute("Any X WHERE X eid %(x)s")'))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    43
        self.assertIsNone(self.matched_query('session.execute("Any X WHERE X eid %(x)s", {'))
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    44
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    45
    def test_rql_function_match(self):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    46
        for func_expr in ('rql', 'session.execute'):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    47
            query = self.matched_query('%s("Any X WHERE X is ' % func_expr)
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    48
            self.assertEqual(query, 'Any X WHERE X is ')
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    49
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    50
    def test_offseted_rql_function_match(self):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    51
        """check indentation is allowed"""
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    52
        for func_expr in ('  rql', '  session.execute'):
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    53
            query = self.matched_query('%s("Any X WHERE X is ' % func_expr)
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    54
            self.assertEqual(query, 'Any X WHERE X is ')
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    55
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    56
11452
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    57
SOURCES_CONTENT = b"""
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    58
[admin]
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    59
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    60
# cubicweb manager account's login (this user will be created)
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    61
login=admin
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    62
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    63
# cubicweb manager account's password
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    64
password=admin
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    65
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    66
[system]
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    67
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    68
# database driver (postgres, sqlite, sqlserver2005)
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    69
db-driver=postgres
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    70
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    71
# database host
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    72
db-host=
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    73
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    74
# database port
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    75
db-port=
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    76
"""
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    77
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    78
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    79
class ToolsUtilsTC(unittest.TestCase):
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    80
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    81
    def test_read_config(self):
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    82
        with tempfile.NamedTemporaryFile() as f:
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    83
            f.write(SOURCES_CONTENT)
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    84
            f.seek(0)
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    85
            config = read_config(f.name)
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    86
        expected = {
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    87
            'admin': {
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    88
                'password': 'admin',
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    89
                'login': 'admin',
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    90
            },
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    91
            'system': {
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    92
                'db-port': None,
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    93
                'db-driver': 'postgres',
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    94
                'db-host': None,
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    95
            },
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    96
        }
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    97
        self.assertEqual(config, expected)
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    98
628dd5832495 [test] Add a test for toolsutils.read_config
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11451
diff changeset
    99
9740
c0239d8ae742 [shell] provide autocompletion for rql queries in cubicweb-ctl shell (closes #3560541)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   100
if __name__ == '__main__':
11451
ae58ba20418c [test] Use plain unittest in unittest_toolsutils
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   101
    unittest.main()