/* * Copyright 2016 The Closure Compiler Authors. * * 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.javascript.jscomp; import com.google.common.collect.ImmutableMap; import junit.framework.TestCase; /** * Tests for ReplacedStringsDecoder. * */ public class ReplacedStringsDecoderTest extends TestCase { private void verifyDecoder(String original, String replacement) { verifyDecoder(original, replacement, ""); } private void verifyDecoder(String original, String replacement, String args) { String encoding = "Xy"; // an arbitrary encoding for the test VariableMap variableMap = VariableMap.fromMap(ImmutableMap.of( encoding, replacement )); ReplacedStringsDecoder decoder = new ReplacedStringsDecoder(variableMap); assertEquals(original, decoder.decode(encoding + args)); } public void testSimpleDecoding() { verifyDecoder("A Message.", "A Message."); } public void testDecodingWithArgs() { verifyDecoder("A foo B bar C.", "A ` B ` C.", "`foo`bar"); } public void testDecodingWithExcessSlots() { verifyDecoder("A foo B bar C - D -.", "A ` B ` C ` D `.", "`foo`bar"); } public void testDecodingWithExcessArgs() { verifyDecoder("A foo B bar C.baz-bam-", "A ` B ` C.", "`foo`bar`baz`bam"); } public void testTrailingArg() { verifyDecoder("foo bar", "foo `", "`bar"); } public void testEmptyArgs() { verifyDecoder("foo bar", "foo `bar``", "```"); } public void testNullDecoder() { ReplacedStringsDecoder nullDecoder = ReplacedStringsDecoder.NULL_DECODER; assertEquals("foo", nullDecoder.decode("foo")); } }