expectOnce ( 'filter' );
		else
			$mock->expectNever ( 'filter' );
		$mock->setReturnValue ( 'filter', $result );
		$mock->setReturnValue ( 'prepare', $setup );
		$mock->name = $i ++;
		$mock->post = $post;
		return $mock;
	}
	public function test_filter() {
		$def = new HTMLPurifier_URIDefinition ();
		$def->addFilter ( $this->createFilterMock (), $this->config );
		$def->addFilter ( $this->createFilterMock (), $this->config );
		$uri = $this->createURI ( 'test' );
		$this->assertTrue ( $def->filter ( $uri, $this->config, $this->context ) );
	}
	public function test_filter_earlyAbortIfFail() {
		$def = new HTMLPurifier_URIDefinition ();
		$def->addFilter ( $this->createFilterMock ( true, false ), $this->config );
		$def->addFilter ( $this->createFilterMock ( false ), $this->config ); // never called
		$uri = $this->createURI ( 'test' );
		$this->assertFalse ( $def->filter ( $uri, $this->config, $this->context ) );
	}
	public function test_setupMemberVariables_collisionPrecedenceIsHostBaseScheme() {
		$this->config->set ( 'URI.Host', $host = 'example.com' );
		$this->config->set ( 'URI.Base', $base = 'http://sub.example.com/foo/bar.html' );
		$this->config->set ( 'URI.DefaultScheme', 'ftp' );
		$def = new HTMLPurifier_URIDefinition ();
		$def->setup ( $this->config );
		$this->assertIdentical ( $def->host, $host );
		$this->assertIdentical ( $def->base, $this->createURI ( $base ) );
		$this->assertIdentical ( $def->defaultScheme, 'http' ); // not ftp!
	}
	public function test_setupMemberVariables_onlyScheme() {
		$this->config->set ( 'URI.DefaultScheme', 'ftp' );
		$def = new HTMLPurifier_URIDefinition ();
		$def->setup ( $this->config );
		$this->assertIdentical ( $def->defaultScheme, 'ftp' );
	}
	public function test_setupMemberVariables_onlyBase() {
		$this->config->set ( 'URI.Base', 'http://sub.example.com/foo/bar.html' );
		$def = new HTMLPurifier_URIDefinition ();
		$def->setup ( $this->config );
		$this->assertIdentical ( $def->host, 'sub.example.com' );
	}
}
// vim: et sw=4 sts=4