From f25d13c51ae0a3019f6570d0b86143519436d524 Mon Sep 17 00:00:00 2001
From: Lingnan Wu <wulingnan@gmail.com>
Date: Tue, 7 May 2013 16:16:15 +0200
Subject: [PATCH] add jslint test in testXHTML.

---
 product/ERP5/tests/testXHTML.py | 58 +++++++++++++++++++++++++++++++--
 1 file changed, 55 insertions(+), 3 deletions(-)

diff --git a/product/ERP5/tests/testXHTML.py b/product/ERP5/tests/testXHTML.py
index a0b67bb455..6728638e9c 100644
--- a/product/ERP5/tests/testXHTML.py
+++ b/product/ERP5/tests/testXHTML.py
@@ -32,6 +32,7 @@ import os
 import popen2
 import urllib
 
+from subprocess import Popen, PIPE
 from Testing import ZopeTestCase
 from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
 from Products.ERP5 import __file__ as ERP5PackagePath
@@ -96,7 +97,7 @@ class TestXHTML(ERP5TypeTestCase):
       'erp5_jquery',
       'erp5_web',
       'erp5_dms',
-
+      'erp5_email_reader',
       'erp5_commerce',
       'erp5_credential',
 
@@ -130,6 +131,27 @@ class TestXHTML(ERP5TypeTestCase):
       'erp5_trade_proxy_field_legacy', # it is necessary until all bt are well
                                        # reviewed. Many bt like erp5_project are
                                        # using obsolete field library of trade
+      'erp5_xhtml_style',
+      'erp5_jquery_plugin_svg_editor',
+      'erp5_jquery_plugin_spinbtn',
+      'erp5_jquery_plugin_jquerybbq',
+      'erp5_jquery_plugin_svgicon',
+      'erp5_jquery_plugin_jgraduate',
+      'erp5_jquery_plugin_hotkey',
+      'erp5_jquery_plugin_elastic',
+      'erp5_jquery_plugin_colorpicker',
+      'erp5_jquery_plugin_jqchart',
+      'erp5_jquery_plugin_sheet',
+      'erp5_jquery_plugin_mbmenu',
+      'erp5_jquery_plugin_wdcalendar',
+      'erp5_xinha_editor',
+      'erp5_svg_editor',
+      'erp5_jquery_sheet_editor',
+      'erp5_web_ung_core',
+      'erp5_web_ung_theme',
+      'erp5_web_ung_role',
+      'erp5_ui_test',
+      'erp5_web_ung_ui_test'
     )
 
   def afterSetUp(self):
@@ -145,7 +167,8 @@ class TestXHTML(ERP5TypeTestCase):
     portal_preferences = getToolByName(self.portal, 'portal_preferences')
     portal_workflow = getToolByName(self.portal, 'portal_workflow')
     default_site_preference = portal_preferences.default_site_preference
-    portal_workflow.doActionFor(default_site_preference, 'enable_action')
+    if self.portal.portal_workflow.isTransitionPossible(default_site_preference, 'enable'):
+      default_site_preference.enable()
 
   def changeSkin(self, skin_name):
     """
@@ -257,6 +280,36 @@ class TestXHTML(ERP5TypeTestCase):
                      "Repeated listbox selection names:\n" +
                      portal_skins.SkinsTool_checkDuplicateSelectionName())
     
+  def test_javascript_lint(self):
+    skins_tool = self.portal.portal_skins
+    path_list = []
+    for script_path, script in skins_tool.ZopeFind(
+              skins_tool, obj_metatypes=['File','DTML Method','DTML Document'], search_sub=1):
+      is_required_check_path = True
+      ignore_bts = ['erp5_jquery','erp5_fckeditor','erp5_xinha_editor']
+      ignore_files = ['require.js','require.min.js','wz_dragdrop.js']
+      if script_path.endswith('.js'):
+        for ignore_bt_name in ignore_bts:
+          if  script_path.startswith(ignore_bt_name):
+            is_required_check_path = False
+        for ignore_file in ignore_files:
+          if  script_path.endswith(ignore_file):
+            is_required_check_path = False
+        if is_required_check_path:
+          path_list.append(script_path)
+    def jsl(check_path):
+      body = self.publish(check_path).getBody()
+      try:
+        stdout, stderr = Popen(['jsl', '-stdin', '-nologo', '-nosummary'],
+                               stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True).communicate(body)
+      except OSError, e:
+        raise OSError, '%r\n%r' % (os.environ, e)
+      self.assertEquals(stdout, '', 'jsl result of %s : %s' % (check_path, stdout))
+    portal_skins_path = '%s/portal_skins' % self.portal.getId()
+    for path in path_list:
+      check_path = '%s/%s' % (portal_skins_path, path)
+      jsl(check_path)
+
   def test_PythonScriptSyntax(self):
     """ 
     Check that Python Scripts syntax is correct.
@@ -586,7 +639,6 @@ def testPortalTypeViewRecursivly(validator, module_id, business_template_info,
                        base_path=next_base_path,
                        tested_portal_type_list=tested_portal_type_list)
 
-
 def addTestMethodDynamically(validator, target_business_templates):
   from Products.ERP5.tests.utils import BusinessTemplateInfoTar
   from Products.ERP5.tests.utils import BusinessTemplateInfoDir
-- 
2.30.9