defs = & $defs;
}
}
class HTMLPurifier_AttrDef_CSS_CompositeTest extends HTMLPurifier_AttrDefHarness {
protected $def1, $def2;
public function test() {
generate_mock_once ( 'HTMLPurifier_AttrDef' );
$config = HTMLPurifier_Config::createDefault ();
$context = new HTMLPurifier_Context ();
// first test: value properly validates on first definition
// so second def is never called
$def1 = new HTMLPurifier_AttrDefMock ();
$def2 = new HTMLPurifier_AttrDefMock ();
$defs = array (
&$def1,
&$def2
);
$def = new HTMLPurifier_AttrDef_CSS_Composite_Testable ( $defs );
$input = 'FOOBAR';
$output = 'foobar';
$def1_params = array (
$input,
$config,
$context
);
$def1->expectOnce ( 'validate', $def1_params );
$def1->setReturnValue ( 'validate', $output, $def1_params );
$def2->expectNever ( 'validate' );
$result = $def->validate ( $input, $config, $context );
$this->assertIdentical ( $output, $result );
// second test, first def fails, second def works
$def1 = new HTMLPurifier_AttrDefMock ();
$def2 = new HTMLPurifier_AttrDefMock ();
$defs = array (
&$def1,
&$def2
);
$def = new HTMLPurifier_AttrDef_CSS_Composite_Testable ( $defs );
$input = 'BOOMA';
$output = 'booma';
$def_params = array (
$input,
$config,
$context
);
$def1->expectOnce ( 'validate', $def_params );
$def1->setReturnValue ( 'validate', false, $def_params );
$def2->expectOnce ( 'validate', $def_params );
$def2->setReturnValue ( 'validate', $output, $def_params );
$result = $def->validate ( $input, $config, $context );
$this->assertIdentical ( $output, $result );
// third test, all fail, so composite faiils
$def1 = new HTMLPurifier_AttrDefMock ();
$def2 = new HTMLPurifier_AttrDefMock ();
$defs = array (
&$def1,
&$def2
);
$def = new HTMLPurifier_AttrDef_CSS_Composite_Testable ( $defs );
$input = 'BOOMA';
$output = false;
$def_params = array (
$input,
$config,
$context
);
$def1->expectOnce ( 'validate', $def_params );
$def1->setReturnValue ( 'validate', false, $def_params );
$def2->expectOnce ( 'validate', $def_params );
$def2->setReturnValue ( 'validate', false, $def_params );
$result = $def->validate ( $input, $config, $context );
$this->assertIdentical ( $output, $result );
}
}
// vim: et sw=4 sts=4