[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 -*-
|
||||
{
|
||||
'name': 'test-eval',
|
||||
'name': 'test-lint',
|
||||
'version': '0.1',
|
||||
'category': 'Tests',
|
||||
'description': """A module to test Odoo with pylint.""",
|
||||
'description': """A module to test Odoo code with various linters.""",
|
||||
'maintainer': 'Odoo SA',
|
||||
'depends': ['base'],
|
||||
'installable': True,
|
||||
'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