def = new HTMLPurifier_AttrDef_CSS (); } public function test() { // regular cases, singular $this->assertDef ( 'text-align:right;' ); $this->assertDef ( 'border-left-style:solid;' ); $this->assertDef ( 'border-style:solid dotted;' ); $this->assertDef ( 'clear:right;' ); $this->assertDef ( 'float:left;' ); $this->assertDef ( 'font-style:italic;' ); $this->assertDef ( 'font-variant:small-caps;' ); $this->assertDef ( 'font-weight:bold;' ); $this->assertDef ( 'list-style-position:outside;' ); $this->assertDef ( 'list-style-type:upper-roman;' ); $this->assertDef ( 'list-style:upper-roman inside;' ); $this->assertDef ( 'text-transform:capitalize;' ); $this->assertDef ( 'background-color:rgb(0,0,255);' ); $this->assertDef ( 'background-color:transparent;' ); $this->assertDef ( 'background:#333 url("chess.png") repeat fixed 50% top;' ); $this->assertDef ( 'color:#F00;' ); $this->assertDef ( 'border-top-color:#F00;' ); $this->assertDef ( 'border-color:#F00 #FF0;' ); $this->assertDef ( 'border-top-width:thin;' ); $this->assertDef ( 'border-top-width:12px;' ); $this->assertDef ( 'border-width:5px 1px 4px 2px;' ); $this->assertDef ( 'border-top-width:-12px;', false ); $this->assertDef ( 'letter-spacing:normal;' ); $this->assertDef ( 'letter-spacing:2px;' ); $this->assertDef ( 'word-spacing:normal;' ); $this->assertDef ( 'word-spacing:3em;' ); $this->assertDef ( 'font-size:200%;' ); $this->assertDef ( 'font-size:larger;' ); $this->assertDef ( 'font-size:12pt;' ); $this->assertDef ( 'line-height:2;' ); $this->assertDef ( 'line-height:2em;' ); $this->assertDef ( 'line-height:20%;' ); $this->assertDef ( 'line-height:normal;' ); $this->assertDef ( 'line-height:-20%;', false ); $this->assertDef ( 'margin-left:5px;' ); $this->assertDef ( 'margin-right:20%;' ); $this->assertDef ( 'margin-top:auto;' ); $this->assertDef ( 'margin:auto 5%;' ); $this->assertDef ( 'padding-bottom:5px;' ); $this->assertDef ( 'padding-top:20%;' ); $this->assertDef ( 'padding:20% 10%;' ); $this->assertDef ( 'padding-top:-20%;', false ); $this->assertDef ( 'text-indent:3em;' ); $this->assertDef ( 'text-indent:5%;' ); $this->assertDef ( 'text-indent:-3em;' ); $this->assertDef ( 'width:50%;' ); $this->assertDef ( 'width:50px;' ); $this->assertDef ( 'width:auto;' ); $this->assertDef ( 'width:-50px;', false ); $this->assertDef ( 'text-decoration:underline;' ); $this->assertDef ( 'font-family:sans-serif;' ); $this->assertDef ( "font-family:Gill, 'Times New Roman', sans-serif;" ); $this->assertDef ( 'font:12px serif;' ); $this->assertDef ( 'border:1px solid #000;' ); $this->assertDef ( 'border-bottom:2em double #FF00FA;' ); $this->assertDef ( 'border-collapse:collapse;' ); $this->assertDef ( 'border-collapse:separate;' ); $this->assertDef ( 'caption-side:top;' ); $this->assertDef ( 'vertical-align:middle;' ); $this->assertDef ( 'vertical-align:12px;' ); $this->assertDef ( 'vertical-align:50%;' ); $this->assertDef ( 'table-layout:fixed;' ); $this->assertDef ( 'list-style-image:url("nice.jpg");' ); $this->assertDef ( 'list-style:disc url("nice.jpg") inside;' ); $this->assertDef ( 'background-image:url("foo.jpg");' ); $this->assertDef ( 'background-image:none;' ); $this->assertDef ( 'background-repeat:repeat-y;' ); $this->assertDef ( 'background-attachment:fixed;' ); $this->assertDef ( 'background-position:left 90%;' ); $this->assertDef ( 'border-spacing:1em;' ); $this->assertDef ( 'border-spacing:1em 2em;' ); // duplicates $this->assertDef ( 'text-align:right;text-align:left;', 'text-align:left;' ); // a few composites $this->assertDef ( 'font-variant:small-caps;font-weight:900;' ); $this->assertDef ( 'float:right;text-align:right;' ); // selective removal $this->assertDef ( 'text-transform:capitalize;destroy:it;', 'text-transform:capitalize;' ); // inherit works for everything $this->assertDef ( 'text-align:inherit;' ); // bad props $this->assertDef ( 'nodice:foobar;', false ); $this->assertDef ( 'position:absolute;', false ); $this->assertDef ( 'background-image:url(\'javascript:alert\(\)\');', false ); // airy input $this->assertDef ( ' font-weight : bold; color : #ff0000', 'font-weight:bold;color:#ff0000;' ); // case-insensitivity $this->assertDef ( 'FLOAT:LEFT;', 'float:left;' ); // !important stripping $this->assertDef ( 'float:left !important;', 'float:left;' ); } public function testProprietary() { $this->config->set ( 'CSS.Proprietary', true ); $this->assertDef ( 'scrollbar-arrow-color:#ff0;' ); $this->assertDef ( 'scrollbar-base-color:#ff6347;' ); $this->assertDef ( 'scrollbar-darkshadow-color:#ffa500;' ); $this->assertDef ( 'scrollbar-face-color:#008080;' ); $this->assertDef ( 'scrollbar-highlight-color:#ff69b4;' ); $this->assertDef ( 'scrollbar-shadow-color:#f0f;' ); $this->assertDef ( 'opacity:.2;' ); $this->assertDef ( '-moz-opacity:.2;' ); $this->assertDef ( '-khtml-opacity:.2;' ); $this->assertDef ( 'filter:alpha(opacity=20);' ); } public function testImportant() { $this->config->set ( 'CSS.AllowImportant', true ); $this->assertDef ( 'float:left !important;' ); } public function testTricky() { $this->config->set ( 'CSS.AllowTricky', true ); $this->assertDef ( 'display:none;' ); $this->assertDef ( 'visibility:visible;' ); $this->assertDef ( 'overflow:scroll;' ); } public function testForbidden() { $this->config->set ( 'CSS.ForbiddenProperties', 'float' ); $this->assertDef ( 'float:left;', false ); $this->assertDef ( 'text-align:right;' ); } public function testTrusted() { $this->config->set ( 'CSS.Trusted', true ); $this->assertDef ( 'position:relative;' ); $this->assertDef ( 'left:2px;' ); $this->assertDef ( 'right:100%;' ); $this->assertDef ( 'top:auto;' ); $this->assertDef ( 'z-index:-2;' ); } } // vim: et sw=4 sts=4