m_FieldCheck = array(); $this->m_Initialized = false; } function setUp() { parent::setUp(); if(!$this->m_Initialized) { $this->m_Initialized = true; $this->m_PrevPostPid = $this->createAndSavePost( self::PrevPostTitle, self::PrevPostContent, self::SeriesName, "end", "--- New Series ---", "publish"); $this->m_PostPid = $this->createAndSavePost( self::PostTitle, self::PostContent, "", "end", self::SeriesName, "publish"); $this->m_NextPostPid = $this->createAndSavePost( self::NextPostTitle, self::NextPostContent, "", "end", self::SeriesName, "publish"); } $this->istEditConfiguration(); if(empty($this->m_OriginalFieldValues)) { $this->doFieldTest("format_post"); $this->doFieldTest("format_next"); $this->doFieldTest("format_prev"); $this->doFieldTest("format_toc_block"); $this->doFieldTest("format_toc_entry"); $this->doFieldTest("format_toc_active_entry"); $this->doFieldTest("format_series_list_block"); $this->doFieldTest("format_series_list_entry"); $this->doFieldTest("meta_links"); $this->m_FieldTest["meta_links"] = (bool)($this->m_FieldTest["meta_links"]); $this->m_OriginalFieldValues = $this->m_FieldTest; } } function tearDown() { $this->istEditConfiguration(); foreach($this->m_OriginalFieldValues as $field => $value) { $this->setFieldByName("in_series[$field]", $value); } $this->istSaveConfiguration(); parent::tearDown(); } function refContent() { if(version_compare("2.0", $this->wpGetVersion()) > 0) { return "\t" . self::PostContent . "\n\n"; } else if(version_compare("2.1", $this->wpGetVersion()) > 0) { return self::PostContent . "\n\n"; } else { return self::PostContent . "\n"; } } function refNext() { return "Next in series"; } function refPrev() { return "Previous in series"; } function refTocHeader() { return "Table of contents for ".self::SeriesName; } function refTocEntries() { return self::PrevPostTitle . self::PostTitle . self::NextPostTitle; } function doFieldTest($field) { $this->m_FieldTest[$field] = $this->getBrowser()->getFieldByName("in_series[$field]"); $this->m_FieldTest[$field] = html_entity_decode($this->m_FieldTest[$field], ENT_QUOTES); $this->assertTrue(!is_null($this->m_FieldTest[$field]), "$field did not come back as expected."); } function doTextFieldTest($field) { $this->doFieldTest($field); $this->assertTrue($this->setFieldByName("in_series[$field]", "Test $field"), "Failed to set $field."); } function doBoolFieldTest($field) { $this->doFieldTest($field); $this->m_FieldTest[$field] = (bool)($this->m_FieldTest[$field]); $this->assertTrue($this->setFieldByName("in_series[$field]", !($this->m_FieldTest[$field]))); } function checkFieldAsNonAttribute($field, $token, $expecting, $subselect = '', $recursed = false) { $target = "c".mt_rand(); $arr_expect = $expecting; if(!is_array($expecting)) { $arr_expect = array($expecting); } $this->assertTrue($this->setFieldByName("in_series[$field]", "
$token
")); $this->istSaveConfiguration(); $this->wpViewPost($this->m_PostPid); $this->assertElementsBySelector("div[class=\"$target\"] $subselect", $arr_expect); if($recursed === false) { $this->istEditConfiguration(); if(!is_array($expecting)) { $new_expect = $expecting . $expecting; if(!empty($subselect)) { $new_expect = array($expecting, $expecting); } } else { $new_expect = array(); foreach($expecting as $key => $value) { $new_expect[$key] = $value.$value; } } $this->checkFieldAsNonAttribute($field, $token . $token, $new_expect, $subselect, true); } } function checkFieldAsInvalidAttribute($field, $token) { $value = "".mt_rand(); $this->assertTrue($this->setFieldByName("in_series[$field]", "
$value
")); $this->istSaveConfiguration(); $this->wpViewPost($this->m_PostPid); $this->assertElementsBySelector("div[class=\"$token\"]", array($value)); } function checkFieldAsAttribute($field, $token, $expecting, $subselect = '', $count = 1) { $value = "".mt_rand(); $expecting = addslashes($expecting); $val_arr = array(); for($i = 0; $i < $count; $i++) { $val_arr[] = $value; } $this->assertTrue($this->setFieldByName("in_series[$field]", "
$value
")); $this->istSaveConfiguration(); $this->wpViewPost($this->m_PostPid); $this->assertElementsBySelector("div[class=\"$expecting\"] $subselect", $val_arr); } function testSetting() { $this->doTextFieldTest("format_post"); $this->doTextFieldTest("format_next"); $this->doTextFieldTest("format_prev"); $this->doTextFieldTest("format_toc_block"); $this->doTextFieldTest("format_toc_entry"); $this->doTextFieldTest("format_toc_active_entry"); $this->doTextFieldTest("format_series_list_block"); $this->doTextFieldTest("format_series_list_entry"); $this->doBoolFieldTest("meta_links"); $this->istSaveConfiguration(); foreach($this->m_FieldTest as $index => $value) { $current_value = $this->getBrowser()->getFieldByName("in_series[$index]"); if(is_bool($value)) { $this->assertTrue($current_value != $value, "Expected '$index' to be $value, but was $current_value."); } else { $this->assertTrue($current_value == "Test $index", "'$current_value' != 'Test $index'."); } } } function testFormatPostSanity() { $target = "testFormatPostSanity_target"; $value = "testFormatPostSanity succeeded"; $this->assertTrue($this->setFieldByName("in_series[format_post]", "
$value
")); $this->istSaveConfiguration(); $this->wpViewPost($this->m_PostPid); $this->assertElementsBySelector("div#$target", array($value)); } function testFormatPostContentNotAttribute() { $this->checkFieldAsNonAttribute("format_post", "%content", $this->refContent()); } function testFormatPostContentAsAttribute() { $this->checkFieldAsInvalidAttribute("format_post", "%content"); } function testFormatPostNextNotAttribute() { $this->checkFieldAsNonAttribute("format_post", "%next", $this->refNext()); } function testFormatPostNextAsAttribute() { $this->checkFieldAsInvalidAttribute("format_post", "%next"); } function testFormatPostPrevNotAttribute() { $this->checkFieldAsNonAttribute("format_post", "%prev", $this->refPrev()); } function testFormatPostPrevAsAttribute() { $this->checkFieldAsInvalidAttribute("format_post", "%prev"); } function testFormatPostTocNonAttribute() { $this->checkFieldAsNonAttribute("format_post", "%toc", $this->refTocHeader(), " > h3"); } function testFormatPostTocAsAttribute() { $this->checkFieldAsInvalidAttribute("format_post", "%toc"); } function testFormatNextSeriesNonAttribute() { $this->checkFieldAsNonAttribute("format_next", "%series", self::SeriesName); } function testFormatNextSeriesAsAttribute() { $this->checkFieldAsAttribute("format_next", "%series", self::SeriesName); } function testFormatNextTitleNonAttribute() { $this->checkFieldAsNonAttribute("format_next", "%title", self::NextPostTitle); } function testFormatNextTitleAsAttribute() { $this->checkFieldAsAttribute("format_next", "%title", self::NextPostTitle); } function testFormatNextUrlNonAttribute() { $this->checkFieldAsNonAttribute("format_next", "%url", $this->wpPostLink($this->m_NextPostPid)); } function testFormatNextUrlAsAttribute() { $this->checkFieldAsAttribute("format_next", "%url", $this->wpPostLink($this->m_NextPostPid)); } function testFormatPrevSeriesNonAttribute() { $this->checkFieldAsNonAttribute("format_prev", "%series", self::SeriesName); } function testFormatPrevSeriesAsAttribute() { $this->checkFieldAsAttribute("format_prev", "%series", self::SeriesName); } function testFormatPrevTitleNonAttribute() { $this->checkFieldAsNonAttribute("format_prev", "%title", self::PrevPostTitle); } function testFormatPrevTitleAsAttribute() { $this->checkFieldAsAttribute("format_prev", "%title", self::PrevPostTitle); } function testFormatPrevUrlNonAttribute() { $this->checkFieldAsNonAttribute("format_prev", "%url", $this->wpPostLink($this->m_PrevPostPid)); } function testFormatPrevUrlAsAttribute() { $this->checkFieldAsAttribute("format_prev", "%url", $this->wpPostLink($this->m_PrevPostPid)); } function testFormatTocEntriesNonAttribute() { $this->checkFieldAsNonAttribute("format_toc_block", "%entries", $this->refTocEntries()); } function testFormatTocEntriesAsAttribute() { $this->checkFieldAsInvalidAttribute("format_toc_block", "%entries"); } function testFormatTocSeriesNonAttribute() { $this->checkFieldAsNonAttribute("format_toc_block", "%series", self::SeriesName); } function testFormatTocSeriesAsAttribute() { $this->checkFieldAsAttribute("format_toc_block", "%series", self::SeriesName); } function testFormatTocTitleNonAttribute() { $this->checkFieldAsNonAttribute("format_toc_block", "%title", self::PostTitle); } function testFormatTocTitleAsAttribute() { $this->checkFieldAsAttribute("format_toc_block", "%title", self::PostTitle); } function testFormatTocEntrySeriesNonAttribute() { $this->checkFieldAsNonAttribute("format_toc_entry", "%series", array(self::SeriesName, self::SeriesName)); } function testFormatTocEntrySeriesAsAttribute() { $this->checkFieldAsAttribute("format_toc_entry", "%series", self::SeriesName, '', 2); } function testFormatTocEntryTitleNonAttribute() { $this->checkFieldAsNonAttribute("format_toc_entry", "%title", array(self::PrevPostTitle, self::NextPostTitle)); } function testFormatTocEntryTitleAsAttribute() { $this->checkFieldAsAttribute("format_toc_entry", "%title", self::PrevPostTitle); $this->istEditConfiguration(); $this->checkFieldAsAttribute("format_toc_entry", "%title", self::NextPostTitle); } function testFormatTocEntryUrlNonAttribute() { $prev = $this->wpPostLink($this->m_PrevPostPid); $next = $this->wpPostLink($this->m_NextPostPid); $this->checkFieldAsNonAttribute("format_toc_entry", "%url", array($prev, $next)); } function testFormatTocEntryUrlAsAttribute() { $prev = $this->wpPostLink($this->m_PrevPostPid); $next = $this->wpPostLink($this->m_NextPostPid); $this->checkFieldAsAttribute("format_toc_entry", "%url", $prev); $this->istEditConfiguration(); $this->checkFieldAsAttribute("format_toc_entry", "%url", $next); } function testFormatTocActiveEntrySeriesNonAttribute() { $this->checkFieldAsNonAttribute("format_toc_active_entry", "%series", self::SeriesName); } function testFormatTocActiveEntrySeriesAsAttribute() { $this->checkFieldAsAttribute("format_toc_active_entry", "%series", self::SeriesName); } function testFormatTocActiveEntryTitleNonAttribute() { $this->checkFieldAsNonAttribute("format_toc_active_entry", "%title", self::PostTitle); } function testFormatTocActiveEntryTitleAsAttribute() { $this->checkFieldAsAttribute("format_toc_active_entry", "%title", self::PostTitle); } function testFormatTocActiveEntryUrlNonAttribute() { $this->checkFieldAsNonAttribute("format_toc_active_entry", "%url", $this->wpPostLink($this->m_PostPid)); } function testFormatTocActiveEntryUrlAsAttribute() { $this->checkFieldAsAttribute("format_toc_active_entry", "%url", $this->wpPostLink($this->m_PostPid)); } function testMetaLinksOn() { $prev = $this->wpPostLink($this->m_PrevPostPid); $curr = $this->wpPostLink($this->m_PostPid); $next = $this->wpPostLink($this->m_NextPostPid); $this->assertTrue($this->setFieldByName("in_series[meta_links]", true)); $this->istSaveConfiguration(); $this->wpViewPost($this->m_PrevPostPid); $this->assertElementsBySelector("link[rel=\"prev\"]", array()); $this->assertElementsBySelector("link[rel=\"next\"][href=\"$curr\"]", array("")); $this->wpViewPost($this->m_PostPid); $this->assertElementsBySelector("link[rel=\"prev\"][href=\"$prev\"]", array("")); $this->assertElementsBySelector("link[rel=\"next\"][href=\"$next\"]", array("")); $this->wpViewPost($this->m_NextPostPid); $this->assertElementsBySelector("link[rel=\"prev\"][href=\"$curr\"]", array("")); $this->assertElementsBySelector("link[rel=\"next\"]", array()); } function testMetaLinksOff() { $prev = $this->wpPostLink($this->m_PrevPostPid); $curr = $this->wpPostLink($this->m_PostPid); $next = $this->wpPostLink($this->m_NextPostPid); $this->assertTrue($this->setFieldByName("in_series[meta_links]", false)); $this->istSaveConfiguration(); $this->wpViewPost($this->m_PrevPostPid); $this->assertElementsBySelector("link[rel=\"prev\"]", array()); $this->assertElementsBySelector("link[rel=\"next\"]", array()); $this->wpViewPost($this->m_PostPid); $this->assertElementsBySelector("link[rel=\"prev\"]", array()); $this->assertElementsBySelector("link[rel=\"next\"]", array()); $this->wpViewPost($this->m_NextPostPid); $this->assertElementsBySelector("link[rel=\"prev\"]", array()); $this->assertElementsBySelector("link[rel=\"next\"]", array()); } } ?>