Package org.apache.shindig.gadgets.templates

Source Code of org.apache.shindig.gadgets.templates.RenderTagHandlerTest

/*
* 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.
*/
package org.apache.shindig.gadgets.templates;

import static org.junit.Assert.assertEquals;

import org.apache.shindig.expressions.Expressions;
import org.apache.shindig.expressions.RootELResolver;
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.parse.DefaultHtmlSerializer;
import org.apache.shindig.gadgets.parse.ParseModule;
import org.apache.shindig.gadgets.parse.nekohtml.SocialMarkupHtmlParser;
import org.json.JSONObject;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;

import java.io.IOException;
import java.util.Map;
import java.util.Set;

import javax.el.ELResolver;

public class RenderTagHandlerTest {
 
  private Expressions expressions;

  private TemplateContext context;
  private DefaultTemplateProcessor processor;
  private Map<String, JSONObject> variables;
  private ELResolver resolver;
  private TagRegistry registry;

  private SocialMarkupHtmlParser parser;
 
  private static final String TEST_NS = "http://example.com";
 
  @Before
  public void setUp() throws Exception {
    expressions = Expressions.forTesting();
    variables = Maps.newHashMap();
    Set<TagHandler> handlers = ImmutableSet.of((TagHandler) new RenderTagHandler());
    registry = new DefaultTagRegistry(handlers);

    processor = new DefaultTemplateProcessor(expressions);
    resolver = new RootELResolver();
    parser = new SocialMarkupHtmlParser(new ParseModule.DOMImplementationProvider().get());
    Gadget gadget = new Gadget();
    gadget.setContext(new GadgetContext());
    context = new TemplateContext(gadget, variables);
   
    addVariable("foo", new JSONObject("{ title: 'bar' }"));
  }

  @Test
  public void renderAllChildren() throws Exception {
    runTest("Bar",
        "[<os:Render/>]",
        "<foo:Bar>Hello</foo:Bar>", "[Hello]");
  }
 
  @Test
  public void renderSingleChildren() throws Exception {
    runTest("Panel",
        "<os:Render content='header'/> <os:Render content='footer'/>",
        "<foo:Panel><footer>Second</footer><header>First</header></foo:Panel>",
        "First Second");
  }
 
  private void runTest(String tagName, String tagMarkup, String templateMarkup,
      String expectedResult) throws GadgetException, IOException {
    Element templateDef = parseTemplate(templateMarkup);
    Element tagInstance = parseTemplate(tagMarkup);
   
    templateDef.getOwnerDocument().adoptNode(tagInstance);
    TagHandler tagHandler =
      new TemplateBasedTagHandler(tagInstance, TEST_NS, tagName);

    TagRegistry reg = new CompositeTagRegistry(ImmutableList.of(
        registry,
        new DefaultTagRegistry(ImmutableSet.of(tagHandler))));
       
    DocumentFragment result = processor.processTemplate(templateDef, context, resolver, reg);
    String output = serialize(result);
    assertEquals(expectedResult, output);
  }
 
  private Element parseTemplate(String markup) throws GadgetException {   
    String content = "<script type=\"text/os-template\" xmlns:foo=\"" + TEST_NS +
        "\" xmlns:os=\"" + TagHandler.OPENSOCIAL_NAMESPACE + "\">" + markup + "</script>";
    Document document = parser.parseDom(content);
    return (Element) document.getElementsByTagName("script").item(0);
  }
 
  private String serialize(Node node) throws IOException {
    StringBuilder sb = new StringBuilder();
    NodeList children = node.getChildNodes();
    for (int i = 0; i < children.getLength(); i++) {
      Node child = children.item(i);
      new DefaultHtmlSerializer().serialize(child, sb);
    }
    return sb.toString();
  }
 
  private void addVariable(String key, JSONObject value) {
    variables.put(key, value);
  }
 
}
TOP

Related Classes of org.apache.shindig.gadgets.templates.RenderTagHandlerTest

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.