/* * 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.rewrite; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.replay; import org.apache.shindig.common.uri.Uri; import org.apache.shindig.gadgets.Gadget; import org.apache.shindig.gadgets.GadgetContext; import org.apache.shindig.gadgets.parse.ParseModule; import org.apache.shindig.gadgets.spec.GadgetSpec; import org.apache.shindig.gadgets.spec.View; import org.apache.shindig.gadgets.uri.UriCommon.Param; import org.junit.Before; import org.w3c.dom.Attr; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.name.Names; import com.google.inject.util.Modules; public class DomWalkerTestBase { protected static final Uri GADGET_URI = Uri.parse("http://example.com/gadget.xml"); protected static final String CONTAINER = "container"; protected Document doc; @Before public void setUp() { Injector injector = Guice.createInjector(Modules.override(new ParseModule()) .with(new AbstractModule() { @Override protected void configure() { bind(Integer.class).annotatedWith( Names.named("shindig.cache.lru.default.capacity")) .toInstance(0); } })); DOMImplementation domImpl = injector.getInstance(DOMImplementation.class); doc = domImpl.createDocument(null, null, null); } protected Element elem(String tag, String... attrStrs) { Element elem = doc.createElement(tag); for (int i = 0; attrStrs != null && i < attrStrs.length; i += 2) { Attr attr = doc.createAttribute(attrStrs[i]); attr.setValue(attrStrs[i+1]); elem.setAttributeNode(attr); } return elem; } protected Element htmlDoc(Node[] headNodes, Node... bodyNodes) { // Clear document of all nodes. while (doc.hasChildNodes()) { doc.removeChild(doc.getFirstChild()); } // Recreate document with valid HTML structure. Element html = elem("html"); Element head = elem("head"); appendAll(head, headNodes); Element body = elem("body"); appendAll(body, bodyNodes); html.appendChild(head); html.appendChild(body); doc.appendChild(html); return html; } private void appendAll(Node parent, Node[] children) { if (children == null || children.length == 0) return; for (Node child : children) { parent.appendChild(child); } } protected Gadget gadget() { return gadget(false, false); } protected Gadget gadget(boolean debug, boolean ignoreCache) { return gadget(debug, ignoreCache, null); } protected Gadget gadget(boolean debug, boolean ignoreCache, Uri curviewHref) { GadgetSpec spec = createMock(GadgetSpec.class); expect(spec.getUrl()).andReturn(GADGET_URI).anyTimes(); Gadget gadget = createMock(Gadget.class); expect(gadget.getSpec()).andReturn(spec).anyTimes(); GadgetContext ctx = createMock(GadgetContext.class); expect(ctx.getParameter(Param.REFRESH.getKey())).andReturn(null).anyTimes(); expect(ctx.getDebug()).andReturn(debug).anyTimes(); expect(ctx.getIgnoreCache()).andReturn(ignoreCache).anyTimes(); expect(ctx.getContainer()).andReturn(CONTAINER).anyTimes(); expect(gadget.getContext()).andReturn(ctx).anyTimes(); View currentView = createMock(View.class); expect(currentView.getHref()).andReturn(curviewHref).anyTimes(); expect(gadget.getCurrentView()).andReturn(currentView).anyTimes(); replay(ctx, spec, currentView, gadget); return gadget; } }