From 5f738b0be50d9986249a511e8183fbbed8b49c8c Mon Sep 17 00:00:00 2001 From: Rajesh Taneja Date: Wed, 8 Jun 2016 12:23:11 +0800 Subject: [PATCH 1/6] MDL-54589 behat: Trigger change event after selecting option After selecting option, some browsers need explicit change event --- lib/behat/form_field/behat_form_select.php | 5 ++--- mod/assign/tests/behat/quickgrading.feature | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/behat/form_field/behat_form_select.php b/lib/behat/form_field/behat_form_select.php index 8d6d9aa61e2..4f7a34f3d06 100644 --- a/lib/behat/form_field/behat_form_select.php +++ b/lib/behat/form_field/behat_form_select.php @@ -71,10 +71,9 @@ class behat_form_select extends behat_form_field { // Wait for all the possible AJAX requests that have been // already triggered by selectOption() to be finished. if ($this->running_javascript()) { - // Trigger change event as this is needed by some drivers (Phantomjs). Don't do it for + // Trigger change event as this is needed by some drivers (Phantomjs, Mac-FF). Don't do it for // Singleselect as this will cause multiple event fire and lead to race-around condition. - $browser = \Moodle\BehatExtension\Driver\MoodleSelenium2Driver::getBrowser(); - if (!$singleselect && ($browser == 'phantomjs')) { + if (!$singleselect) { $script = "Syn.trigger('change', {}, {{ELEMENT}})"; try { $this->session->getDriver()->triggerSynScript($this->field->getXpath(), $script); diff --git a/mod/assign/tests/behat/quickgrading.feature b/mod/assign/tests/behat/quickgrading.feature index 84af9b40015..85a6aefe596 100644 --- a/mod/assign/tests/behat/quickgrading.feature +++ b/mod/assign/tests/behat/quickgrading.feature @@ -40,6 +40,7 @@ Feature: In an assignment, teachers grade multiple students on one page And I follow "Test assignment name" And I follow "View all submissions" And I click on "Grade" "link" in the "Student 1" "table_row" + And I wait until the page is ready And I press "Save changes" And I press "Ok" And I click on "Edit settings" "link" From 8e6783526eea90e1949809adc6a5ca021413b8d9 Mon Sep 17 00:00:00 2001 From: Rajesh Taneja Date: Wed, 8 Jun 2016 13:16:43 +0800 Subject: [PATCH 2/6] MDL-54589 group: ensure loader is available before remobing --- group/clientlib.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/group/clientlib.js b/group/clientlib.js index ca2249594ab..8255c4442b1 100644 --- a/group/clientlib.js +++ b/group/clientlib.js @@ -208,7 +208,9 @@ var removeLoaderImgs = function (elClass, parentId) { var parentEl = document.getElementById(parentId); if (parentEl) { var loader = document.getElementById("loaderImg"); - parentEl.removeChild(loader); + if (loader) { + parentEl.removeChild(loader); + } } }; From 86e079521bdc54b7df917f0267b6c5a21169fae0 Mon Sep 17 00:00:00 2001 From: Rajesh Taneja Date: Thu, 9 Jun 2016 08:26:50 +0800 Subject: [PATCH 3/6] MDL-54589 behat: Added hack for some OS/browsers --- .../grader/tests/behat/ajax_grader.feature | 3 ++- lib/behat/form_field/behat_form_select.php | 25 +++++++++++++------ lib/tests/behat/behat_general.php | 18 +++++++++++++ .../editpdf/tests/behat/annotate_pdf.feature | 1 + .../tests/behat/group_annotations.feature | 2 ++ mod/quiz/tests/behat/attempt_begin.feature | 4 +++ 6 files changed, 44 insertions(+), 9 deletions(-) diff --git a/grade/report/grader/tests/behat/ajax_grader.feature b/grade/report/grader/tests/behat/ajax_grader.feature index d341ffdd0d9..b60f4643197 100644 --- a/grade/report/grader/tests/behat/ajax_grader.feature +++ b/grade/report/grader/tests/behat/ajax_grader.feature @@ -47,7 +47,8 @@ Feature: Using the AJAX grading feature of Grader report to update grades and fe And the following config values are set as admin: | grade_report_showaverages | 0 | | grade_report_enableajax | 1 | - + # Floating headers can fail to set value on some OS/Browsers, so do this test on large screens. + And I change window size to "large" @javascript Scenario: Use the grader report without editing, with AJAX on and quick feedback off diff --git a/lib/behat/form_field/behat_form_select.php b/lib/behat/form_field/behat_form_select.php index 4f7a34f3d06..0b16552bb72 100644 --- a/lib/behat/form_field/behat_form_select.php +++ b/lib/behat/form_field/behat_form_select.php @@ -71,15 +71,24 @@ class behat_form_select extends behat_form_field { // Wait for all the possible AJAX requests that have been // already triggered by selectOption() to be finished. if ($this->running_javascript()) { - // Trigger change event as this is needed by some drivers (Phantomjs, Mac-FF). Don't do it for - // Singleselect as this will cause multiple event fire and lead to race-around condition. + // Trigger change event and click on first skip link, as some OS/browsers (Phantomjs, Mac-FF), + // don't close select option field and trigger event. if (!$singleselect) { - $script = "Syn.trigger('change', {}, {{ELEMENT}})"; - try { - $this->session->getDriver()->triggerSynScript($this->field->getXpath(), $script); - } catch (Exception $e) { - // No need to do anything if element has been removed by JS. - // This is possible when inline editing element is used. + $dialoguexpath = "//div[contains(concat(' ', normalize-space(@class), ' '), ' moodle-dialogue-focused ')]"; + if (!$node = $this->session->getDriver()->find($dialoguexpath)) { + $script = "Syn.trigger('change', {}, {{ELEMENT}})"; + try { + $this->session->getDriver()->triggerSynScript($this->field->getXpath(), $script); + $this->session->getDriver()->click('//body//div[@class="skiplinks"]'); + } catch (\Exception $e) { + return; + } + } else { + try { + $this->session->getDriver()->click($dialoguexpath); + } catch (\Exception $e) { + return; + } } } $this->session->wait(behat_base::TIMEOUT * 1000, behat_base::PAGE_READY_JS); diff --git a/lib/tests/behat/behat_general.php b/lib/tests/behat/behat_general.php index 46ce3ef9aea..07bf1136061 100644 --- a/lib/tests/behat/behat_general.php +++ b/lib/tests/behat/behat_general.php @@ -1539,4 +1539,22 @@ class behat_general extends behat_base { $node->keyPress($char, $modifier); $node->keyUp($char, $modifier); } + + /** + * Press tab key on a specific element. + * + * @When /^I press tab key in "(?P(?:[^"]|\\")*)" "(?P[^"]*)"$/ + * @param string $element Element we look for + * @param string $selectortype The type of what we look for + * @throws DriverException + * @throws ExpectationException + */ + public function i_post_tab_key_in_element($element, $selectortype) { + if (!$this->running_javascript()) { + throw new DriverException('Tab press step is not available with Javascript disabled'); + } + // Gets the node based on the requested selector type and locator. + $node = $this->get_selected_node($selectortype, $element); + $this->getSession()->getDriver()->post_key("\xEE\x80\x84", $node->getXpath()); + } } diff --git a/mod/assign/feedback/editpdf/tests/behat/annotate_pdf.feature b/mod/assign/feedback/editpdf/tests/behat/annotate_pdf.feature index 9cab348cf75..98c0a3aca45 100644 --- a/mod/assign/feedback/editpdf/tests/behat/annotate_pdf.feature +++ b/mod/assign/feedback/editpdf/tests/behat/annotate_pdf.feature @@ -129,6 +129,7 @@ Feature: In an assignment, teacher can annotate PDF files during grading And I follow "View all submissions" And I click on "Edit" "link" in the "Student 2" "table_row" And I click on "Grade" "link" in the "Student 2" "table_row" + And I wait until the page is ready And I click on ".linebutton" "css_element" And I draw on the pdf And I press "Save changes" diff --git a/mod/assign/feedback/editpdf/tests/behat/group_annotations.feature b/mod/assign/feedback/editpdf/tests/behat/group_annotations.feature index 4292b101855..787bd4e6752 100644 --- a/mod/assign/feedback/editpdf/tests/behat/group_annotations.feature +++ b/mod/assign/feedback/editpdf/tests/behat/group_annotations.feature @@ -51,7 +51,9 @@ Feature: In a group assignment, teacher can annotate PDF files for all users And I follow "Test assignment name" And I follow "View all submissions" And I click on "Grade" "link" in the "Submitted for grading" "table_row" + And I wait until the page is ready And I click on ".navigate-next-button" "css_element" + And I wait until the page is ready And I click on ".stampbutton" "css_element" And I draw on the pdf And I wait until the page is ready diff --git a/mod/quiz/tests/behat/attempt_begin.feature b/mod/quiz/tests/behat/attempt_begin.feature index a2987a8eacc..4561c02f1de 100644 --- a/mod/quiz/tests/behat/attempt_begin.feature +++ b/mod/quiz/tests/behat/attempt_begin.feature @@ -88,6 +88,8 @@ Feature: The various checks that may happen when an attept is started And I should see "The quiz has a time limit of 1 hour. Time will " And I should see "The password entered was incorrect" And I set the field "Quiz password" to "Frog" + # On Mac/FF tab key is needed as text field in dialogue and page have same id. + And I press tab key in "Quiz password" "field" And I press "Start attempt" And I should see "Text of the first question" @@ -110,6 +112,8 @@ Feature: The various checks that may happen when an attept is started And I should see "The quiz has a time limit of 1 hour. Time will " And I should see "The password entered was incorrect" And I set the field "Quiz password" to "Frog" + # On Mac/FF tab key is needed as text field in dialogue and page have same id. + And I press tab key in "Quiz password" "field" And I press "Cancel" Then I should see "Quiz 1 description" And "Attempt quiz now" "button" should be visible From 315c9ba2d4c9e5af3411971d6b17eaa3dce64bb2 Mon Sep 17 00:00:00 2001 From: Rajesh Taneja Date: Tue, 14 Jun 2016 06:37:12 +0800 Subject: [PATCH 4/6] MDL-54589 behat: Don't allow floating headers for behat --- grade/report/grader/tests/behat/ajax_grader.feature | 2 -- .../moodle-gradereport_grader-gradereporttable-debug.js | 5 +++++ .../moodle-gradereport_grader-gradereporttable-min.js | 6 +++--- .../moodle-gradereport_grader-gradereporttable.js | 5 +++++ .../grader/yui/src/gradereporttable/js/floatingheaders.js | 5 +++++ 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/grade/report/grader/tests/behat/ajax_grader.feature b/grade/report/grader/tests/behat/ajax_grader.feature index b60f4643197..71dad25bc17 100644 --- a/grade/report/grader/tests/behat/ajax_grader.feature +++ b/grade/report/grader/tests/behat/ajax_grader.feature @@ -47,8 +47,6 @@ Feature: Using the AJAX grading feature of Grader report to update grades and fe And the following config values are set as admin: | grade_report_showaverages | 0 | | grade_report_enableajax | 1 | - # Floating headers can fail to set value on some OS/Browsers, so do this test on large screens. - And I change window size to "large" @javascript Scenario: Use the grader report without editing, with AJAX on and quick feedback off diff --git a/grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable-debug.js b/grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable-debug.js index bb755769666..c185c233c11 100644 --- a/grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable-debug.js +++ b/grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable-debug.js @@ -402,6 +402,11 @@ FloatingHeaders.prototype = { return this; } + if (M.cfg.behatsiterunning) { + // If the behat site is running we don't want floating elements. + return; + } + // Generate floating elements. this._setupFloatingUserColumn(); this._setupFloatingUserHeader(); diff --git a/grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable-min.js b/grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable-min.js index a151a1bb49d..f81abacb542 100644 --- a/grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable-min.js +++ b/grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable-min.js @@ -1,3 +1,3 @@ -YUI.add("moodle-gradereport_grader-gradereporttable",function(e,t){function i(){i.superclass.constructor.apply(this,arguments)}function l(){}var n={FOOTERTITLE:".avg .header",FOOTERCELLS:"#user-grades .avg .cell",FOOTERROW:"#user-grades .avg",GRADECELL:"td.grade",GRADERTABLE:".gradeparent table",GRADEPARENT:".gradeparent",HEADERCELLS:"#user-grades .heading .cell",HEADERCELL:".gradebook-header-cell",HEADERROW:"#user-grades tr.heading",STUDENTHEADER:"#studentheader",USERCELL:"#user-grades .user.cell",USERMAIL:"#user-grades .useremail"},r={OVERRIDDEN:"overridden",TOOLTIPACTIVE:"tooltipactive"};e.extend(i,e.Base,{_eventHandles:[],graderTable:null,initializer:function(){this.graderRegion=e.one(n.GRADEPARENT),this.graderTable=e.one(n.GRADERTABLE),this.setupFloatingHeaders()},getGradeUserName:function(e){var t=e.ancestor("tr"),n=t.one("th.user .username");return n?n.get("text"):""},getGradeItemName:function(t){var n=e.one("th.item[data-itemid='"+t.getData("itemid")+"']");return n?n.get("text"):""},getGradeFeedback:function(e){return e.getData("feedback")}}),e.namespace("M.gradereport_grader").ReportTable=i,e.namespace("M.gradereport_grader").init=function(t){return new e.M.gradereport_grader.ReportTable(t)};var s="height",o="width",u="offsetWidth",a="offsetHeight",f="moodle-core-grade-report-grader";r.FLOATING="floating",l.ATTRS={},l.prototype={pageHeaderHeight:0,container:null,headerCell:null,headerRow:null,firstUserCell:null,firstNonUserCell:null,firstNonUserCellLeft:0,firstNonUserCellWidth:0,tableFooterRow:null,footerRow:null,gradeItemHeadingContainer:null,userColumnHeader:null,userColumn:null,firstUserCellBottom:0,firstUserCellLeft:0,firstUserCellWidth:0,dockWidth:0,lastUserCellTop:0,floatingHeaderRow:null,_eventHandles:[],setupFloatingHeaders:function(){return this.firstUserCell=e.one(n.USERCELL),this.container=e.one(n.GRADEPARENT),this.firstNonUserCell=e.one(n.GRADECELL),this.firstUserCell?(this._setupFloatingUserColumn(),this._setupFloatingUserHeader(),this._setupFloatingAssignmentHeaders(),this._setupFloatingAssignmentFooter(),this.floatingHeaderRow={},this._setupFloatingLeftHeaders(".controls .controls"),this._setupFloatingLeftHeaders(".range .range"),this._setupFloatingLeftHeaders(n.FOOTERTITLE),this._setupFloatingAssignmentFooterTitle(),this._calculateCellPositions(),this._handleScrollEvent(),this._setupEventHandlers(),e.Global.on("moodle-gradereport_grader:resized",this._handleResizeEvent,this),this):this},_calculateCellPositions:function(){this.headerRowTop=this.headerRow.getY(),this.tableFooterRow&&(this.footerRowPosition=this.tableFooterRow.getY()),this.dockWidth=0;var t=e.one(".has_dock #dock");t&&(this.dockWidth=t.get(u));var r=e.all(n.USERCELL);this.firstUserCellLeft=this.firstUserCell.getX(),this.firstUserCellWidth=this.firstUserCell.get(u),this.firstNonUserCellLeft=this.firstNonUserCell.getX(),this.firstNonUserCellWidth=this.firstNonUserCell.get(u);if(r.size()>1){var i=r.item(1);this.firstUserCellBottom=i.getY()+parseInt(i.getComputedStyle(s),10),this.lastUserCellTop=r.item(r.size()-2).getY()}else{var o=r.item(0);this.lastUserCellTop=o.getY(),this.tableFooterRow?this.firstUserCellBottom=this.footerRowPosition+parseInt(this.tableFooterRow.getComputedStyle(s),10):this.firstUserCellBottom=o.getY()+o.get("offsetHeight")}var f=e.one("header");this.pageHeaderHeight=0;if(f)if(f.getComputedStyle("position")==="fixed")this.pageHeaderHeight=f.get(a);else{var l=e.one(".navbar");l&&l.getComputedStyle("position")==="fixed"&&(this.pageHeaderHeight=l.get(a))}},_getRelativeXY:function(e){return this._getRelativeXYFromXY(e.getX(),e.getY())},_getRelativeXYFromXY:function(e,t){var n=this.container.getXY();return[e-n[0],t-n[1]]},_getRelativeXFromX:function(e){return this._getRelativeXYFromXY(e,0)[0]},_getRelativeYFromY:function(e){return this._getRelativeXYFromXY(0,e)[1]},_getScrollBarHeight:function(){return e.UA.ie&&e.UA.ie>=10?0:e.config.doc.body.scrollWidth>e.config.doc.body.clientWidth?e.DOM.getScrollbarWidth():0},_setupEventHandlers:function(){this._eventHandles.push(e.one(e.config.win).on("scroll",this._handleScrollEvent,this),e.one(e.config.win).on("resize",this._handleResizeEvent,this),e.one(e.config.win).on("orientationchange",this._handleResizeEvent,this),e.Global.on("dock:shown",this._handleResizeEvent,this),e.Global.on("dock:hidden",this._handleResizeEvent,this))},_setupFloatingUserColumn:function(){var t=e.all(n.USERCELL),r=e.Node.create(''),i=this._getRelativeXY(this.firstUserCell);t.each(function(t){var n=t.getComputedStyle(s);if(e.UA.ie!==0){var i=t.get("offsetHeight"),u=parseInt(t.getComputedStyle("marginTop"),10)+parseInt(t.getComputedStyle("marginBottom"),10),a=parseInt(t.getComputedStyle("paddingTop"),10)+parseInt(t.getComputedStyle("paddingBottom"),10),f=parseInt(t.getComputedStyle("borderTopWidth"),10)+parseInt(t.getComputedStyle("borderBottomWidth"),10);n=i-u-a-f}var l=e.Node.create("
");l.set("innerHTML",t.get("innerHTML")).setAttribute("class",t.getAttribute("class")).setAttribute("data-uid",t.ancestor("tr").getData("uid")).setStyles({height:n,width:t.getComputedStyle(o)}),r.appendChild(l)},this),r.setStyles({left:i[0]+"px",position:"absolute",top:i[1]+"px"}),this.graderRegion.append(r),this.userColumn=r},_setupFloatingUserHeader:function(){this.headerRow=e.one(n.HEADERROW),this.headerCell=e.one(n.STUDENTHEADER);var t=e.Node.create(''),r=e.Node.create("
"),i=this._getRelativeXY(this.headerCell)[0],s=this._getRelativeXY(this.headerRow),u=s[0];r.set("innerHTML",this.headerCell.getHTML()).setAttribute("class",this.headerCell.getAttribute("class")).setStyles({width:this.firstUserCell.getComputedStyle(o),left:i-u+"px"}),t.setStyles({left:s[0]+"px",position:"absolute",top:s[1]+"px"}),t.append(r),this.graderRegion.append(t),this.userColumnHeader=t},_setupFloatingAssignmentHeaders:function(){this.headerRow= -e.one("#user-grades tr.heading");var t=e.all("#user-grades tr.heading .cell"),n=e.Node.create(''),r=this._getRelativeXY(this.headerRow),i=0,f=0,l=r[0];t.each(function(t){var r=this._getRelativeXY(t)[0],c=e.Node.create("
");c.append(t.getHTML()).setAttribute("class",t.getAttribute("class")).setData("itemid",t.getData("itemid")).setStyles({height:t.getComputedStyle(s),left:r-l+"px",position:"absolute",width:t.getComputedStyle(o)}),i+=parseInt(t.get(u),10),f=t.get(a),n.appendChild(c)},this),n.setStyles({height:f+"px",left:r[0]+"px",position:"absolute",top:r[1]+"px",width:i+"px"}),this.userColumnHeader.insert(n,"before"),this.gradeItemHeadingContainer=n},_setupFloatingAssignmentFooter:function(){this.tableFooterRow=e.one("#user-grades .avg");if(!this.tableFooterRow)return;var t=this.tableFooterRow.all(".cell"),n=e.Node.create(''),r=0,i=this._getRelativeXY(this.tableFooterRow),f=i[0],l=0;t.each(function(t){var i=e.Node.create("
"),c=this._getRelativeXY(t)[0];i.set("innerHTML",t.getHTML()).setAttribute("class",t.getAttribute("class")).setStyles({height:t.getComputedStyle(s),left:c-f+"px",position:"absolute",width:t.getComputedStyle(o)}),n.append(i),l=t.get(a),r+=parseInt(t.get(u),10)},this),n.setStyles({position:"absolute",left:i[0]+"px",bottom:"1px",height:l+"px",width:r+"px"}),this.graderRegion.append(n),this.footerRow=n},_setupFloatingAssignmentFooterTitle:function(){var e=this.floatingHeaderRow[n.FOOTERTITLE];e&&e.setStyles({bottom:"1px"})},_setupFloatingLeftHeaders:function(t){var n=e.one(t);if(!n)return;var r=e.Node.create(''),i=e.Node.create("
"),s=this._getRelativeXY(n),u=this.firstUserCell.getComputedStyle(o),f=n.get(a);i.set("innerHTML",n.getHTML()).setAttribute("class",n.getAttribute("class")).setStyles({width:u}),r.setStyles({position:"absolute",top:s[1]+"px",left:s[0]+"px",height:f+"px"}).addClass(n.get("parentNode").get("className")),r.append(i),this.graderRegion.append(r),this.floatingHeaderRow[t]=r},_handleScrollEvent:function(){var t={},i={},o={},u={},a=0,f=0,l=0,c=!1,h=!1,p=!1,d=!1,v={},m={},g=!1;t.left=this._getRelativeXFromX(this.headerRow.getX()),e.config.win.pageYOffset+this.pageHeaderHeight>this.headerRowTop?(c=!0,e.config.win.pageYOffset+this.pageHeaderHeightthis.firstUserCellLeft,d=f>this.firstNonUserCellLeft-this.firstUserCellWidth),h?(a=this._getRelativeXFromX(l),o.left=a+"px",i.left=a+"px"):(a=this._getRelativeXFromX(this.firstUserCellLeft),o.left=a+"px",i.left=a+"px"),e.Object.each(this.floatingHeaderRow,function(e,t){v[t]={left:o.left}},this);if(this.footerRow){u.left=this._getRelativeXFromX(this.headerRow.getX());var y=e.config.win.innerHeight,b=e.config.win.pageYOffset,w=y-this._getScrollBarHeight()+b,E=parseInt(this.footerRow.getComputedStyle(s),10),S=E+this.footerRowPosition;m=v[n.FOOTERTITLE],g=this.floatingHeaderRow[n.FOOTERTITLE],wthis.firstUserCellBottom?(u.bottom=Math.ceil(S-w)+"px",p=!0):(u.bottom="1px",p=!1),m&&(m.bottom=u.bottom,m.top=null),v[n.FOOTERTITLE]=m}this.gradeItemHeadingContainer&&(this.gradeItemHeadingContainer.setStyles(t),c?this.gradeItemHeadingContainer.addClass(r.FLOATING):this.gradeItemHeadingContainer.removeClass(r.FLOATING)),this.userColumnHeader&&(this.userColumnHeader.setStyles(i),h?this.userColumnHeader.addClass(r.FLOATING):this.userColumnHeader.removeClass(r.FLOATING)),this.userColumn&&(this.userColumn.setStyles(o),h?this.userColumn.addClass(r.FLOATING):this.userColumn.removeClass(r.FLOATING)),this.footerRow&&(this.footerRow.setStyles(u),p?this.footerRow.addClass(r.FLOATING):this.footerRow.removeClass(r.FLOATING)),e.Object.each(v,function(e,t){this.floatingHeaderRow[t]&&this.floatingHeaderRow[t].setStyles(e)},this),e.Object.each(this.floatingHeaderRow,function(e,t){this.floatingHeaderRow[t]&&(d?this.floatingHeaderRow[t].addClass(r.FLOATING):this.floatingHeaderRow[t].removeClass(r.FLOATING))},this),g&&(d?g.addClass(r.FLOATING):g.removeClass(r.FLOATING))},_handleResizeEvent:function(){this._calculateCellPositions(),this._handleScrollEvent();var t=this.firstUserCell.getComputedStyle(o),r=e.all(n.USERCELL);this.userColumnHeader.one(".cell").setStyle("width",t),this.userColumn.all(".cell").each(function(n,i){var o=r.item(i).getComputedStyle(s);if(e.UA.ie!==0){var u=r.item(i),a=u.getDOMNode?u.getDOMNode().getBoundingClientRect().height:u.get("offsetHeight"),f=parseInt(u.getComputedStyle("marginTop"),10)+parseInt(u.getComputedStyle("marginBottom"),10),l=parseInt(u.getComputedStyle("paddingTop"),10)+parseInt(u.getComputedStyle("paddingBottom"),10),c=parseInt(u.getComputedStyle("borderTopWidth"),10)+parseInt(u.getComputedStyle("borderBottomWidth"),10);o=a-f-l-c}n.setStyles({width:t,height:o})},this);var i=this.gradeItemHeadingContainer.all(".cell"),a=e.all(n.HEADERCELLS),f=this.headerRow.getX(),l=0;a.each(function(e,t){var n=i.item(t);l+=e.get(u);var r={width:e.getComputedStyle(o),left:e.getX()-f+"px"};n.setStyles(r)});if(this.footerRow){var c=this.footerRow.all(".cell");if(c.size()!==0){var h=e.all(n.FOOTERCELLS);h.each(function(e,t){var n=c.item(t),r={width:e.getComputedStyle(o),left:e.getX()-f+"px"};n.setStyles(r)})}}e.Object.each(this.floatingHeaderRow,function(e){e.one("div").setStyle("width",t)},this),this.gradeItemHeadingContainer -.setStyle("width",l)}},e.Base.mix(e.M.gradereport_grader.ReportTable,[l])},"@VERSION@",{requires:["base","node","event","handlebars","overlay","event-hover"]}); +YUI.add("moodle-gradereport_grader-gradereporttable",function(e,t){function i(){i.superclass.constructor.apply(this,arguments)}function l(){}var n={FOOTERTITLE:".avg .header",FOOTERCELLS:"#user-grades .avg .cell",FOOTERROW:"#user-grades .avg",GRADECELL:"td.grade",GRADERTABLE:".gradeparent table",GRADEPARENT:".gradeparent",HEADERCELLS:"#user-grades .heading .cell",HEADERCELL:".gradebook-header-cell",HEADERROW:"#user-grades tr.heading",STUDENTHEADER:"#studentheader",USERCELL:"#user-grades .user.cell",USERMAIL:"#user-grades .useremail"},r={OVERRIDDEN:"overridden",TOOLTIPACTIVE:"tooltipactive"};e.extend(i,e.Base,{_eventHandles:[],graderTable:null,initializer:function(){this.graderRegion=e.one(n.GRADEPARENT),this.graderTable=e.one(n.GRADERTABLE),this.setupFloatingHeaders()},getGradeUserName:function(e){var t=e.ancestor("tr"),n=t.one("th.user .username");return n?n.get("text"):""},getGradeItemName:function(t){var n=e.one("th.item[data-itemid='"+t.getData("itemid")+"']");return n?n.get("text"):""},getGradeFeedback:function(e){return e.getData("feedback")}}),e.namespace("M.gradereport_grader").ReportTable=i,e.namespace("M.gradereport_grader").init=function(t){return new e.M.gradereport_grader.ReportTable(t)};var s="height",o="width",u="offsetWidth",a="offsetHeight",f="moodle-core-grade-report-grader";r.FLOATING="floating",l.ATTRS={},l.prototype={pageHeaderHeight:0,container:null,headerCell:null,headerRow:null,firstUserCell:null,firstNonUserCell:null,firstNonUserCellLeft:0,firstNonUserCellWidth:0,tableFooterRow:null,footerRow:null,gradeItemHeadingContainer:null,userColumnHeader:null,userColumn:null,firstUserCellBottom:0,firstUserCellLeft:0,firstUserCellWidth:0,dockWidth:0,lastUserCellTop:0,floatingHeaderRow:null,_eventHandles:[],setupFloatingHeaders:function(){this.firstUserCell=e.one(n.USERCELL),this.container=e.one(n.GRADEPARENT),this.firstNonUserCell=e.one(n.GRADECELL);if(!this.firstUserCell)return this;if(M.cfg.behatsiterunning)return;return this._setupFloatingUserColumn(),this._setupFloatingUserHeader(),this._setupFloatingAssignmentHeaders(),this._setupFloatingAssignmentFooter(),this.floatingHeaderRow={},this._setupFloatingLeftHeaders(".controls .controls"),this._setupFloatingLeftHeaders(".range .range"),this._setupFloatingLeftHeaders(n.FOOTERTITLE),this._setupFloatingAssignmentFooterTitle(),this._calculateCellPositions(),this._handleScrollEvent(),this._setupEventHandlers(),e.Global.on("moodle-gradereport_grader:resized",this._handleResizeEvent,this),this},_calculateCellPositions:function(){this.headerRowTop=this.headerRow.getY(),this.tableFooterRow&&(this.footerRowPosition=this.tableFooterRow.getY()),this.dockWidth=0;var t=e.one(".has_dock #dock");t&&(this.dockWidth=t.get(u));var r=e.all(n.USERCELL);this.firstUserCellLeft=this.firstUserCell.getX(),this.firstUserCellWidth=this.firstUserCell.get(u),this.firstNonUserCellLeft=this.firstNonUserCell.getX(),this.firstNonUserCellWidth=this.firstNonUserCell.get(u);if(r.size()>1){var i=r.item(1);this.firstUserCellBottom=i.getY()+parseInt(i.getComputedStyle(s),10),this.lastUserCellTop=r.item(r.size()-2).getY()}else{var o=r.item(0);this.lastUserCellTop=o.getY(),this.tableFooterRow?this.firstUserCellBottom=this.footerRowPosition+parseInt(this.tableFooterRow.getComputedStyle(s),10):this.firstUserCellBottom=o.getY()+o.get("offsetHeight")}var f=e.one("header");this.pageHeaderHeight=0;if(f)if(f.getComputedStyle("position")==="fixed")this.pageHeaderHeight=f.get(a);else{var l=e.one(".navbar");l&&l.getComputedStyle("position")==="fixed"&&(this.pageHeaderHeight=l.get(a))}},_getRelativeXY:function(e){return this._getRelativeXYFromXY(e.getX(),e.getY())},_getRelativeXYFromXY:function(e,t){var n=this.container.getXY();return[e-n[0],t-n[1]]},_getRelativeXFromX:function(e){return this._getRelativeXYFromXY(e,0)[0]},_getRelativeYFromY:function(e){return this._getRelativeXYFromXY(0,e)[1]},_getScrollBarHeight:function(){return e.UA.ie&&e.UA.ie>=10?0:e.config.doc.body.scrollWidth>e.config.doc.body.clientWidth?e.DOM.getScrollbarWidth():0},_setupEventHandlers:function(){this._eventHandles.push(e.one(e.config.win).on("scroll",this._handleScrollEvent,this),e.one(e.config.win).on("resize",this._handleResizeEvent,this),e.one(e.config.win).on("orientationchange",this._handleResizeEvent,this),e.Global.on("dock:shown",this._handleResizeEvent,this),e.Global.on("dock:hidden",this._handleResizeEvent,this))},_setupFloatingUserColumn:function(){var t=e.all(n.USERCELL),r=e.Node.create(''),i=this._getRelativeXY(this.firstUserCell);t.each(function(t){var n=t.getComputedStyle(s);if(e.UA.ie!==0){var i=t.get("offsetHeight"),u=parseInt(t.getComputedStyle("marginTop"),10)+parseInt(t.getComputedStyle("marginBottom"),10),a=parseInt(t.getComputedStyle("paddingTop"),10)+parseInt(t.getComputedStyle("paddingBottom"),10),f=parseInt(t.getComputedStyle("borderTopWidth"),10)+parseInt(t.getComputedStyle("borderBottomWidth"),10);n=i-u-a-f}var l=e.Node.create("
");l.set("innerHTML",t.get("innerHTML")).setAttribute("class",t.getAttribute("class")).setAttribute("data-uid",t.ancestor("tr").getData("uid")).setStyles({height:n,width:t.getComputedStyle(o)}),r.appendChild(l)},this),r.setStyles({left:i[0]+"px",position:"absolute",top:i[1]+"px"}),this.graderRegion.append(r),this.userColumn=r},_setupFloatingUserHeader:function(){this.headerRow=e.one(n.HEADERROW),this.headerCell=e.one(n.STUDENTHEADER);var t=e.Node.create(''),r=e.Node.create("
"),i=this._getRelativeXY(this.headerCell)[0],s=this._getRelativeXY(this.headerRow),u=s[0];r.set("innerHTML",this.headerCell.getHTML()).setAttribute("class",this.headerCell.getAttribute("class")).setStyles({width:this.firstUserCell.getComputedStyle(o),left:i-u+"px"}),t.setStyles({left:s[0]+"px",position:"absolute",top:s[1]+"px"}),t.append(r),this.graderRegion.append(t),this.userColumnHeader=t},_setupFloatingAssignmentHeaders +:function(){this.headerRow=e.one("#user-grades tr.heading");var t=e.all("#user-grades tr.heading .cell"),n=e.Node.create(''),r=this._getRelativeXY(this.headerRow),i=0,f=0,l=r[0];t.each(function(t){var r=this._getRelativeXY(t)[0],c=e.Node.create("
");c.append(t.getHTML()).setAttribute("class",t.getAttribute("class")).setData("itemid",t.getData("itemid")).setStyles({height:t.getComputedStyle(s),left:r-l+"px",position:"absolute",width:t.getComputedStyle(o)}),i+=parseInt(t.get(u),10),f=t.get(a),n.appendChild(c)},this),n.setStyles({height:f+"px",left:r[0]+"px",position:"absolute",top:r[1]+"px",width:i+"px"}),this.userColumnHeader.insert(n,"before"),this.gradeItemHeadingContainer=n},_setupFloatingAssignmentFooter:function(){this.tableFooterRow=e.one("#user-grades .avg");if(!this.tableFooterRow)return;var t=this.tableFooterRow.all(".cell"),n=e.Node.create(''),r=0,i=this._getRelativeXY(this.tableFooterRow),f=i[0],l=0;t.each(function(t){var i=e.Node.create("
"),c=this._getRelativeXY(t)[0];i.set("innerHTML",t.getHTML()).setAttribute("class",t.getAttribute("class")).setStyles({height:t.getComputedStyle(s),left:c-f+"px",position:"absolute",width:t.getComputedStyle(o)}),n.append(i),l=t.get(a),r+=parseInt(t.get(u),10)},this),n.setStyles({position:"absolute",left:i[0]+"px",bottom:"1px",height:l+"px",width:r+"px"}),this.graderRegion.append(n),this.footerRow=n},_setupFloatingAssignmentFooterTitle:function(){var e=this.floatingHeaderRow[n.FOOTERTITLE];e&&e.setStyles({bottom:"1px"})},_setupFloatingLeftHeaders:function(t){var n=e.one(t);if(!n)return;var r=e.Node.create(''),i=e.Node.create("
"),s=this._getRelativeXY(n),u=this.firstUserCell.getComputedStyle(o),f=n.get(a);i.set("innerHTML",n.getHTML()).setAttribute("class",n.getAttribute("class")).setStyles({width:u}),r.setStyles({position:"absolute",top:s[1]+"px",left:s[0]+"px",height:f+"px"}).addClass(n.get("parentNode").get("className")),r.append(i),this.graderRegion.append(r),this.floatingHeaderRow[t]=r},_handleScrollEvent:function(){var t={},i={},o={},u={},a=0,f=0,l=0,c=!1,h=!1,p=!1,d=!1,v={},m={},g=!1;t.left=this._getRelativeXFromX(this.headerRow.getX()),e.config.win.pageYOffset+this.pageHeaderHeight>this.headerRowTop?(c=!0,e.config.win.pageYOffset+this.pageHeaderHeightthis.firstUserCellLeft,d=f>this.firstNonUserCellLeft-this.firstUserCellWidth),h?(a=this._getRelativeXFromX(l),o.left=a+"px",i.left=a+"px"):(a=this._getRelativeXFromX(this.firstUserCellLeft),o.left=a+"px",i.left=a+"px"),e.Object.each(this.floatingHeaderRow,function(e,t){v[t]={left:o.left}},this);if(this.footerRow){u.left=this._getRelativeXFromX(this.headerRow.getX());var y=e.config.win.innerHeight,b=e.config.win.pageYOffset,w=y-this._getScrollBarHeight()+b,E=parseInt(this.footerRow.getComputedStyle(s),10),S=E+this.footerRowPosition;m=v[n.FOOTERTITLE],g=this.floatingHeaderRow[n.FOOTERTITLE],wthis.firstUserCellBottom?(u.bottom=Math.ceil(S-w)+"px",p=!0):(u.bottom="1px",p=!1),m&&(m.bottom=u.bottom,m.top=null),v[n.FOOTERTITLE]=m}this.gradeItemHeadingContainer&&(this.gradeItemHeadingContainer.setStyles(t),c?this.gradeItemHeadingContainer.addClass(r.FLOATING):this.gradeItemHeadingContainer.removeClass(r.FLOATING)),this.userColumnHeader&&(this.userColumnHeader.setStyles(i),h?this.userColumnHeader.addClass(r.FLOATING):this.userColumnHeader.removeClass(r.FLOATING)),this.userColumn&&(this.userColumn.setStyles(o),h?this.userColumn.addClass(r.FLOATING):this.userColumn.removeClass(r.FLOATING)),this.footerRow&&(this.footerRow.setStyles(u),p?this.footerRow.addClass(r.FLOATING):this.footerRow.removeClass(r.FLOATING)),e.Object.each(v,function(e,t){this.floatingHeaderRow[t]&&this.floatingHeaderRow[t].setStyles(e)},this),e.Object.each(this.floatingHeaderRow,function(e,t){this.floatingHeaderRow[t]&&(d?this.floatingHeaderRow[t].addClass(r.FLOATING):this.floatingHeaderRow[t].removeClass(r.FLOATING))},this),g&&(d?g.addClass(r.FLOATING):g.removeClass(r.FLOATING))},_handleResizeEvent:function(){this._calculateCellPositions(),this._handleScrollEvent();var t=this.firstUserCell.getComputedStyle(o),r=e.all(n.USERCELL);this.userColumnHeader.one(".cell").setStyle("width",t),this.userColumn.all(".cell").each(function(n,i){var o=r.item(i).getComputedStyle(s);if(e.UA.ie!==0){var u=r.item(i),a=u.getDOMNode?u.getDOMNode().getBoundingClientRect().height:u.get("offsetHeight"),f=parseInt(u.getComputedStyle("marginTop"),10)+parseInt(u.getComputedStyle("marginBottom"),10),l=parseInt(u.getComputedStyle("paddingTop"),10)+parseInt(u.getComputedStyle("paddingBottom"),10),c=parseInt(u.getComputedStyle("borderTopWidth"),10)+parseInt(u.getComputedStyle("borderBottomWidth"),10);o=a-f-l-c}n.setStyles({width:t,height:o})},this);var i=this.gradeItemHeadingContainer.all(".cell"),a=e.all(n.HEADERCELLS),f=this.headerRow.getX(),l=0;a.each(function(e,t){var n=i.item(t);l+=e.get(u);var r={width:e.getComputedStyle(o),left:e.getX()-f+"px"};n.setStyles(r)});if(this.footerRow){var c=this.footerRow.all(".cell");if(c.size()!==0){var h=e.all(n.FOOTERCELLS);h.each(function(e,t){var n=c.item(t),r={width:e.getComputedStyle(o),left:e.getX()-f+"px"};n.setStyles(r)})}}e.Object.each(this.floatingHeaderRow,function(e){e.one("div").setStyle("width" +,t)},this),this.gradeItemHeadingContainer.setStyle("width",l)}},e.Base.mix(e.M.gradereport_grader.ReportTable,[l])},"@VERSION@",{requires:["base","node","event","handlebars","overlay","event-hover"]}); diff --git a/grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable.js b/grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable.js index 6fcd0dd6eed..ac3695386e3 100644 --- a/grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable.js +++ b/grade/report/grader/yui/build/moodle-gradereport_grader-gradereporttable/moodle-gradereport_grader-gradereporttable.js @@ -402,6 +402,11 @@ FloatingHeaders.prototype = { return this; } + if (M.cfg.behatsiterunning) { + // If the behat site is running we don't want floating elements. + return; + } + // Generate floating elements. this._setupFloatingUserColumn(); this._setupFloatingUserHeader(); diff --git a/grade/report/grader/yui/src/gradereporttable/js/floatingheaders.js b/grade/report/grader/yui/src/gradereporttable/js/floatingheaders.js index 6d496bb60d6..a57aed8772b 100644 --- a/grade/report/grader/yui/src/gradereporttable/js/floatingheaders.js +++ b/grade/report/grader/yui/src/gradereporttable/js/floatingheaders.js @@ -259,6 +259,11 @@ FloatingHeaders.prototype = { return this; } + if (M.cfg.behatsiterunning) { + // If the behat site is running we don't want floating elements. + return; + } + // Generate floating elements. this._setupFloatingUserColumn(); this._setupFloatingUserHeader(); From 9d2e2a80be35fad97f352621e561dcaca387365a Mon Sep 17 00:00:00 2001 From: Rajesh Taneja Date: Wed, 15 Jun 2016 09:30:50 +0800 Subject: [PATCH 5/6] MDL-54589 behat: Fixed failures for phantomjs standalone --- .../tests/behat/block_private_files_dashboard.feature | 2 +- .../tests/behat/block_private_files_frontpage.feature | 2 +- enrol/tests/behat/behat_enrol.php | 3 +++ mod/feedback/tests/behat/behat_mod_feedback.php | 3 +++ mod/forum/tests/behat/discussion_navigation.feature | 2 ++ mod/quiz/tests/behat/editing_add.feature | 1 + report/eventlist/tests/behat/mainsection.feature | 1 + 7 files changed, 12 insertions(+), 2 deletions(-) diff --git a/blocks/private_files/tests/behat/block_private_files_dashboard.feature b/blocks/private_files/tests/behat/block_private_files_dashboard.feature index 976ae981fc1..990cd9641b1 100644 --- a/blocks/private_files/tests/behat/block_private_files_dashboard.feature +++ b/blocks/private_files/tests/behat/block_private_files_dashboard.feature @@ -1,4 +1,4 @@ -@block @block_private_files @file_upload @javascript +@block @block_private_files @_file_upload @javascript Feature: The private files block allows users to store files privately in moodle In order to store a private file in moodle As a user diff --git a/blocks/private_files/tests/behat/block_private_files_frontpage.feature b/blocks/private_files/tests/behat/block_private_files_frontpage.feature index 77d57566aa7..ec611bbd8ce 100644 --- a/blocks/private_files/tests/behat/block_private_files_frontpage.feature +++ b/blocks/private_files/tests/behat/block_private_files_frontpage.feature @@ -1,4 +1,4 @@ -@block @block_private_files @file_upload +@block @block_private_files @_file_upload Feature: The private files block allows users to store files privately in moodle In order to store a private file in moodle As a teacher diff --git a/enrol/tests/behat/behat_enrol.php b/enrol/tests/behat/behat_enrol.php index 4b541cddbc3..281843018b8 100644 --- a/enrol/tests/behat/behat_enrol.php +++ b/enrol/tests/behat/behat_enrol.php @@ -58,6 +58,9 @@ class behat_enrol extends behat_base { array($this->escape($enrolmethod), get_string('addinstance', 'enrol')) ); + // Wait again, for page to reloaded. + $this->execute('behat_general::i_wait_to_be_redirected'); + // Set form fields. $this->execute("behat_forms::i_set_the_following_fields_to_these_values", $table); diff --git a/mod/feedback/tests/behat/behat_mod_feedback.php b/mod/feedback/tests/behat/behat_mod_feedback.php index 24df576e61e..23ad80cdddb 100644 --- a/mod/feedback/tests/behat/behat_mod_feedback.php +++ b/mod/feedback/tests/behat/behat_mod_feedback.php @@ -54,6 +54,9 @@ class behat_mod_feedback extends behat_base { $this->execute('behat_forms::i_select_from_the_singleselect', array($questiontype, $additem)); + // Wait again, for page to reloaded. + $this->execute('behat_general::i_wait_to_be_redirected'); + $rows = $questiondata->getRows(); $modifiedrows = array(); foreach ($rows as $row) { diff --git a/mod/forum/tests/behat/discussion_navigation.feature b/mod/forum/tests/behat/discussion_navigation.feature index 36a0c796c85..314bc8819ea 100644 --- a/mod/forum/tests/behat/discussion_navigation.feature +++ b/mod/forum/tests/behat/discussion_navigation.feature @@ -39,9 +39,11 @@ Feature: A user can navigate to previous and next discussions And I add a new discussion to "Test forum name" forum with: | Subject | Discussion 1 | | Message | Test post message | + And I wait "1" seconds And I add a new discussion to "Test forum name" forum with: | Subject | Discussion 2 | | Message | Test post message | + And I wait "1" seconds And I add a new discussion to "Test forum name" forum with: | Subject | Discussion 3 | | Message | Test post message | diff --git a/mod/quiz/tests/behat/editing_add.feature b/mod/quiz/tests/behat/editing_add.feature index ee6f006c3d6..6e39c98f09a 100644 --- a/mod/quiz/tests/behat/editing_add.feature +++ b/mod/quiz/tests/behat/editing_add.feature @@ -153,6 +153,7 @@ Feature: Edit quiz page - adding things # Create the Essay 03 question. And I set the field "Select a category" to "Default for C1" + And I wait until the page is ready When I press "Create a new question ..." And I set the field "qtype_qtype_essay" to "1" And I press "Add" diff --git a/report/eventlist/tests/behat/mainsection.feature b/report/eventlist/tests/behat/mainsection.feature index ad5001ddd01..6518ce35271 100644 --- a/report/eventlist/tests/behat/mainsection.feature +++ b/report/eventlist/tests/behat/mainsection.feature @@ -10,6 +10,7 @@ Feature: Page contains a list of events And I navigate to "Events list" node in "Site administration > Reports" And I should see "Event name" And I set the field "eventname" to "phase" + And I press "filterbutton" And I should see "Phase switched" And I should not see "Comment created" And I press "clearbutton" From 6bf8caa573e73026cbe864390ac288bddc666423 Mon Sep 17 00:00:00 2001 From: Rajesh Taneja Date: Mon, 20 Jun 2016 10:01:59 +0800 Subject: [PATCH 6/6] MDL-54589 behat: Update composer to point to new tag --- composer.json | 2 +- composer.lock | 205 ++++++++++++++++++++++++++------------------------ 2 files changed, 106 insertions(+), 101 deletions(-) diff --git a/composer.json b/composer.json index b47b573e74d..708ccc807ed 100644 --- a/composer.json +++ b/composer.json @@ -2,6 +2,6 @@ "require-dev": { "phpunit/phpunit": "4.8.*", "phpunit/dbUnit": "1.4.*", - "moodlehq/behat-extension": "3.31.2" + "moodlehq/behat-extension": "3.31.3" } } diff --git a/composer.lock b/composer.lock index fccd56fbffa..4b43e82b6d9 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "ccba8f24cd70bd4ca9b78873fc4be17f", - "content-hash": "cf7a848add8e3de854561718a0d18986", + "hash": "f8e7d991a279be6d52ba826d6a86ba7e", + "content-hash": "7ccb7b4b482ecd15d1a673137ef02e82", "packages": [], "packages-dev": [ { @@ -797,16 +797,16 @@ }, { "name": "moodlehq/behat-extension", - "version": "v3.31.2", + "version": "v3.31.3", "source": { "type": "git", "url": "https://github.com/moodlehq/moodle-behat-extension.git", - "reference": "f0b6a44de9111fd4fa82796aca712b9e9772d07e" + "reference": "ec21b8ac2f03561d2a9ffd0d5c2c5fab68b6e040" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/moodlehq/moodle-behat-extension/zipball/f0b6a44de9111fd4fa82796aca712b9e9772d07e", - "reference": "f0b6a44de9111fd4fa82796aca712b9e9772d07e", + "url": "https://api.github.com/repos/moodlehq/moodle-behat-extension/zipball/ec21b8ac2f03561d2a9ffd0d5c2c5fab68b6e040", + "reference": "ec21b8ac2f03561d2a9ffd0d5c2c5fab68b6e040", "shasum": "" }, "require": { @@ -842,7 +842,7 @@ "Behat", "moodle" ], - "time": "2016-05-09 03:32:06" + "time": "2016-06-20 07:50:39" }, { "name": "phpdocumentor/reflection-docblock", @@ -895,32 +895,32 @@ }, { "name": "phpspec/prophecy", - "version": "v1.6.0", + "version": "v1.6.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972" + "reference": "58a8137754bc24b25740d4281399a4a3596058e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3c91bdf81797d725b14cb62906f9a4ce44235972", - "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", + "reference": "58a8137754bc24b25740d4281399a4a3596058e0", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "~2.0", - "sebastian/comparator": "~1.1", - "sebastian/recursion-context": "~1.0" + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1", + "sebastian/recursion-context": "^1.0" }, "require-dev": { - "phpspec/phpspec": "~2.0" + "phpspec/phpspec": "^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5.x-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { @@ -953,7 +953,7 @@ "spy", "stub" ], - "time": "2016-02-15 07:46:21" + "time": "2016-06-07 08:13:47" }, { "name": "phpunit/dbunit", @@ -1166,21 +1166,24 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.7", + "version": "1.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", "shasum": "" }, "require": { "php": ">=5.3.3" }, + "require-dev": { + "phpunit/phpunit": "~4|~5" + }, "type": "library", "autoload": { "classmap": [ @@ -1203,7 +1206,7 @@ "keywords": [ "timer" ], - "time": "2015-06-21 08:01:12" + "time": "2016-05-12 18:03:57" }, { "name": "phpunit/php-token-stream", @@ -1256,16 +1259,16 @@ }, { "name": "phpunit/phpunit", - "version": "4.8.24", + "version": "4.8.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a1066c562c52900a142a0e2bbf0582994671385e" + "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1066c562c52900a142a0e2bbf0582994671385e", - "reference": "a1066c562c52900a142a0e2bbf0582994671385e", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fc1d8cd5b5de11625979125c5639347896ac2c74", + "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74", "shasum": "" }, "require": { @@ -1279,7 +1282,7 @@ "phpunit/php-code-coverage": "~2.1", "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", - "phpunit/php-timer": ">=1.0.6", + "phpunit/php-timer": "^1.0.6", "phpunit/phpunit-mock-objects": "~2.3", "sebastian/comparator": "~1.1", "sebastian/diff": "~1.2", @@ -1324,7 +1327,7 @@ "testing", "xunit" ], - "time": "2016-03-14 06:16:08" + "time": "2016-05-17 03:09:28" }, { "name": "phpunit/phpunit-mock-objects", @@ -1544,16 +1547,16 @@ }, { "name": "sebastian/environment", - "version": "1.3.6", + "version": "1.3.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "2292b116f43c272ff4328083096114f84ea46a56" + "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/2292b116f43c272ff4328083096114f84ea46a56", - "reference": "2292b116f43c272ff4328083096114f84ea46a56", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716", + "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716", "shasum": "" }, "require": { @@ -1590,20 +1593,20 @@ "environment", "hhvm" ], - "time": "2016-05-04 07:59:13" + "time": "2016-05-17 03:18:57" }, { "name": "sebastian/exporter", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e" + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", "shasum": "" }, "require": { @@ -1611,12 +1614,13 @@ "sebastian/recursion-context": "~1.0" }, "require-dev": { + "ext-mbstring": "*", "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -1656,7 +1660,7 @@ "export", "exporter" ], - "time": "2015-06-21 07:55:53" + "time": "2016-06-17 09:04:28" }, { "name": "sebastian/global-state", @@ -1799,21 +1803,21 @@ }, { "name": "symfony/browser-kit", - "version": "v2.8.5", + "version": "v2.8.7", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "745c19467255cf32eaf311f000eecafd83ca5586" + "reference": "2508ecbfc98b007bc1b670cef40ff821b827c61c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/745c19467255cf32eaf311f000eecafd83ca5586", - "reference": "745c19467255cf32eaf311f000eecafd83ca5586", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/2508ecbfc98b007bc1b670cef40ff821b827c61c", + "reference": "2508ecbfc98b007bc1b670cef40ff821b827c61c", "shasum": "" }, "require": { "php": ">=5.3.9", - "symfony/dom-crawler": "~2.0,>=2.0.5|~3.0.0" + "symfony/dom-crawler": "~2.1|~3.0.0" }, "require-dev": { "symfony/css-selector": "~2.0,>=2.0.5|~3.0.0", @@ -1852,11 +1856,11 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2016-03-04 07:54:35" + "time": "2016-06-06 15:06:25" }, { "name": "symfony/class-loader", - "version": "v2.8.5", + "version": "v2.8.7", "source": { "type": "git", "url": "https://github.com/symfony/class-loader.git", @@ -1909,16 +1913,16 @@ }, { "name": "symfony/config", - "version": "v2.8.5", + "version": "v2.8.7", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "edbbcf33cffa2a85104fc80de8dc052cc51596bb" + "reference": "a2edd59c2163c65747fc3f35d132b5a39266bd05" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/edbbcf33cffa2a85104fc80de8dc052cc51596bb", - "reference": "edbbcf33cffa2a85104fc80de8dc052cc51596bb", + "url": "https://api.github.com/repos/symfony/config/zipball/a2edd59c2163c65747fc3f35d132b5a39266bd05", + "reference": "a2edd59c2163c65747fc3f35d132b5a39266bd05", "shasum": "" }, "require": { @@ -1958,20 +1962,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2016-04-20 18:52:26" + "time": "2016-06-06 11:11:27" }, { "name": "symfony/console", - "version": "v2.8.5", + "version": "v2.8.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "48221d3de4dc22d2cd57c97e8b9361821da86609" + "reference": "5ac8bc9aa77bb2edf06af3a1bb6bc1020d23acd3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/48221d3de4dc22d2cd57c97e8b9361821da86609", - "reference": "48221d3de4dc22d2cd57c97e8b9361821da86609", + "url": "https://api.github.com/repos/symfony/console/zipball/5ac8bc9aa77bb2edf06af3a1bb6bc1020d23acd3", + "reference": "5ac8bc9aa77bb2edf06af3a1bb6bc1020d23acd3", "shasum": "" }, "require": { @@ -2018,20 +2022,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-04-26 12:00:47" + "time": "2016-06-06 15:06:25" }, { "name": "symfony/css-selector", - "version": "v2.8.5", + "version": "v2.8.7", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "07b7ced3ae0c12918477c095453ea8595000810e" + "reference": "9a0b2649328297fb6acd0c823789d92efcbd36ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/07b7ced3ae0c12918477c095453ea8595000810e", - "reference": "07b7ced3ae0c12918477c095453ea8595000810e", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/9a0b2649328297fb6acd0c823789d92efcbd36ad", + "reference": "9a0b2649328297fb6acd0c823789d92efcbd36ad", "shasum": "" }, "require": { @@ -2071,20 +2075,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2016-03-04 07:54:35" + "time": "2016-06-06 11:11:27" }, { "name": "symfony/dependency-injection", - "version": "v2.8.5", + "version": "v2.8.7", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "35ac8cd26e4477d79e5cbd4f11d41dc92fed4d8d" + "reference": "2d05009d890cf1139988ff059b5b2e0eb280ed13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/35ac8cd26e4477d79e5cbd4f11d41dc92fed4d8d", - "reference": "35ac8cd26e4477d79e5cbd4f11d41dc92fed4d8d", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/2d05009d890cf1139988ff059b5b2e0eb280ed13", + "reference": "2d05009d890cf1139988ff059b5b2e0eb280ed13", "shasum": "" }, "require": { @@ -2100,6 +2104,7 @@ }, "suggest": { "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", "symfony/yaml": "" }, @@ -2133,11 +2138,11 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2016-04-20 14:12:37" + "time": "2016-06-06 11:11:27" }, { "name": "symfony/dom-crawler", - "version": "v2.8.5", + "version": "v2.8.7", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", @@ -2193,16 +2198,16 @@ }, { "name": "symfony/event-dispatcher", - "version": "v2.8.5", + "version": "v2.8.7", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "81c4c51f7fd6d0d40961bd53dd60cade32db6ed6" + "reference": "2a6b8713f8bdb582058cfda463527f195b066110" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/81c4c51f7fd6d0d40961bd53dd60cade32db6ed6", - "reference": "81c4c51f7fd6d0d40961bd53dd60cade32db6ed6", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2a6b8713f8bdb582058cfda463527f195b066110", + "reference": "2a6b8713f8bdb582058cfda463527f195b066110", "shasum": "" }, "require": { @@ -2249,11 +2254,11 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-04-05 16:36:54" + "time": "2016-06-06 11:11:27" }, { "name": "symfony/filesystem", - "version": "v2.8.5", + "version": "v2.8.7", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", @@ -2302,16 +2307,16 @@ }, { "name": "symfony/polyfill-apcu", - "version": "v1.1.1", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-apcu.git", - "reference": "0c901e4e65a2f7ece68f0fd249b56d6ad3adc214" + "reference": "6d58bceaeea2c2d3eb62503839b18646e161cd6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/0c901e4e65a2f7ece68f0fd249b56d6ad3adc214", - "reference": "0c901e4e65a2f7ece68f0fd249b56d6ad3adc214", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/6d58bceaeea2c2d3eb62503839b18646e161cd6b", + "reference": "6d58bceaeea2c2d3eb62503839b18646e161cd6b", "shasum": "" }, "require": { @@ -2320,7 +2325,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.2-dev" } }, "autoload": { @@ -2351,20 +2356,20 @@ "portable", "shim" ], - "time": "2016-03-03 16:49:40" + "time": "2016-05-18 14:26:46" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.1.1", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "1289d16209491b584839022f29257ad859b8532d" + "reference": "dff51f72b0706335131b00a7f49606168c582594" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/1289d16209491b584839022f29257ad859b8532d", - "reference": "1289d16209491b584839022f29257ad859b8532d", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", + "reference": "dff51f72b0706335131b00a7f49606168c582594", "shasum": "" }, "require": { @@ -2376,7 +2381,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.2-dev" } }, "autoload": { @@ -2410,20 +2415,20 @@ "portable", "shim" ], - "time": "2016-01-20 09:13:37" + "time": "2016-05-18 14:26:46" }, { "name": "symfony/process", - "version": "v2.8.5", + "version": "v2.8.7", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "1276bd9be89be039748cf753a2137f4ef149cd74" + "reference": "115347d00c342198cdc52a7bd8bc15b5ab43500c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/1276bd9be89be039748cf753a2137f4ef149cd74", - "reference": "1276bd9be89be039748cf753a2137f4ef149cd74", + "url": "https://api.github.com/repos/symfony/process/zipball/115347d00c342198cdc52a7bd8bc15b5ab43500c", + "reference": "115347d00c342198cdc52a7bd8bc15b5ab43500c", "shasum": "" }, "require": { @@ -2459,20 +2464,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2016-04-14 15:22:22" + "time": "2016-06-06 11:11:27" }, { "name": "symfony/translation", - "version": "v2.8.5", + "version": "v2.8.7", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "d60b8e076d22953aabebeebda53bf334438e7aca" + "reference": "8a1648d2e165ba87c759ba57d7f4c13d95fdf4a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/d60b8e076d22953aabebeebda53bf334438e7aca", - "reference": "d60b8e076d22953aabebeebda53bf334438e7aca", + "url": "https://api.github.com/repos/symfony/translation/zipball/8a1648d2e165ba87c759ba57d7f4c13d95fdf4a1", + "reference": "8a1648d2e165ba87c759ba57d7f4c13d95fdf4a1", "shasum": "" }, "require": { @@ -2523,20 +2528,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2016-03-25 01:40:30" + "time": "2016-06-06 11:11:27" }, { "name": "symfony/yaml", - "version": "v2.8.5", + "version": "v2.8.7", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e4fbcc65f90909c999ac3b4dfa699ee6563a9940" + "reference": "815fabf3f48c7d1df345a69d1ad1a88f59757b34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e4fbcc65f90909c999ac3b4dfa699ee6563a9940", - "reference": "e4fbcc65f90909c999ac3b4dfa699ee6563a9940", + "url": "https://api.github.com/repos/symfony/yaml/zipball/815fabf3f48c7d1df345a69d1ad1a88f59757b34", + "reference": "815fabf3f48c7d1df345a69d1ad1a88f59757b34", "shasum": "" }, "require": { @@ -2572,7 +2577,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-03-29 19:00:15" + "time": "2016-06-06 11:11:27" } ], "aliases": [],