Package com.salas.bb.remixfeeds.templates

Source Code of com.salas.bb.remixfeeds.templates.TestTemplate

// BlogBridge -- RSS feed reader, manager, and web based service
// Copyright (C) 2002-2006 by R. Pito Salas
//
// This program is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free Software Foundation;
// either version 2 of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
// without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License along with this program;
// if not, write to the Free Software Foundation, Inc., 59 Temple Place,
// Suite 330, Boston, MA 02111-1307 USA
//
// Contact: R. Pito Salas
// mailto:pitosalas@users.sourceforge.net
// More information: about BlogBridge
// http://www.blogbridge.com
// http://sourceforge.net/projects/blogbridge
//
// $Id: TestTemplate.java,v 1.3 2008/04/03 08:53:25 spyromus Exp $
//

package com.salas.bb.remixfeeds.templates;

import com.salas.bb.domain.DirectFeed;
import com.salas.bb.domain.IArticle;
import com.salas.bb.domain.StandardArticle;
import junit.framework.TestCase;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;

/**
* Tests template rendering.
*/
@SuppressWarnings({"MagicNumber"})
public class TestTemplate extends TestCase
{
    private static final String TEMPLATE_EMPTY = "";
    private static final String TEMPLATE_SINGLE =
        "PURL: ${article.url} PTitle: ${article.title} PText: ${article.text} PDate: ${article.date} " +
        "FURL: ${feed.url} FTitle: ${feed.title}";
    private static final String TEMPLATE_MULTI =
        "# for each article\n" +
        TEMPLATE_SINGLE + "\n" +
        "# endfor";

    private Template template;
    private Set<IArticle> singleArticle;
    private Set<IArticle> multipleArticles;

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

        template = new Template();

        // Sample date
        Calendar c = new GregorianCalendar(2008, 0, 1, 10, 50, 30);
        Date date = c.getTime();

        // Sample feed
        DirectFeed feed = new DirectFeed();
        feed.setCustomTitle("F1 <b>Title</b>");
        feed.setXmlURL(new URL("http://f 1/"));

        // Sample article
        StandardArticle a1 = article(feed, 1, date);
        StandardArticle a2 = article(feed, 2, date);

        // Sample single-article set
        LinkedHashSet<IArticle> set = new LinkedHashSet<IArticle>();
        set.add(a1);
        singleArticle = set;

        set = new LinkedHashSet<IArticle>();
        set.add(a1);
        set.add(a2);
        multipleArticles = set;
    }

    /**
     * Creates a sample article.
     *
     * @param feed  feed to link to.
     * @param id    id.
     * @param date  pub. date.
     *
     * @return article.
     *
     * @throws MalformedURLException if URL is invalid (never).
     */
    private StandardArticle article(DirectFeed feed, int id, Date date)
        throws MalformedURLException
    {
        StandardArticle a = new StandardArticle("A" + id + " <i>Text</i>");
        a.setTitle("A" + id + " <b>Title</b>");
        a.setPublicationDate(date);
        a.setLink(new URL("http://a " + id + "/"));
        feed.appendArticle(a);
        return a;
    }

    // ------------------------------------------------------------------------
    // Basics
    // ------------------------------------------------------------------------

    /** Setting correct template text. */
    public void testSetText_Valid()
    {
        template.setText("a");
        assertEquals("a", template.getText());
    }

    /** Setting incorrect template text. */
    public void testSetText_Invalid()
    {
        try
        {
            template.setText("# if");
            fail("InvalidSyntaxException is expected");
        } catch (InvalidSyntaxException e)
        {
            // Expected
        }
    }

    // ------------------------------------------------------------------------
    // Rendering
    // ------------------------------------------------------------------------

    /** Rendering of the empty template. */
    public void testRenderTemplate_Empty()
    {
        template.setText(TEMPLATE_EMPTY);
        assertEquals("", template.render(singleArticle));
    }

    /** Rendering of a single-mode template. */
    public void testRenderTemplate_Single()
    {
        template.setText(TEMPLATE_SINGLE);
        String html = template.render(singleArticle);
        assertEquals(result(1), html);
    }

    /** Rendering of a multi-mode template. */
    public void testRenderTemplate_Multiple()
    {
        template.setText(TEMPLATE_MULTI);
        String html = template.render(multipleArticles);
        assertEquals(result(1, 2), html);
    }

    public void testRenderTemplate_SingleWithElse()
    {
        template.setText(
            "before\n" +
            "# if single article\n" +
            "single1\n" +
            "single2\n" +
            "# else\n" +
            "multiple\n" +
            "# endif\n" +
            "after");

        assertEquals("before\nsingle1\nsingle2\nafter\n", template.render(singleArticle));
    }

    public void testRenderTemplate_SingleWithoutElse()
    {
        template.setText(
            "before\n" +
            "# if single article\n" +
            "single1\n" +
            "single2\n" +
            "# endif\n" +
            "after");

        assertEquals("before\nsingle1\nsingle2\nafter\n", template.render(singleArticle));
    }

    public void testRenderTemplate_MultipleWithoutLoop()
    {
        template.setText(
            "before\n" +
            "# if single article\n" +
            "single\n" +
            "# else\n" +
            "multiple1\n" +
            "multiple2\n" +
            "# endif\n" +
            "after");

        assertEquals("before\nmultiple1\nmultiple2\nafter\n", template.render(multipleArticles));
    }

    public void testRenderTemplate_MultipleWithLoop()
    {
        template.setText(
            "before\n" +
            "# if single article\n" +
            "single\n" +
            "# else\n" +
            "# for each article\n" +
            "multiple1\n" +
            "multiple2\n" +
            "# endfor\n" +
            "# endif\n" +
            "after");

        assertEquals("before\nmultiple1\nmultiple2\nmultiple1\nmultiple2\nafter\n", template.render(multipleArticles));
    }

    /**
     * Returns the expected result of the template work.
     *
     * @param ids ids.
     *
     * @return result.
     */
    private Object result(int ... ids)
    {
        String res = "";

        for (int id : ids)
        {
            res += "PURL: http://a " + id + "/ PTitle: A" + id + " <b>Title</b> PText: A" + id + " <i>Text</i> PDate: Jan 1, 2008 " +
                   "FURL: http://f 1/ FTitle: F1 <b>Title</b>\n";
        }

        return res;
    }
}
TOP

Related Classes of com.salas.bb.remixfeeds.templates.TestTemplate

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.