| /* |
| * Copyright 2009 Google Inc. |
| * |
| * Licensed 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 com.google.gwt.safehtml.rebind; |
| |
| import com.google.gwt.safehtml.rebind.ParsedHtmlTemplate.HtmlContext; |
| import com.google.gwt.safehtml.rebind.ParsedHtmlTemplate.LiteralChunk; |
| import com.google.gwt.safehtml.rebind.ParsedHtmlTemplate.ParameterChunk; |
| import com.google.gwt.safehtml.rebind.ParsedHtmlTemplate.TemplateChunk; |
| |
| import junit.framework.TestCase; |
| |
| import java.util.Iterator; |
| import java.util.List; |
| |
| /** |
| * Tests for {@link ParsedHtmlTemplate}. |
| * |
| */ |
| public final class ParsedHtmlTemplateTest extends TestCase { |
| public void testAddLiteral() { |
| ParsedHtmlTemplate parsed = new ParsedHtmlTemplate(); |
| parsed.addLiteral("<foo>"); |
| |
| List<TemplateChunk> chunks = parsed.getChunks(); |
| LiteralChunk chunk = (LiteralChunk) chunks.get(0); |
| assertEquals(TemplateChunk.Kind.LITERAL, chunk.getKind()); |
| assertEquals("<foo>", chunk.getLiteral()); |
| assertEquals("L(<foo>)", chunk.toString()); |
| |
| assertEquals("[L(<foo>)]", parsed.toString()); |
| } |
| |
| public void testAddParameter() { |
| ParsedHtmlTemplate parsed = new ParsedHtmlTemplate(); |
| parsed.addParameter(new ParameterChunk(new HtmlContext( |
| HtmlContext.Type.TEXT), 0)); |
| |
| List<TemplateChunk> chunks = parsed.getChunks(); |
| |
| ParameterChunk chunk = (ParameterChunk) chunks.get(0); |
| assertEquals(TemplateChunk.Kind.PARAMETER, chunk.getKind()); |
| assertEquals(HtmlContext.Type.TEXT, chunk.getContext().getType()); |
| assertNull(chunk.getContext().getTag()); |
| assertNull(chunk.getContext().getAttribute()); |
| assertEquals(0, chunk.getParameterIndex()); |
| assertEquals("P((TEXT,null,null),0)", chunk.toString()); |
| |
| assertEquals("[P((TEXT,null,null),0)]", parsed.toString()); |
| } |
| |
| /** |
| * Tests that calling addLiteral(), addParameter(), addLiteral() in sequence |
| * results in the expected ParsedHtmlTemplate. |
| */ |
| public void testAddLiteralAddParameterSequence() { |
| ParsedHtmlTemplate parsed = new ParsedHtmlTemplate(); |
| |
| parsed.addLiteral("<foo>"); |
| parsed.addParameter(new ParameterChunk(new HtmlContext( |
| HtmlContext.Type.TEXT), 0)); |
| parsed.addLiteral("</foo>"); |
| |
| List<TemplateChunk> chunks = parsed.getChunks(); |
| assertEquals(3, chunks.size()); |
| Iterator<TemplateChunk> it = chunks.iterator(); |
| |
| LiteralChunk litChunk; |
| ParameterChunk paramChunk; |
| |
| litChunk = (LiteralChunk) it.next(); |
| assertEquals(TemplateChunk.Kind.LITERAL, litChunk.getKind()); |
| assertEquals("<foo>", litChunk.getLiteral()); |
| assertEquals("L(<foo>)", litChunk.toString()); |
| |
| paramChunk = (ParameterChunk) it.next(); |
| assertEquals(TemplateChunk.Kind.PARAMETER, paramChunk.getKind()); |
| assertEquals(HtmlContext.Type.TEXT, paramChunk.getContext().getType()); |
| assertNull(paramChunk.getContext().getTag()); |
| assertNull(paramChunk.getContext().getAttribute()); |
| assertEquals(0, paramChunk.getParameterIndex()); |
| assertEquals("P((TEXT,null,null),0)", paramChunk.toString()); |
| |
| litChunk = (LiteralChunk) it.next(); |
| assertEquals(TemplateChunk.Kind.LITERAL, litChunk.getKind()); |
| assertEquals("</foo>", litChunk.getLiteral()); |
| assertEquals("L(</foo>)", litChunk.toString()); |
| |
| // Assert that the string representation of the parsed template has the |
| // expected format, to allow us to use the string representation in unit |
| // tests for the template parser. |
| assertEquals("[L(<foo>), P((TEXT,null,null),0), L(</foo>)]", |
| parsed.toString()); |
| } |
| |
| /** |
| * Tests that calling addParameter(), addLiteral(), addLiteral(), |
| * addParameter() in sequence results in the expected ParsedHtmlTemplate. |
| * |
| * <p>In particular, two calls to addLiteral() in sequence should result in |
| * only a single LiteralChunk. |
| */ |
| public void testAddParameterAddLiteralSequence() { |
| ParsedHtmlTemplate parsed = new ParsedHtmlTemplate(); |
| |
| parsed.addParameter(new ParameterChunk(new HtmlContext( |
| HtmlContext.Type.TEXT), 0)); |
| parsed.addLiteral("<a"); |
| parsed.addLiteral(" href=\""); |
| parsed.addParameter(new ParameterChunk(new HtmlContext( |
| HtmlContext.Type.URL_ATTRIBUTE_START, "a", "href"), 1)); |
| |
| List<TemplateChunk> chunks = parsed.getChunks(); |
| assertEquals(3, chunks.size()); |
| Iterator<TemplateChunk> it = chunks.iterator(); |
| |
| LiteralChunk litChunk; |
| ParameterChunk paramChunk; |
| |
| paramChunk = (ParameterChunk) it.next(); |
| assertEquals(TemplateChunk.Kind.PARAMETER, paramChunk.getKind()); |
| assertEquals(HtmlContext.Type.TEXT, paramChunk.getContext().getType()); |
| assertNull(paramChunk.getContext().getTag()); |
| assertNull(paramChunk.getContext().getAttribute()); |
| assertEquals(0, paramChunk.getParameterIndex()); |
| assertEquals("P((TEXT,null,null),0)", paramChunk.toString()); |
| |
| litChunk = (LiteralChunk) it.next(); |
| assertEquals(TemplateChunk.Kind.LITERAL, litChunk.getKind()); |
| assertEquals("<a href=\"", litChunk.getLiteral()); |
| assertEquals("L(<a href=\")", litChunk.toString()); |
| |
| paramChunk = (ParameterChunk) it.next(); |
| assertEquals(TemplateChunk.Kind.PARAMETER, paramChunk.getKind()); |
| assertEquals( |
| HtmlContext.Type.URL_ATTRIBUTE_START, paramChunk.getContext().getType()); |
| assertEquals("a", paramChunk.getContext().getTag()); |
| assertEquals("href", paramChunk.getContext().getAttribute()); |
| assertEquals(1, paramChunk.getParameterIndex()); |
| assertEquals("P((URL_ATTRIBUTE_START,a,href),1)", paramChunk.toString()); |
| |
| assertEquals( |
| "[P((TEXT,null,null),0), L(<a href=\"), " |
| + "P((URL_ATTRIBUTE_START,a,href),1)]", |
| parsed.toString()); |
| } |
| } |