From 7b5083e3371f1e433bd0a01e3a688145b5bd6887 Mon Sep 17 00:00:00 2001 From: Georgios Dagkakis <georgios.dagkakis@nexedi.com> Date: Thu, 3 Dec 2015 13:06:52 +0000 Subject: [PATCH] live_test: use renderjs to refresh the view of live tests --- .../erp5_dhtml_style/live_test.js.xml | 116 -------- .../ComponentTool_viewLiveTestDialog.xml | 1 + .../test_watcher_gadget.xml | 255 ++++++++++++++++++ .../erp5_core/gadget_live_tests.html.xml | 76 ++++++ .../erp5_core/gadget_live_tests.js.xml | 174 ++++++++++++ 5 files changed, 506 insertions(+), 116 deletions(-) delete mode 100644 bt5/erp5_dhtml_style/SkinTemplateItem/portal_skins/erp5_dhtml_style/live_test.js.xml create mode 100644 product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ComponentTool_viewLiveTestDialog/test_watcher_gadget.xml create mode 100644 product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/gadget_live_tests.html.xml create mode 100644 product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/gadget_live_tests.js.xml diff --git a/bt5/erp5_dhtml_style/SkinTemplateItem/portal_skins/erp5_dhtml_style/live_test.js.xml b/bt5/erp5_dhtml_style/SkinTemplateItem/portal_skins/erp5_dhtml_style/live_test.js.xml deleted file mode 100644 index b9c88bbb34..0000000000 --- a/bt5/erp5_dhtml_style/SkinTemplateItem/portal_skins/erp5_dhtml_style/live_test.js.xml +++ /dev/null @@ -1,116 +0,0 @@ -<?xml version="1.0"?> -<ZopeData> - <record id="1" aka="AAAAAAAAAAE="> - <pickle> - <global name="File" module="OFS.Image"/> - </pickle> - <pickle> - <dictionary> - <item> - <key> <string>_Cacheable__manager_id</string> </key> - <value> <string>http_cache</string> </value> - </item> - <item> - <key> <string>_EtagSupport__etag</string> </key> - <value> <string>ts32869305.67</string> </value> - </item> - <item> - <key> <string>__name__</string> </key> - <value> <string>live_test.js</string> </value> - </item> - <item> - <key> <string>content_type</string> </key> - <value> <string>application/x-javascript</string> </value> - </item> - <item> - <key> <string>data</string> </key> - <value> <string encoding="cdata"><![CDATA[ - -var live_test_js_already_loaded = false;\n -\n -$(document).ready(function(){\n -\n - if (live_test_js_already_loaded) {\n - console.error("Live test already loaded");\n - return;\n - }\n - live_test_js_already_loaded = true;\n -\n -\n - var my_url_run_test = $(document)[0].baseURI + \'runLiveTest\';\n - var my_url_read_test = $(document)[0].baseURI + \'readTestOutput\';\n - var paused = false;\n -\n - if (! $("*[name=\'field_your_test\']").val() ){\n - // not in proper page no need to continue\n - return ;\n - }\n - var data_textarea = $("*[name=\'field_your_text_output\']");\n -\n - data_textarea.val("");\n -\n - //launch unit test\n - var continue_loop = true;\n - $.get(my_url_run_test,\n - {test_list: $("*[name=\'field_your_test\']").val(),\n - run_only: $("*[name=\'field_your_run_only\']").val(),\n - debug: $("*[name=\'field_your_debug\']").is(":checked") ? 1 : 0,\n - verbose: $("*[name=\'field_your_verbose\']").is(":checked") ? 1: 0\n - },\n - function(data) {\n - continue_loop = false;\n - });\n - var last_call = false;\n - var data_size = 0;\n - get_data = function() {\n - return $.get(my_url_read_test,\n - {position : data_size},\n - function(data){\n - if ( !paused && data.length !== undefined ) {\n - data_size = data_size + data.length;\n - data_textarea.val( data_textarea.val() + data);\n - data_textarea[0].scrollTop = data_textarea[0].scrollHeight;\n - }\n - if (continue_loop) {\n - setTimeout(get_data, 1000);\n - }\n - if (!continue_loop) {\n - if (!last_call) {\n - last_call = true;\n - setTimeout(get_data, 1000);\n - }\n - }\n - });\n - };\n -\n - // Not perfect, but the timeout should clearly reduce risk of getting empty result\n - // while the runUnitTest command had no time yet to reset global variable\n - // on ERP5 side\n - setTimeout(get_data,2000);\n -\n - // pause refreshing if user scrolls in the textarea field\n - // reactivate refreshing when users scrolls back to bottom\n - data_textarea.scroll(function() {\n - paused = data_textarea.scrollTop() + data_textarea.height() != data_textarea[0].scrollHeight;\n - });\n -\n -}); - -]]></string> </value> - </item> - <item> - <key> <string>precondition</string> </key> - <value> <string></string> </value> - </item> - <item> - <key> <string>size</string> </key> - <value> <int>2082</int> </value> - </item> - <item> - <key> <string>title</string> </key> - <value> <string></string> </value> - </item> - </dictionary> - </pickle> - </record> -</ZopeData> diff --git a/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ComponentTool_viewLiveTestDialog.xml b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ComponentTool_viewLiveTestDialog.xml index 39c261e102..3adb2b1a8f 100644 --- a/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ComponentTool_viewLiveTestDialog.xml +++ b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ComponentTool_viewLiveTestDialog.xml @@ -76,6 +76,7 @@ <value> <list> <string>your_text_output</string> + <string>test_watcher_gadget</string> </list> </value> </item> diff --git a/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ComponentTool_viewLiveTestDialog/test_watcher_gadget.xml b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ComponentTool_viewLiveTestDialog/test_watcher_gadget.xml new file mode 100644 index 0000000000..10e7f8f451 --- /dev/null +++ b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/ComponentTool_viewLiveTestDialog/test_watcher_gadget.xml @@ -0,0 +1,255 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="GadgetField" module="Products.ERP5Form.GadgetField"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>id</string> </key> + <value> <string>test_watcher_gadget</string> </value> + </item> + <item> + <key> <string>message_values</string> </key> + <value> + <dictionary> + <item> + <key> <string>external_validator_failed</string> </key> + <value> <string>The input failed the external validator.</string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>overrides</string> </key> + <value> + <dictionary> + <item> + <key> <string>alternate_name</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>css_class</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>data_url</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>default</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>display_maxwidth</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>display_width</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>editable</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>enabled</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_validator</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>extra</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>gadget_url</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>hidden</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>input_type</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>js_sandbox</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>tales</string> </key> + <value> + <dictionary> + <item> + <key> <string>alternate_name</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>css_class</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>data_url</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>default</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>display_maxwidth</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>display_width</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>editable</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>enabled</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>external_validator</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>extra</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>gadget_url</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + <item> + <key> <string>hidden</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>input_type</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>js_sandbox</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string></string> </value> + </item> + </dictionary> + </value> + </item> + <item> + <key> <string>values</string> </key> + <value> + <dictionary> + <item> + <key> <string>alternate_name</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>css_class</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>data_url</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>default</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>display_maxwidth</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>display_width</string> </key> + <value> <int>20</int> </value> + </item> + <item> + <key> <string>editable</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>enabled</string> </key> + <value> <int>1</int> </value> + </item> + <item> + <key> <string>external_validator</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>extra</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>gadget_url</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>hidden</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>input_type</string> </key> + <value> <string>text</string> </value> + </item> + <item> + <key> <string>js_sandbox</string> </key> + <value> <string></string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <string>Test Watcher</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="TALESMethod" module="Products.Formulator.TALESField"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_text</string> </key> + <value> <string>python: field.restrictedTraverse(\'gadget_live_tests.html\').absolute_url()</string> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/gadget_live_tests.html.xml b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/gadget_live_tests.html.xml new file mode 100644 index 0000000000..8b079f5456 --- /dev/null +++ b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/gadget_live_tests.html.xml @@ -0,0 +1,76 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_bind_names</string> </key> + <value> + <object> + <klass> + <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> + </klass> + <tuple/> + <state> + <dictionary> + <item> + <key> <string>_asgns</string> </key> + <value> + <dictionary> + <item> + <key> <string>name_subpath</string> </key> + <value> <string>traverse_subpath</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </state> + </object> + </value> + </item> + <item> + <key> <string>_text</string> </key> + <value> <unicode encoding="cdata"><![CDATA[ + +<html>\n + <head>\n + <script src="jio_sha256.amd.js" type="text/javascript"></script>\n + <script src="jio.js" type="text/javascript"></script>\n + <script src="gadget_live_tests.js" type="text/javascript"></script>\n + </head>\n +\n + <body>\n +\n + </body>\n +</html> + +]]></unicode> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>expand</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_live_tests.html</string> </value> + </item> + <item> + <key> <string>output_encoding</string> </key> + <value> <string>utf-8</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <unicode></unicode> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/gadget_live_tests.js.xml b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/gadget_live_tests.js.xml new file mode 100644 index 0000000000..7c8fe2007a --- /dev/null +++ b/product/ERP5/bootstrap/erp5_core/SkinTemplateItem/portal_skins/erp5_core/gadget_live_tests.js.xml @@ -0,0 +1,174 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="ZopePageTemplate" module="Products.PageTemplates.ZopePageTemplate"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_bind_names</string> </key> + <value> + <object> + <klass> + <global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/> + </klass> + <tuple/> + <state> + <dictionary> + <item> + <key> <string>_asgns</string> </key> + <value> + <dictionary> + <item> + <key> <string>name_subpath</string> </key> + <value> <string>traverse_subpath</string> </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </state> + </object> + </value> + </item> + <item> + <key> <string>_text</string> </key> + <value> <unicode encoding="cdata"><![CDATA[ + +/*global window, rJS, jIO, RSVP, location, document , FormData, console */\n +/*jslint indent: 2, maxlen: 80, nomen: true */\n +(function (rJS, jIO, RSVP, window, document, FormData, console) {\n + "use strict";\n + var live_test_js_already_loaded = false,\n + my_url_run_test = document.baseURI + \'runLiveTest\',\n + my_url_read_test = document.baseURI + \'readTestOutput\',\n + paused = false,\n + data_textarea =\n + document.querySelector("[name=\'field_your_text_output\']"),\n + continue_loop = true,\n + tests_still_running = true,\n + last_call = false,\n + data_size = 0,\n + form_data = new FormData();\n +\n + if (live_test_js_already_loaded) {\n + console.error("Live test already loaded");\n + return;\n + }\n + live_test_js_already_loaded = true;\n +\n + data_textarea.value = "";\n +\n + form_data.append("test_list",\n + document.querySelector("[name=\'field_your_test\']").value);\n + form_data.append("run_only",\n + document.querySelector("[name=\'field_your_run_only\']").value);\n + form_data.append("debug",\n + document.querySelector("[name=\'field_your_debug\']").checked ===\n + true ? 1 : 0);\n + form_data.append("verbose",\n + document.querySelector("[name=\'field_your_verbose\']").checked ===\n + true ? 1 : 0);\n +\n + // if the user scrolls in the window we do not want it to be updated.\n + // so set paused flag to false\n + function scrollFunction() {\n + paused = data_textarea.scrollHeight - data_textarea.scrollTop !==\n + data_textarea.clientHeight;\n + // if the service was paused when the tests are finished,\n + // set continue_loop to false\n + if (!paused && !tests_still_running) {\n + continue_loop = false;\n + }\n + }\n +\n + data_textarea.onscroll = scrollFunction;\n +\n + rJS(window).declareService(function () {\n + var queue = new RSVP.Queue();\n +\n + function readDataExamine() {\n + queue.push(function () {\n + return jIO.util.ajax({\n + type: "POST",\n + url: my_url_run_test,\n + data: form_data\n + });\n + }).push(function () {\n + tests_still_running = false;\n + // set continue_loop to false ONLY IF the test is not paused.\n + // Otherwise it will be set when user scrolls to the end\n + if (!paused) {\n + continue_loop = false;\n + }\n + });\n + }\n + return queue.push(function () {\n + return readDataExamine();\n + });\n + }).declareService(function () {\n + var queue = new RSVP.Queue();\n +\n + function getDataExamine() {\n + queue.push(function () {\n + return jIO.util.ajax({\n + type: "POST",\n + url: my_url_read_test\n + });\n + }).push(function (evt) {\n + var data = evt.target.response;\n + // cut the characters that are already presented\n + data = data.substring(data_size);\n + if ((!paused || last_call) && data.length !== undefined) {\n + // to put the data in the correct place\n + data_size = data_size + data.length;\n + // add the new data\n + data_textarea.value = data_textarea.value + data;\n + data_textarea.scrollTop = data_textarea.scrollHeight;\n + }\n + return RSVP.delay(1000);\n + }).push(function () {\n + if (continue_loop) {\n + return getDataExamine();\n + }\n + if (!continue_loop) {\n + if (!last_call) {\n + last_call = true;\n + return getDataExamine();\n + }\n + }\n + });\n + }\n + return queue.push(function () {\n + return getDataExamine();\n + });\n + });\n +}(rJS, jIO, RSVP, window, document, FormData, console)); + +]]></unicode> </value> + </item> + <item> + <key> <string>content_type</string> </key> + <value> <string>text/html</string> </value> + </item> + <item> + <key> <string>expand</string> </key> + <value> <int>0</int> </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>gadget_live_tests.js</string> </value> + </item> + <item> + <key> <string>output_encoding</string> </key> + <value> <string>utf-8</string> </value> + </item> + <item> + <key> <string>title</string> </key> + <value> <unicode></unicode> </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> -- 2.30.9