[MOV] test_pylint, test_lint: add es-check linter
Because Odoo still supports Android Kitkat and Internet Explorer, ES5 is the highest ECMAScript allowed version. This commit adds a new test that parses each javascript file found in addons. The test fails if unsupported js code is found. As ES6 is allowed during tests, the files under a path that contains 'static/test' are just skipped. This test uses the es-check tool (https://www.npmjs.com/package/es-check). If the es-check tool cannot be found, the test is simply skipped. Also the test_pylint module is renamed to a more generic name test_lint, that way, every linter test can find a shelter here. closes odoo/odoo#33724 Signed-off-by: Christophe Monniez (moc) <moc@odoo.com>
This commit is contained in:
@@ -0,0 +1,13 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||||
|
|
||||||
|
from odoo import api, SUPERUSER_ID
|
||||||
|
|
||||||
|
|
||||||
|
# TO REMOVE in master
|
||||||
|
def uninstall_test_pylint(cr):
|
||||||
|
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||||
|
env['ir.module.module'].search([
|
||||||
|
('name', '=', 'test_pylint'),
|
||||||
|
('state', '=', 'installed')
|
||||||
|
]).write({'state': 'uninstalled'})
|
||||||
@@ -1,11 +1,12 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
{
|
{
|
||||||
'name': 'test-eval',
|
'name': 'test-lint',
|
||||||
'version': '0.1',
|
'version': '0.1',
|
||||||
'category': 'Tests',
|
'category': 'Tests',
|
||||||
'description': """A module to test Odoo with pylint.""",
|
'description': """A module to test Odoo code with various linters.""",
|
||||||
'maintainer': 'Odoo SA',
|
'maintainer': 'Odoo SA',
|
||||||
'depends': ['base'],
|
'depends': ['base'],
|
||||||
'installable': True,
|
'installable': True,
|
||||||
'auto_install': False,
|
'auto_install': False,
|
||||||
|
'pre_init_hook': 'uninstall_test_pylint'
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
import test_pylint
|
||||||
|
import test_ecmascript
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import subprocess
|
||||||
|
from unittest import skipIf
|
||||||
|
from odoo.tests.common import TransactionCase
|
||||||
|
from odoo import tools
|
||||||
|
from odoo.modules import get_modules, get_module_path
|
||||||
|
|
||||||
|
MAX_ES_VERSION = 'es5'
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
try:
|
||||||
|
es_check = tools.misc.find_in_path('es-check')
|
||||||
|
except IOError:
|
||||||
|
es_check = None
|
||||||
|
|
||||||
|
|
||||||
|
@skipIf(es_check is None, "es-check tool not found on this system")
|
||||||
|
class TestECMAScriptVersion(TransactionCase):
|
||||||
|
|
||||||
|
longMessage = True
|
||||||
|
|
||||||
|
def test_ecmascript_version(self):
|
||||||
|
""" Test that there is no unsupported ecmascript in javascript files """
|
||||||
|
|
||||||
|
black_re = re.compile(r'summernote.+(intro\.js|outro.js)$')
|
||||||
|
|
||||||
|
mod_paths = [get_module_path(m) for m in get_modules()]
|
||||||
|
files_to_check = []
|
||||||
|
for p in mod_paths:
|
||||||
|
for dp, _, file_names in os.walk(p):
|
||||||
|
if 'static/test' in dp:
|
||||||
|
continue
|
||||||
|
for fn in file_names:
|
||||||
|
fullpath_name = os.path.join(dp, fn)
|
||||||
|
if fullpath_name.endswith('.js') and not black_re.search(fullpath_name):
|
||||||
|
files_to_check.append(fullpath_name)
|
||||||
|
|
||||||
|
_logger.info('Testing %s js files', len(files_to_check))
|
||||||
|
cmd = [es_check, MAX_ES_VERSION] + files_to_check
|
||||||
|
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
out, err = process.communicate()
|
||||||
|
self.assertEqual(process.returncode, 0, msg=out)
|
||||||
@@ -1 +0,0 @@
|
|||||||
import test_pylint
|
|
||||||
Reference in New Issue
Block a user