<?php

class HTMLPurifier_Strategy_ValidateAttributes_TidyTest extends HTMLPurifier_StrategyHarness
{

    function setUp() {
        parent::setUp();
        $this->obj = new HTMLPurifier_Strategy_ValidateAttributes();
        $this->config->set('HTML.TidyLevel', 'heavy');
    }

    function testConvertCenterAlign() {
        $this->assertResult(
            '<h1 align="center">Centered Headline</h1>',
            '<h1 style="text-align:center;">Centered Headline</h1>'
        );
    }

    function testConvertRightAlign() {
        $this->assertResult(
            '<h1 align="right">Right-aligned Headline</h1>',
            '<h1 style="text-align:right;">Right-aligned Headline</h1>'
        );
    }

    function testConvertLeftAlign() {
        $this->assertResult(
            '<h1 align="left">Left-aligned Headline</h1>',
            '<h1 style="text-align:left;">Left-aligned Headline</h1>'
        );
    }

    function testConvertJustifyAlign() {
        $this->assertResult(
            '<p align="justify">Justified Paragraph</p>',
            '<p style="text-align:justify;">Justified Paragraph</p>'
        );
    }

    function testRemoveInvalidAlign() {
        $this->assertResult(
            '<h1 align="invalid">Invalid Headline</h1>',
            '<h1>Invalid Headline</h1>'
        );
    }

    function testConvertTableLengths() {
        $this->assertResult(
            '<td width="5%" height="10" /><th width="10" height="5%" /><hr width="10" height="10" />',
            '<td style="width:5%;height:10px;" /><th style="width:10px;height:5%;" /><hr style="width:10px;" />'
        );
    }

    function testTdConvertNowrap() {
        $this->assertResult(
            '<td nowrap />',
            '<td style="white-space:nowrap;" />'
        );
    }

    function testCaptionConvertAlignLeft() {
        $this->assertResult(
            '<caption align="left" />',
            '<caption style="text-align:left;" />'
        );
    }

    function testCaptionConvertAlignRight() {
        $this->assertResult(
            '<caption align="right" />',
            '<caption style="text-align:right;" />'
        );
    }

    function testCaptionConvertAlignTop() {
        $this->assertResult(
            '<caption align="top" />',
            '<caption style="caption-side:top;" />'
        );
    }

    function testCaptionConvertAlignBottom() {
        $this->assertResult(
            '<caption align="bottom" />',
            '<caption style="caption-side:bottom;" />'
        );
    }

    function testCaptionRemoveInvalidAlign() {
        $this->assertResult(
            '<caption align="nonsense" />',
            '<caption />'
        );
    }

    function testTableConvertAlignLeft() {
        $this->assertResult(
            '<table align="left" />',
            '<table style="float:left;" />'
        );
    }

    function testTableConvertAlignCenter() {
        $this->assertResult(
            '<table align="center" />',
            '<table style="margin-left:auto;margin-right:auto;" />'
        );
    }

    function testTableConvertAlignRight() {
        $this->assertResult(
            '<table align="right" />',
            '<table style="float:right;" />'
        );
    }

    function testTableRemoveInvalidAlign() {
        $this->assertResult(
            '<table align="top" />',
            '<table />'
        );
    }

    function testImgConvertAlignLeft() {
        $this->assertResult(
            '<img src="foobar.jpg" alt="foobar" align="left" />',
            '<img src="foobar.jpg" alt="foobar" style="float:left;" />'
        );
    }

    function testImgConvertAlignRight() {
        $this->assertResult(
            '<img src="foobar.jpg" alt="foobar" align="right" />',
            '<img src="foobar.jpg" alt="foobar" style="float:right;" />'
        );
    }

    function testImgConvertAlignBottom() {
        $this->assertResult(
            '<img src="foobar.jpg" alt="foobar" align="bottom" />',
            '<img src="foobar.jpg" alt="foobar" style="vertical-align:baseline;" />'
        );
    }

    function testImgConvertAlignMiddle() {
        $this->assertResult(
            '<img src="foobar.jpg" alt="foobar" align="middle" />',
            '<img src="foobar.jpg" alt="foobar" style="vertical-align:middle;" />'
        );
    }

    function testImgConvertAlignTop() {
        $this->assertResult(
            '<img src="foobar.jpg" alt="foobar" align="top" />',
            '<img src="foobar.jpg" alt="foobar" style="vertical-align:top;" />'
        );
    }

    function testImgRemoveInvalidAlign() {
        $this->assertResult(
            '<img src="foobar.jpg" alt="foobar" align="outerspace" />',
            '<img src="foobar.jpg" alt="foobar" />'
        );
    }

    function testBorderConvertHVSpace() {
        $this->assertResult(
            '<img src="foo" alt="foo" hspace="1" vspace="3" />',
            '<img src="foo" alt="foo" style="margin-top:3px;margin-bottom:3px;margin-left:1px;margin-right:1px;" />'
        );
    }

    function testHrConvertSize() {
        $this->assertResult(
            '<hr size="3" />',
            '<hr style="height:3px;" />'
        );
    }

    function testHrConvertNoshade() {
        $this->assertResult(
            '<hr noshade />',
            '<hr style="color:#808080;background-color:#808080;border:0;" />'
        );
    }

    function testHrConvertAlignLeft() {
        $this->assertResult(
            '<hr align="left" />',
            '<hr style="margin-left:0;margin-right:auto;text-align:left;" />'
        );
    }

    function testHrConvertAlignCenter() {
        $this->assertResult(
            '<hr align="center" />',
            '<hr style="margin-left:auto;margin-right:auto;text-align:center;" />'
        );
    }

    function testHrConvertAlignRight() {
        $this->assertResult(
            '<hr align="right" />',
            '<hr style="margin-left:auto;margin-right:0;text-align:right;" />'
        );
    }

    function testHrRemoveInvalidAlign() {
        $this->assertResult(
            '<hr align="bottom" />',
            '<hr />'
        );
    }

    function testBrConvertClearLeft() {
        $this->assertResult(
            '<br clear="left" />',
            '<br style="clear:left;" />'
        );
    }

    function testBrConvertClearRight() {
        $this->assertResult(
            '<br clear="right" />',
            '<br style="clear:right;" />'
        );
    }

    function testBrConvertClearAll() {
        $this->assertResult(
            '<br clear="all" />',
            '<br style="clear:both;" />'
        );
    }

    function testBrConvertClearNone() {
        $this->assertResult(
            '<br clear="none" />',
            '<br style="clear:none;" />'
        );
    }

    function testBrRemoveInvalidClear() {
        $this->assertResult(
            '<br clear="foo" />',
            '<br />'
        );
    }

    function testUlConvertTypeDisc() {
        $this->assertResult(
            '<ul type="disc" />',
            '<ul style="list-style-type:disc;" />'
        );
    }

    function testUlConvertTypeSquare() {
        $this->assertResult(
            '<ul type="square" />',
            '<ul style="list-style-type:square;" />'
        );
    }

    function testUlConvertTypeCircle() {
        $this->assertResult(
            '<ul type="circle" />',
            '<ul style="list-style-type:circle;" />'
        );
    }

    function testUlConvertTypeCaseInsensitive() {
        $this->assertResult(
            '<ul type="CIRCLE" />',
            '<ul style="list-style-type:circle;" />'
        );
    }

    function testUlRemoveInvalidType() {
        $this->assertResult(
            '<ul type="a" />',
            '<ul />'
        );
    }

    function testOlConvertType1() {
        $this->assertResult(
            '<ol type="1" />',
            '<ol style="list-style-type:decimal;" />'
        );
    }

    function testOlConvertTypeLowerI() {
        $this->assertResult(
            '<ol type="i" />',
            '<ol style="list-style-type:lower-roman;" />'
        );
    }

    function testOlConvertTypeUpperI() {
        $this->assertResult(
            '<ol type="I" />',
            '<ol style="list-style-type:upper-roman;" />'
        );
    }

    function testOlConvertTypeLowerA() {
        $this->assertResult(
            '<ol type="a" />',
            '<ol style="list-style-type:lower-alpha;" />'
        );
    }

    function testOlConvertTypeUpperA() {
        $this->assertResult(
            '<ol type="A" />',
            '<ol style="list-style-type:upper-alpha;" />'
        );
    }

    function testOlRemoveInvalidType() {
        $this->assertResult(
            '<ol type="disc" />',
            '<ol />'
        );
    }

    function testLiConvertTypeCircle() {
        $this->assertResult(
            '<li type="circle" />',
            '<li style="list-style-type:circle;" />'
        );
    }

    function testLiConvertTypeA() {
        $this->assertResult(
            '<li type="A" />',
            '<li style="list-style-type:upper-alpha;" />'
        );
    }

    function testLiConvertTypeCaseSensitive() {
        $this->assertResult(
            '<li type="CIRCLE" />',
            '<li />'
        );
    }


}

// vim: et sw=4 sts=4