Skip to content

Commit

Permalink
Merge pull request minkphp#518 from aik099/495-single-change-event-ve…
Browse files Browse the repository at this point in the history
…rification

Adding test for `change` event fire count verification
  • Loading branch information
stof committed May 3, 2014
2 parents 9a9717a + 6b96e5b commit 46c3876
Show file tree
Hide file tree
Showing 2 changed files with 150 additions and 0 deletions.
90 changes: 90 additions & 0 deletions tests/Behat/Mink/Driver/JavascriptDriverTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -383,4 +383,94 @@ public function testWindowMaximize()

$this->assertTrue($session->evaluateScript($script));
}

/**
* @dataProvider setValueChangeEventDataProvider
* @group change-event-detector
*/
public function testSetValueChangeEvent($elementId, $elementValue)
{
$this->getSession()->visit($this->pathTo('/element_change_detector.html'));
$page = $this->getSession()->getPage();

$input = $page->findById($elementId);
$this->assertNull($page->findById($elementId.'-result'));

$input->setValue($elementValue);
$this->assertElementChangeCount($elementId);
}

public function setValueChangeEventDataProvider()
{
return array(
'input default' => array('the-input-default', 'some value'),
'input text' => array('the-input-text', 'some value'),
'input email' => array('the-email', 'some value'),
'select' => array('the-select', '30'),
'textarea' => array('the-textarea', 'some value'),
'file' => array('the-file', 'some value'),
);
}

/**
* @dataProvider selectOptionChangeEventDataProvider
* @group change-event-detector
*/
public function testSelectOptionChangeEvent($elementId, $elementValue)
{
$this->getSession()->visit($this->pathTo('/element_change_detector.html'));
$page = $this->getSession()->getPage();

$input = $page->findById($elementId);
$this->assertNull($page->findById($elementId.'-result'));

$input->selectOption($elementValue);
$this->assertElementChangeCount($elementId);
}

public function selectOptionChangeEventDataProvider()
{
return array(
'select' => array('the-select', '30'),
'radio' => array('the-radio-m', 'm'),
);
}

/**
* @group change-event-detector
*/
public function testCheckChangeEvent()
{
$this->getSession()->visit($this->pathTo('/element_change_detector.html'));
$page = $this->getSession()->getPage();

$checkbox = $page->findById('the-unchecked-checkbox');
$this->assertNull($page->findById('the-unchecked-checkbox-result'));

$checkbox->check();
$this->assertElementChangeCount('the-unchecked-checkbox');
}

/**
* @group change-event-detector
*/
public function testUncheckChangeEvent()
{
$this->getSession()->visit($this->pathTo('/element_change_detector.html'));
$page = $this->getSession()->getPage();

$checkbox = $page->findById('the-checked-checkbox');
$this->assertNull($page->findById('the-checked-checkbox-result'));

$checkbox->uncheck();
$this->assertElementChangeCount('the-checked-checkbox');
}

protected function assertElementChangeCount($elementId)
{
$counterElement = $this->getSession()->getPage()->findById($elementId.'-result');
$actualCount = null === $counterElement ? 0 : $counterElement->getText();

$this->assertEquals('1', $actualCount);
}
}
60 changes: 60 additions & 0 deletions tests/Behat/Mink/Driver/web-fixtures/element_change_detector.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
<head>
<title>ADvanced Form</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<script src="js/jquery-1.6.2-min.js"></script>
</head>
<body>
<h1>ADvanced Form Page</h1>

<form method="POST" enctype="multipart/form-data" action="advanced_form_post.php">
<input id="the-input-default" value="" />
<input type="text" id="the-input-text" value="" />
<input type="email" id="the-email" value="" />

<select id="the-select">
<option value="10">ten</option>
<option selected="selected" value="20">twenty</option>
<option value="30">thirty</option>
</select>

<label for="sex">
<span><input type="radio" name="sex" id="the-radio-m" value="m" /> m</span>
<span><input type="radio" name="sex" id="the-radio-w" value="w" checked="checked" /> w</span>
</label>

<input type="checkbox" id="the-checked-checkbox" value="cb-val" checked/>
<input type="checkbox" id="the-unchecked-checkbox" value="cb-val"/>

<textarea id="the-textarea">original notes</textarea>

<input type="file" id="the-file" />
</form>

<ul id="results" style="border: 1px solid red;">
<li>for easy element location</li>
</ul>

<script type="text/javascript">
$(document).ready(function () {
var $change_registry = {},
$results = $('#results');

$(':input').change(function ($e) {
var $result_id = this.id + '-result';

if (!$change_registry[this.id]) {
$change_registry[this.id] = 1;
$results.append('<li id="' + $result_id + '"></li>');
}
else {
$change_registry[this.id]++;
}

$('#' + $result_id).text($change_registry[this.id]);
})
});
</script>
</body>
</html>

0 comments on commit 46c3876

Please sign in to comment.