Package javax.swing.text.html

Source Code of javax.swing.text.html.StyleSheet_TranslateHTMLToCSS

/*
*  Licensed to the Apache Software Foundation (ASF) under one or more
*  contributor license agreements.  See the NOTICE file distributed with
*  this work for additional information regarding copyright ownership.
*  The ASF licenses this file to You under the Apache License, Version 2.0
*  (the "License"); you may not use this file except in compliance with
*  the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*/
/**
* @author Alexey A. Ivanov
*/
package javax.swing.text.html;

import java.awt.Rectangle;
import java.io.StringReader;

import javax.swing.BasicSwingTestCase;
import javax.swing.event.DocumentEvent;
import javax.swing.text.AttributeSet;
import javax.swing.text.DefaultStyledDocument;
import javax.swing.text.Document;
import javax.swing.text.Element;
import javax.swing.text.MutableAttributeSet;
import javax.swing.text.SimpleAttributeSet;
import javax.swing.text.StyledDocument;
import javax.swing.text.View;
import javax.swing.text.AbstractDocument.AbstractElement;
import javax.swing.text.AbstractDocument.BranchElement;
import javax.swing.text.StyleContext.NamedStyle;
import javax.swing.text.html.HTMLDocument.BlockElement;
import javax.swing.text.html.HTMLDocument.RunElement;

public class StyleSheet_TranslateHTMLToCSS extends BasicSwingTestCase {
    private static class TestDocument extends HTMLDocument {
        public TestDocument() {
            super();
        }

        public TestDocument(final StyleSheet ss) {
            super(ss);
        }

        public void lockWrite() {
            writeLock();
        }

        public void unlockWrite() {
            writeUnlock();
        }
    }

    private TestDocument doc;
    private StyleSheet ss;
    private AttributeSet attr;

    protected void setUp() throws Exception {
        super.setUp();
        setIgnoreNotImplemented(true);
        doc = new TestDocument();
        doc.insertString(0, "normal test text", null);
        ss = new StyleSheet();

        doc.lockWrite();
    }

    protected void tearDown() throws Exception {
        super.tearDown();

        doc.unlockWrite();
    }

    public void testTranslateHTMLToCSSBody() throws Exception {
        AbstractElement body =
            (AbstractElement)doc.getDefaultRootElement().getElement(0);
        assertEquals("body", body.getName());
        assertTrue(body instanceof BlockElement);

        body.addAttribute(HTML.Attribute.BGCOLOR, "#ffffff");
        body.addAttribute(HTML.Attribute.BACKGROUND, "bg.jpg");
        body.addAttribute(HTML.Attribute.TEXT, "black");
        body.addAttribute(HTML.Attribute.LINK, "blue");
        body.addAttribute(HTML.Attribute.ALINK, "red");
        body.addAttribute(HTML.Attribute.VLINK, "purple");
        attr = ss.translateHTMLToCSS(body);
        assertSame(NamedStyle.class, attr.getClass());
        assertNull(((NamedStyle)attr).getName());
        assertEquals(3, attr.getAttributeCount());
        assertEquals(isHarmony() ? "url(bg.jpg)" : "bg.jpg",
                     attr.getAttribute(CSS.Attribute.BACKGROUND_IMAGE)
                     .toString());
        assertEquals("#ffffff",
                     attr.getAttribute(CSS.Attribute.BACKGROUND_COLOR)
                     .toString());
        assertEquals("black",
                     attr.getAttribute(CSS.Attribute.COLOR).toString());
    }

    public void testTranslateHTMLToCSSP() throws Exception {
        AbstractElement p =
            (AbstractElement)doc.getDefaultRootElement()
                             .getElement(0).getElement(0);
        assertEquals("p", p.getName());
        assertTrue(p instanceof BlockElement);

        p.addAttribute(HTML.Attribute.BGCOLOR, "#ffffff");
        p.addAttribute(HTML.Attribute.BACKGROUND, "bg.jpg");
        p.addAttribute(HTML.Attribute.TEXT, "black");
        p.addAttribute(HTML.Attribute.LINK, "blue");
        p.addAttribute(HTML.Attribute.ALINK, "red");
        p.addAttribute(HTML.Attribute.VLINK, "purple");

        attr = ss.translateHTMLToCSS(p);
        assertSame(NamedStyle.class, attr.getClass());
        assertNull(((NamedStyle)attr).getName());

        assertEquals(4, attr.getAttributeCount());
        assertEquals(isHarmony() ? "url(bg.jpg)" : "bg.jpg",
                     attr.getAttribute(CSS.Attribute.BACKGROUND_IMAGE)
                     .toString());
        assertEquals("#ffffff",
                     attr.getAttribute(CSS.Attribute.BACKGROUND_COLOR)
                     .toString());
        assertEquals("black",
                     attr.getAttribute(CSS.Attribute.COLOR).toString());

        assertEquals("0",
                     attr.getAttribute(CSS.Attribute.MARGIN_TOP).toString());
    }

    public void testTranslateHTMLToCSSPContent() throws Exception {
        AbstractElement content =
            (AbstractElement)doc.getDefaultRootElement()
                             .getElement(0).getElement(0).getElement(0);
        assertEquals("content", content.getName());
        assertTrue(content instanceof RunElement);

        content.addAttribute(HTML.Attribute.BGCOLOR, "#ffffff");
        content.addAttribute(HTML.Attribute.BACKGROUND, "bg.jpg");
        content.addAttribute(HTML.Attribute.TEXT, "black");
        content.addAttribute(HTML.Attribute.LINK, "blue");
        content.addAttribute(HTML.Attribute.ALINK, "red");
        content.addAttribute(HTML.Attribute.VLINK, "purple");

        attr = ss.translateHTMLToCSS(content);
        assertSame(NamedStyle.class, attr.getClass());
        assertNull(((NamedStyle)attr).getName());
        if (isHarmony()) {
            assertEquals("url(bg.jpg)",
                         attr.getAttribute(CSS.Attribute.BACKGROUND_IMAGE)
                         .toString());
            assertEquals("#ffffff",
                         attr.getAttribute(CSS.Attribute.BACKGROUND_COLOR)
                         .toString());
            assertEquals("black",
                         attr.getAttribute(CSS.Attribute.COLOR).toString());
        } else {
            assertEquals(0, attr.getAttributeCount());
        }
    }

    public void testTranslateHTMLToCSSStyledDocument() throws Exception {
        StyledDocument doc = new DefaultStyledDocument();
        doc.insertString(0, "line1\nline2", null);

        MutableAttributeSet mas = new SimpleAttributeSet();
        mas.addAttribute(HTML.Attribute.BGCOLOR, "#ffffff");
        mas.addAttribute(HTML.Attribute.TEXT, "black");
        doc.setParagraphAttributes(0, 1, mas, false);

        AbstractElement branch =
            (AbstractElement)doc.getDefaultRootElement().getElement(0);
        assertEquals("paragraph", branch.getName());
        assertTrue(branch instanceof BranchElement);
        assertSame(BranchElement.class, branch.getClass());


        attr = ss.translateHTMLToCSS(branch);
        assertSame(NamedStyle.class, attr.getClass());
        assertNull(((NamedStyle)attr).getName());

        assertEquals(2, attr.getAttributeCount());
        assertEquals("#ffffff",
                     attr.getAttribute(CSS.Attribute.BACKGROUND_COLOR)
                     .toString());
        assertEquals("black",
                     attr.getAttribute(CSS.Attribute.COLOR).toString());
    }

    public void testTranslateHTMLToCSSA() throws Exception {
        doc.remove(0, doc.getLength());
        HTMLEditorKit kit = new HTMLEditorKit();
        kit.read(new StringReader("<a href=\"http://go\">link</a>"), doc, 0);

        AbstractElement body =
            (AbstractElement)doc.getDefaultRootElement().getElement(1);
        assertEquals("body", body.getName());

        body.addAttribute(HTML.Attribute.BGCOLOR, "#ffffff");
        body.addAttribute(HTML.Attribute.BACKGROUND, "bg.jpg");
        body.addAttribute(HTML.Attribute.TEXT, "black");
        body.addAttribute(HTML.Attribute.LINK, "blue");
        body.addAttribute(HTML.Attribute.ALINK, "red");
        body.addAttribute(HTML.Attribute.VLINK, "purple");

        AbstractElement a = (AbstractElement)doc.getCharacterElement(2);
        assertNotNull(a.getAttribute(HTML.Tag.A));
        attr = ss.translateHTMLToCSS(a);
        assertNull(((NamedStyle)attr).getName());
        assertEquals(0, attr.getAttributeCount());
    }

    public void testTranslateHTMLToCSSAlignLeft() throws Exception {
        AbstractElement branch =
            (AbstractElement)doc.getDefaultRootElement().getElement(0);
        assertEquals("body", branch.getName());

        branch.addAttribute(HTML.Attribute.ALIGN, "left");
        attr = ss.translateHTMLToCSS(branch);
        assertEquals(1, attr.getAttributeCount());
        assertEquals("left",
                     attr.getAttribute(CSS.Attribute.TEXT_ALIGN).toString());
    }

    public void testTranslateHTMLToCSSAlignCenter() throws Exception {
        AbstractElement branch =
            (AbstractElement)doc.getDefaultRootElement().getElement(0);
        assertEquals("body", branch.getName());

        branch.addAttribute(HTML.Attribute.ALIGN, "center");
        attr = ss.translateHTMLToCSS(branch);
        assertEquals(1, attr.getAttributeCount());
        assertEquals("center",
                     attr.getAttribute(CSS.Attribute.TEXT_ALIGN).toString());
    }

    public void testTranslateHTMLToCSSAlignRight() throws Exception {
        AbstractElement branch =
            (AbstractElement)doc.getDefaultRootElement().getElement(0);
        assertEquals("body", branch.getName());

        branch.addAttribute(HTML.Attribute.ALIGN, "right");
        attr = ss.translateHTMLToCSS(branch);
        assertEquals(1, attr.getAttributeCount());
        assertEquals("right",
                     attr.getAttribute(CSS.Attribute.TEXT_ALIGN).toString());
    }

    public void testTranslateHTMLToCSSAlignJustify() throws Exception {
        AbstractElement branch =
            (AbstractElement)doc.getDefaultRootElement().getElement(0);
        assertEquals("body", branch.getName());

        branch.addAttribute(HTML.Attribute.ALIGN, "justify");
        attr = ss.translateHTMLToCSS(branch);
        assertEquals(1, attr.getAttributeCount());
        assertEquals("justify",
                     attr.getAttribute(CSS.Attribute.TEXT_ALIGN).toString());
    }

    public void testTranslateHTMLToCSSAlignTop() throws Exception {
        AbstractElement branch =
            (AbstractElement)doc.getDefaultRootElement().getElement(0);
        assertEquals("body", branch.getName());

        branch.addAttribute(HTML.Attribute.ALIGN, "top");
        attr = ss.translateHTMLToCSS(branch);
        if (isHarmony()) {
            assertEquals(0, attr.getAttributeCount());
            assertNull(attr.getAttribute(CSS.Attribute.TEXT_ALIGN));
        } else {
            assertEquals(1, attr.getAttributeCount());
            assertEquals("top",
                         attr.getAttribute(CSS.Attribute.TEXT_ALIGN).toString());
        }
    }

    public void testTranslateHTMLToCSSAlignBottom() throws Exception {
        AbstractElement branch =
            (AbstractElement)doc.getDefaultRootElement().getElement(0);
        assertEquals("body", branch.getName());

        branch.addAttribute(HTML.Attribute.ALIGN, "bottom");
        attr = ss.translateHTMLToCSS(branch);
        if (isHarmony()) {
            assertEquals(0, attr.getAttributeCount());
            assertNull(attr.getAttribute(CSS.Attribute.TEXT_ALIGN));
        } else {
            assertEquals(1, attr.getAttributeCount());
            assertEquals("bottom",
                         attr.getAttribute(CSS.Attribute.TEXT_ALIGN).toString());
        }
    }

    public void testTranslateHTMLToCSSAlignChar() throws Exception {
        AbstractElement branch =
            (AbstractElement)doc.getDefaultRootElement().getElement(0);
        assertEquals("body", branch.getName());

        branch.addAttribute(HTML.Attribute.ALIGN, "char");
        attr = ss.translateHTMLToCSS(branch);
        if (isHarmony()) {
            assertEquals(0, attr.getAttributeCount());
            assertNull(attr.getAttribute(CSS.Attribute.TEXT_ALIGN));
        } else {
            assertEquals(1, attr.getAttributeCount());
            assertEquals("char",
                         attr.getAttribute(CSS.Attribute.TEXT_ALIGN).toString());
        }
    }

    public void testTranslateHTMLToCSSVAlignTop() throws Exception {
        AbstractElement branch =
            (AbstractElement)doc.getDefaultRootElement().getElement(0);
        assertEquals("body", branch.getName());

        branch.addAttribute(HTML.Attribute.VALIGN, "top");
        attr = ss.translateHTMLToCSS(branch);
        assertEquals(1, attr.getAttributeCount());
        assertEquals("top",
                     attr.getAttribute(CSS.Attribute.VERTICAL_ALIGN).toString());
    }

    public void testTranslateHTMLToCSSVAlignMiddle() throws Exception {
        AbstractElement branch =
            (AbstractElement)doc.getDefaultRootElement().getElement(0);
        assertEquals("body", branch.getName());

        branch.addAttribute(HTML.Attribute.VALIGN, "middle");
        attr = ss.translateHTMLToCSS(branch);
        assertEquals(1, attr.getAttributeCount());
        assertEquals("middle",
                     attr.getAttribute(CSS.Attribute.VERTICAL_ALIGN).toString());
    }

    public void testTranslateHTMLToCSSVAlignBottom() throws Exception {
        AbstractElement branch =
            (AbstractElement)doc.getDefaultRootElement().getElement(0);
        assertEquals("body", branch.getName());

        branch.addAttribute(HTML.Attribute.VALIGN, "bottom");
        attr = ss.translateHTMLToCSS(branch);
        assertEquals(1, attr.getAttributeCount());
        assertEquals("bottom",
                     attr.getAttribute(CSS.Attribute.VERTICAL_ALIGN).toString());
    }

    public void testTranslateHTMLToCSSVAlignBaseline() throws Exception {
        AbstractElement branch =
            (AbstractElement)doc.getDefaultRootElement().getElement(0);
        assertEquals("body", branch.getName());

        branch.addAttribute(HTML.Attribute.VALIGN, "baseline");
        attr = ss.translateHTMLToCSS(branch);
        assertEquals(1, attr.getAttributeCount());
        assertEquals("baseline",
                     attr.getAttribute(CSS.Attribute.VERTICAL_ALIGN).toString());
    }

    public void testTranslateHTMLToCSSWidth() throws Exception {
        AbstractElement branch = (AbstractElement)doc.getParagraphElement(0);
        assertEquals("p", branch.getName());

        branch.addAttribute(HTML.Attribute.WIDTH, "50%");
        attr = ss.translateHTMLToCSS(branch);
        assertEquals(2, attr.getAttributeCount());
        assertEquals("50%",
                     attr.getAttribute(CSS.Attribute.WIDTH).toString());
        assertEquals("0",
                     attr.getAttribute(CSS.Attribute.MARGIN_TOP).toString());
    }

    public void testTranslateHTMLToCSSHeight() throws Exception {
        AbstractElement branch = (AbstractElement)doc.getParagraphElement(0);
        assertEquals("p", branch.getName());

        branch.addAttribute(HTML.Attribute.HEIGHT, "331");
        attr = ss.translateHTMLToCSS(branch);
        assertEquals(2, attr.getAttributeCount());
        assertEquals("331" + (isHarmony() ? "pt" : ""),
                     attr.getAttribute(CSS.Attribute.HEIGHT).toString());
        assertEquals("0",
                     attr.getAttribute(CSS.Attribute.MARGIN_TOP).toString());
    }

    public void testTranslateHTMLToCSSStyle() throws Exception {
        AbstractElement branch = (AbstractElement)doc.getParagraphElement(0);
        assertEquals("p", branch.getName());

        branch.addAttribute(CSS.Attribute.BORDER_BOTTOM_WIDTH, "1pt");
        attr = ss.translateHTMLToCSS(branch);
        assertEquals(2, attr.getAttributeCount());
        assertEquals("1pt", attr.getAttribute(CSS.Attribute.BORDER_BOTTOM_WIDTH)
                            .toString());
        assertEquals("0",
                     attr.getAttribute(CSS.Attribute.MARGIN_TOP).toString());
    }

    public void testTranslateHTMLToCSSViewAttributes() throws Exception {
        final Marker gva = new Marker(true);
        final Marker th2c = new Marker(true);
        ss = new StyleSheet() {
            public AttributeSet getViewAttributes(View v) {
                gva.setOccurred();
                return super.getViewAttributes(v);
            }
            public AttributeSet translateHTMLToCSS(AttributeSet htmlAttrSet) {
                th2c.setOccurred();
                return super.translateHTMLToCSS(htmlAttrSet);
            }
        };
        doc = new TestDocument(ss);
        doc.lockWrite();
        final AbstractElement branch =
            (AbstractElement)doc.getParagraphElement(0);
        assertEquals("p", branch.getName());

        assertFalse(gva.isOccurred());
        assertFalse(th2c.isOccurred());
        final View view = new InlineView(branch);
        assertTrue(gva.isOccurred());
        assertTrue(th2c.isOccurred());

        final AttributeSet va = view.getAttributes();
        assertFalse(gva.isOccurred());
        assertFalse(th2c.isOccurred());

        assertSame(va, view.getAttributes());
        assertEquals(1, va.getAttributeCount());
        assertEquals("0",
                     va.getAttribute(CSS.Attribute.MARGIN_TOP).toString());

        branch.addAttribute(HTML.Attribute.WIDTH, "200");

        assertFalse(gva.isOccurred());
        assertFalse(th2c.isOccurred());

        view.changedUpdate(new DocumentEvent() {
            public int getOffset() {
                return branch.getStartOffset();
            }
            public int getLength() {
                return branch.getEndOffset() - branch.getStartOffset();
            }
            public Document getDocument() {
                return doc;
            }
            public EventType getType() {
                return EventType.CHANGE;
            }
            public ElementChange getChange(final Element elem) {
                return null;
            }
        }, new Rectangle(), null);
        assertTrue(gva.isOccurred());
        assertTrue(th2c.isOccurred());

        final AttributeSet mva = view.getAttributes();
        assertFalse(gva.isOccurred());
        assertFalse(th2c.isOccurred());

        assertNotSame(va, mva);
        assertSame(mva, view.getAttributes());
        assertEquals(2, mva.getAttributeCount());
    }
}
TOP

Related Classes of javax.swing.text.html.StyleSheet_TranslateHTMLToCSS

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.