UNPKG

siesta-lite

Version:

Stress-free JavaScript unit testing and functional testing tool, works in NodeJS and browsers

400 lines (301 loc) 13.3 kB
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>The source code</title> <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" /> <script type="text/javascript" src="../resources/prettify/prettify.js"></script> <style type="text/css"> .highlight { display: block; background-color: #ddd; } </style> <script type="text/javascript"> function highlight() { document.getElementById(location.hash.replace(/#/, "")).className = "highlight"; } </script> </head> <body onload="prettyPrint(); highlight();"> <pre class="prettyprint lang-js">/* Siesta 5.6.1 Copyright(c) 2009-2022 Bryntum AB https://bryntum.com/contact https://bryntum.com/products/siesta/license */ Ext.define(&#39;Siesta.Project.Browser.UI.ViewportController&#39;, { extend : &#39;Ext.app.ViewController&#39;, alias : &#39;controller.viewport&#39;, requires : [ &#39;Siesta.Project.Browser.UI.TestGridContextMenu&#39;, &#39;Ext.window.Toast&#39; ], mixins : [ &#39;Siesta.Project.Browser.UI.CanCopyToClipboard&#39; ], control : { testgrid : { selectionchange : &#39;onTestGridSelectionChange&#39;, checkchange : &#39;onTestGridCheckChange&#39;, itemcontextmenu : &#39;onTestFileContextMenu&#39;, itemdblclick : &#39;onTestFileDoubleClick&#39;, itemclick : &#39;onTestFileClick&#39;, resize : &#39;onTestGridResize&#39;, optionchange : &#39;onTestGridOptionChange&#39;, buttonclick : &#39;onTestGridToolbarClick&#39;, framesizechange : &#39;onFrameSizeChange&#39; }, &#39;testnamecolumn treefilter&#39; : { change : { fn : &#39;onFilterChange&#39;, buffer : 300 } }, &#39;testgridcontextmenu #uncheckOthers&#39; : { click : &#39;uncheckOthers&#39; }, &#39;testgridcontextmenu #runThis&#39; : { click : &#39;runThisFile&#39; }, &#39;testgridcontextmenu #uncheckAll&#39; : { click : &#39;uncheckAll&#39; }, &#39;testgridcontextmenu #checkAll&#39; : { click : &#39;checkAll&#39; }, &#39;testgridcontextmenu #expandAll&#39; : { click : &#39;expandAll&#39; }, &#39;testgridcontextmenu #collapseAll&#39; : { click : &#39;collapseAll&#39; }, &#39;testgridcontextmenu #filterToCurrentGroup&#39; : { click : &#39;filterToCurrentGroup&#39; }, &#39;testgridcontextmenu #filterToFailed&#39; : { click : &#39;filterToFailed&#39; }, &#39;testgridcontextmenu #viewSource&#39; : { click : &#39;viewSource&#39; }, &#39;testgridcontextmenu #linkSelect&#39; : { click : &#39;linkSelect&#39; }, &#39;testgridcontextmenu #linkFilterAutoLaunch&#39; : { click : &#39;linkFilterAutoLaunch&#39; }, resultpanel : { optionchange : &#39;onResultPanelOptionChange&#39;, viewdomchange : &#39;onDomPanelVisibilityChange&#39;, runbuttonclick : &#39;runTest&#39; } }, disableRunButtonTimeout : null, disableRunButtonInterval : 150, onFilterChange : function () { var viewport = this.getView(); viewport.saveState() }, filterToFailed : function () { var viewport = this.getView(); var filter = [] viewport.forEachTestFile(function (testFileRecord) { var test = testFileRecord.get(&#39;test&#39;) if (test &amp;&amp; test.isFailed()) filter.push(testFileRecord.get(&#39;title&#39;)) }) if (filter.length) viewport.slots.filesTree.setFilterValue(filter.join(&#39; | &#39;)) }, filterToCurrentGroup : function () { var viewport = this.getView(); var desc = viewport.currentFile.get(&#39;descriptor&#39;) if (desc.parent) viewport.slots.filesTree.setFilterValue(desc.parent.group + &#39;&gt;&#39;) }, // Test Grid events onTestGridSelectionChange : function (selModel, selectedRecords) { if (selectedRecords.length) { var viewport = this.getView(); var testFile = selectedRecords[0] var test = testFile.get(&#39;test&#39;) if (test) { // magic global for users to ease access to the currently selected tests T = test viewport.slots.resultPanel.showTest(test, testFile.get(&#39;assertionsStore&#39;)) } if (testFile.isLeaf()) { Ext.History.add(testFile.data.url); } } }, onTestGridCheckChange : function (testFile, checked) { var viewport = this.getView(); viewport.setNodeChecked(testFile, checked) }, onTestFileContextMenu : function (view, testFile, el, index, event) { var viewport = this.getView(); if (viewport.isReadOnlyReport) return viewport.currentFile = testFile if (!viewport.contextMenu) { viewport.contextMenu = new Siesta.Project.Browser.UI.TestGridContextMenu(); } viewport.contextMenu.showAt(event.getXY()); event.preventDefault(); }, onTestFileDoubleClick : function (view, testFile) { var viewport = this.getView(); if (viewport.isReadOnlyReport) return var testsStore = viewport.testsStore if (testsStore.isTreeFiltered() &amp;&amp; !testFile.isLeaf()) { var childDesc = [] testFile.cascadeBy(function (node) { if (node != testFile &amp;&amp; node.isLeaf() &amp;&amp; testsStore.isNodeFilteredIn(node)) childDesc.push(node.get(&#39;descriptor&#39;)) }) viewport.project.launch(childDesc); } else viewport.launchTest(testFile); }, onTestFileClick : function (view, testFile, p3, p4, event) { var viewport = this.getView(); if (viewport.isReadOnlyReport) return var referenceUrl = viewport.project.getDescriptorConfig(testFile.get(&#39;descriptor&#39;), &#39;referenceUrl&#39;) if (referenceUrl &amp;&amp; event.ctrlKey) { var popup = window.open(referenceUrl, &quot;_blank&quot;) if (!popup) Ext.toast(&quot;Popups are disabled in the browser&quot;, &quot;Can&#39;t open new tab&quot;) } }, onTestGridResize : function () { // preserve min width of the assertion grid this.getView().slots.resultPanel.ensureLayout(); }, onTestGridOptionChange : function (component, optionName, optionValue) { var viewport = this.getView(); viewport.setOption(optionName, optionValue) viewport.saveState() }, onResultPanelOptionChange : function (component, optionName, optionValue) { var viewport = this.getView(), test = viewport.slots.resultPanel.test; viewport.setOption(optionName, optionValue) viewport.saveState(); // If active test is running, update its simulator settings if (test) { var speedName; switch(optionName) { case &#39;mouseSimSlow&#39;: speedName = &#39;slow&#39;; break; case &#39;mouseSimFast&#39;: speedName = &#39;speedRun&#39;; break; case &#39;mouseSimFastest&#39;: speedName = &#39;turboMode&#39;; break; default: throw new Error(&#39;Wrong option name: &#39; + optionName); } test.simulator.setSpeed(speedName); } }, onTestGridToolbarClick : function (hdr, button, action) { var viewport = this.getView(); switch (action) { case &#39;run-checked&#39;: viewport.runChecked(); break; case &#39;run-failed&#39;: viewport.runFailed(); break; case &#39;run-all&#39;: viewport.runAll(); break; // note, that this button does not exists case &#39;stop&#39;: viewport.stopSuite(button); break; } }, onFrameSizeChange : function(slider, width, height, landscape) { var viewport = this.getView(); if (!landscape) { var w = width; width = height; height = w; } $(&#39;.tr-iframe&#39;).width(width); $(&#39;.tr-iframe&#39;).height(height); viewport.project.viewportHeight = height; viewport.project.viewportWidth = width; }, // EOF Test Grid events // Test Grid Context Menu events uncheckOthers : function () { var viewport = this.getView(); var currentFile = viewport.currentFile viewport.uncheckAllExcept(currentFile) viewport.setNodeChecked(currentFile, true) }, linkFilterAutoLaunch : function () { var viewport = this.getView(); var currentFile = viewport.currentFile var match = /([^\/]*)$/.exec(currentFile.get(&#39;descriptor&#39;).url) var url = location.protocol + &#39;//&#39; + location.host + location.pathname + &#39;?&#39; + &#39;filter=&#39; + encodeURIComponent(match[ 1 ]) + &#39;&amp;autolaunch=1&#39; var success = this.copyToClipboard(url) if (success) { Ext.toast(&quot;Url copied to clipboard&quot;, &#39;Success&#39;) } else { Ext.Msg.show({ message : &#39;Please select &amp; copy this url manually:&lt;br&gt;&#39; + url, title : &#39;Copy to clipboard failed&#39;, modal : false }) } }, linkSelect : function () { var viewport = this.getView(); var currentFile = viewport.currentFile var url = location.protocol + &#39;//&#39; + location.host + location.pathname + &#39;#&#39; + currentFile.get(&#39;descriptor&#39;).url var success = this.copyToClipboard(url) if (success) { Ext.toast(&quot;Url copied to clipboard&quot;, &#39;Success&#39;) } else { Ext.Msg.show({ message : &#39;Please select &amp; copy this url manually:&lt;br&gt;&#39; + url, title : &#39;Copy to clipboard failed&#39;, modal : false }) } }, runThisFile : function () { var viewport = this.getView(); viewport.project.launch([ viewport.currentFile.get(&#39;descriptor&#39;) ]) }, uncheckAll : function () { var viewport = this.getView(); viewport.uncheckAllExcept() }, checkAll : function () { var viewport = this.getView(); viewport.testsStore.forEach(function (node) { viewport.setNodeChecked(node, true, true) }) }, expandAll : function () { var viewport = this.getView(); viewport.slots.filesTree.expandAll() }, collapseAll : function () { var viewport = this.getView(); viewport.slots.filesTree.collapseAll() }, viewSource : function() { var testRecord = this.getView().currentFile; var test = testRecord.get(&#39;test&#39;); var win = window.open(&#39;&#39;, &#39;siesta-source&#39;); var head = win.document.documentElement.getElementsByTagName(&#39;head&#39;)[0]; var body = win.document.body; head.innerHTML = &#39;&lt;title&gt;&#39; + testRecord.get(&#39;title&#39;) + &#39;&lt;/title&gt;&#39; if (test) { body.innerHTML = &#39;&lt;pre&gt;&#39; + test.getSource() + &#39;&lt;/pre&gt;&#39;; } else { $.ajax(testRecord.get(&#39;url&#39;), { success: function(text) { body.innerHTML = &#39;&lt;pre&gt;&#39; + text + &#39;&lt;/pre&gt;&#39;; } }); } }, // EOF Test Grid Context Menu events // Result Panel events onDomPanelVisibilityChange : function (g, value) { var viewport = this.getView(); viewport.setOption(&#39;viewDOM&#39;, value); viewport.saveState(); }, runTest : function () { // launch the &quot;viewport.runTest();&quot; immediately, but ignore any further calls to this method // during the following 100ms var me = this if (me.disableRunButtonTimeout != null) return me.disableRunButtonTimeout = setTimeout(function () { me.disableRunButtonTimeout = null }, me.disableRunButtonInterval) var viewport = me.getView(); viewport.runTest(); } // EOF Result Panel events }) </pre> </body> </html>