'test content'); protected $sel_options = array(array('value' => 0, 'label' => 'label')); protected $readonlys = array('value' => true); /** * Test reading xml files * * This really just tests that the files can be found and executed. */ public function testRead() { $etemplate = new Etemplate(); // Test missing template fails $this->assertEquals(false, $etemplate->read('totally invalid'), 'Reading invalid template'); // Templates must be in the correct templates directory - use one from API // This does not actually do anything with the template file $this->assertEquals(true, $etemplate->read(static::TEST_TEMPLATE)); // This loads and parses $result = $this->mockedExec($etemplate, array()); // Look for the load and match the template name foreach($result as $command) { if($command['type'] == 'et2_load') { $this->assertEquals(static::TEST_TEMPLATE, $command['data']['name']); break; } } } /** * Test that we can load the etemplate into a different DOM ID than the * default, which is based on the template name. */ public function testSetDOMId() { // Templates must be in the correct templates directory - use one from API $etemplate = new Etemplate(); $etemplate->read(static::TEST_TEMPLATE); // Change the target DOM ID $etemplate->set_dom_id('test_id'); $result = $this->mockedExec($etemplate, array()); // Check for the load foreach($result as $command) { if($command['type'] == 'et2_load') { $this->assertEquals('test_id', $command['data']['DOMNodeID']); break; } } } /** * Test that data that is passed in is passed on */ public function testExec() { // Templates must be in the correct templates directory - use one from API $etemplate = new Etemplate(); $etemplate->read(static::TEST_TEMPLATE); // Change the target DOM ID $etemplate->set_dom_id('test_id'); $result = $this->mockedExec($etemplate, $this->content, $this->sel_options, $this->readonlys); // Check for the load $data = array(); foreach($result as $command) { if($command['type'] == 'et2_load') { $data = $command['data']; break; } } $this->assertArraySubset($this->content, $data['data']['content'], false, 'Content does not match'); $this->assertArraySubset($this->sel_options, $data['data']['sel_options'], false, 'Select options do not match'); $this->assertArraySubset($this->readonlys, $data['data']['readonlys'], false, 'Readonlys does not match'); } /** * Test that data passed in is passed back * * In this case, since there's one input widget and we're passing it's value, and * we're not passing anything extra and no preserve, it should be the same. * * @depends testExec */ public function testRoundTrip() { // Templates must be in the correct templates directory - use one from API $etemplate = new Etemplate(); $etemplate->read(static::TEST_TEMPLATE); $this->readonlys['value'] = false; $result = $this->mockedRoundTrip($etemplate, $this->content, $this->sel_options, $this->readonlys); $this->assertEquals($this->content, $result); } /** * Simple test of a read-only widget * * The value is passed in, but does not come back * * @depends testExec */ public function testSimpleReadonly() { // Templates must be in the correct templates directory - use one from API $etemplate = new Etemplate(); $etemplate->read(static::TEST_TEMPLATE); $this->readonlys['value'] = true; $result = $this->mockedRoundTrip($etemplate, $this->content, $this->sel_options, $this->readonlys); // The only input widget is readonly, expect an empty array $this->assertEquals(array(), $result); } /** * Simple test of preserve * * The value is passed in, and comes back, even if the widget is readonly, * or if there is no matching widget. * * @depends testExec */ public function testArbitraryPreserve() { // Templates must be in the correct templates directory - use one from API $etemplate = new Etemplate(); $etemplate->read(static::TEST_TEMPLATE); $this->readonlys['value'] = true; $preserve = array('arbitrary' => 'value'); $result = $this->mockedRoundTrip($etemplate, $this->content, $this->sel_options, $this->readonlys, $preserve); // The only input widget is readonly, expect preserve back $this->assertEquals($preserve, $result); // Now try with widget $this->readonlys['value'] = false; $result2 = $this->mockedRoundTrip($etemplate, $this->content, $this->sel_options, $this->readonlys, $preserve); // The only input widget is readonly, expect preserve + content back $this->assertArraySubset($this->content, $result2); $this->assertArraySubset($preserve, $result2); } /** * Test of editable widget value overriding preserved value but a readonly * widget does not override preserved value. */ public function testReadonlyPreserve() { $etemplate = new Etemplate(); $etemplate->read(static::TEST_TEMPLATE); $this->readonlys['value'] = true; $preserve['value'] = 'preserved_value'; $result = $this->mockedRoundTrip($etemplate, $this->content, $this->sel_options, $this->readonlys, $preserve); // The only input widget is readonly, expect preserve back, not content $this->assertEquals($preserve['value'], $result['value']); $this->readonlys['value'] = false; $result2 = $this->mockedRoundTrip($etemplate, $this->content, $this->sel_options, $this->readonlys, $preserve); // The only input widget is editable, expect content back, not preserve $this->assertEquals($this->content['value'], $result2['value']); } }