001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.commons.codec;
019
020 import java.util.Locale;
021
022 import org.junit.Assert;
023
024 import org.junit.Test;
025
026 /**
027 * @version $Id: StringEncoderAbstractTest.html 889935 2013-12-11 05:05:13Z ggregory $
028 */
029 public abstract class StringEncoderAbstractTest<T extends StringEncoder> {
030
031 protected T stringEncoder = this.createStringEncoder();
032
033 public void checkEncoding(final String expected, final String source) throws EncoderException {
034 Assert.assertEquals("Source: " + source, expected, this.getStringEncoder().encode(source));
035 }
036
037 protected void checkEncodings(final String[][] data) throws EncoderException {
038 for (final String[] element : data) {
039 this.checkEncoding(element[1], element[0]);
040 }
041 }
042
043 protected void checkEncodingVariations(final String expected, final String data[]) throws EncoderException {
044 for (final String element : data) {
045 this.checkEncoding(expected, element);
046 }
047 }
048
049 protected abstract T createStringEncoder();
050
051 public T getStringEncoder() {
052 return this.stringEncoder;
053 }
054
055 @Test
056 public void testEncodeEmpty() throws Exception {
057 final Encoder encoder = this.getStringEncoder();
058 encoder.encode("");
059 encoder.encode(" ");
060 encoder.encode("\t");
061 }
062
063 @Test
064 public void testEncodeNull() throws Exception {
065 final StringEncoder encoder = this.getStringEncoder();
066 try {
067 encoder.encode(null);
068 } catch (final EncoderException ee) {
069 // An exception should be thrown
070 }
071 }
072
073 @Test
074 public void testEncodeWithInvalidObject() throws Exception {
075 boolean exceptionThrown = false;
076 try {
077 final StringEncoder encoder = this.getStringEncoder();
078 encoder.encode(new Float(3.4));
079 } catch (final Exception e) {
080 exceptionThrown = true;
081 }
082 Assert.assertTrue("An exception was not thrown when we tried to encode " + "a Float object", exceptionThrown);
083 }
084
085 @Test
086 public void testLocaleIndependence() throws Exception {
087 final StringEncoder encoder = this.getStringEncoder();
088
089 final String[] data = {"I", "i",};
090
091 final Locale orig = Locale.getDefault();
092 final Locale[] locales = {Locale.ENGLISH, new Locale("tr"), Locale.getDefault()};
093
094 try {
095 for (final String element : data) {
096 String ref = null;
097 for (int j = 0; j < locales.length; j++) {
098 Locale.setDefault(locales[j]);
099 if (j <= 0) {
100 ref = encoder.encode(element);
101 } else {
102 String cur = null;
103 try {
104 cur = encoder.encode(element);
105 } catch (final Exception e) {
106 Assert.fail(Locale.getDefault().toString() + ": " + e.getMessage());
107 }
108 Assert.assertEquals(Locale.getDefault().toString() + ": ", ref, cur);
109 }
110 }
111 }
112 } finally {
113 Locale.setDefault(orig);
114 }
115 }
116
117 }