|
Commons IO example source code file (XmlStreamReaderUtilitiesTest.java)
The Commons IO XmlStreamReaderUtilitiesTest.java source code/* * 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.commons.io.input; import java.io.ByteArrayInputStream; import java.io.IOException; import junit.framework.TestCase; /** * Test the Encoding Utilities part of {@link XmlStreamReader}. */ public class XmlStreamReaderUtilitiesTest extends TestCase { private static String RAWMGS1 = "encoding mismatch"; private static String RAWMGS2 = "unknown BOM"; private static String HTTPMGS1 = "BOM must be NULL"; private static String HTTPMGS2 = "encoding mismatch"; private static String HTTPMGS3 = "Invalid MIME"; private static String APPXML = "application/xml"; private static String APPXML_UTF8 = "application/xml;charset=UTF-8"; private static String APPXML_UTF16 = "application/xml;charset=UTF-16"; private static String APPXML_UTF16BE = "application/xml;charset=UTF-16BE"; private static String APPXML_UTF16LE = "application/xml;charset=UTF-16LE"; private static String TXTXML = "text/xml"; @Override protected void setUp() { } /** Test for {@link XmlStreamReader#getContentTypeEncoding(String)}. */ public void testContentTypeEncoding() throws IOException { checkContentTypeEncoding(null, null); checkContentTypeEncoding(null, ""); checkContentTypeEncoding(null, "application/xml"); checkContentTypeEncoding(null, "application/xml;"); checkContentTypeEncoding(null, "multipart/mixed;boundary=frontier"); checkContentTypeEncoding(null, "multipart/mixed;boundary='frontier'"); checkContentTypeEncoding(null, "multipart/mixed;boundary=\"frontier\""); checkContentTypeEncoding("UTF-16", "application/xml;charset=utf-16"); checkContentTypeEncoding("UTF-16", "application/xml;charset=UTF-16"); checkContentTypeEncoding("UTF-16", "application/xml;charset='UTF-16'"); checkContentTypeEncoding("UTF-16", "application/xml;charset=\"UTF-16\""); } private void checkContentTypeEncoding(String expected, String httpContentType) { assertEquals("ContentTypeEncoding=[" + httpContentType + "]", expected, XmlStreamReader.getContentTypeEncoding(httpContentType)); } /** Test for {@link XmlStreamReader#getContentTypeEncoding(String)}. */ public void testContentTypeMime() throws IOException { checkContentTypeMime(null, null); checkContentTypeMime("", ""); checkContentTypeMime("application/xml", "application/xml"); checkContentTypeMime("application/xml", "application/xml;"); checkContentTypeMime("application/xml", "application/xml;charset=utf-16"); } private void checkContentTypeMime(String expected, String httpContentType) { assertEquals("ContentTypeMime=[" + httpContentType + "]", expected, XmlStreamReader.getContentTypeMime(httpContentType)); } /** Test for {@link XmlStreamReader#isAppXml(String)}. */ public void testAppXml() throws IOException { checkAppXml(false, null); checkAppXml(false, ""); checkAppXml(true, "application/xml"); checkAppXml(true, "application/xml-dtd"); checkAppXml(true, "application/xml-external-parsed-entity"); checkAppXml(true, "application/soap+xml"); checkAppXml(true, "application/atom+xml"); checkAppXml(false, "application/atomxml"); checkAppXml(false, "text/xml"); checkAppXml(false, "text/atom+xml"); checkAppXml(true, "application/xml-dtd"); checkAppXml(true, "application/xml-external-parsed-entity"); } private void checkAppXml(boolean expected, String mime) { assertEquals("Mime=[" + mime + "]", expected, XmlStreamReader.isAppXml(mime)); } /** Test for {@link XmlStreamReader#isTextXml(String)}. */ public void testTextXml() throws IOException { checkTextXml(false, null); checkTextXml(false, ""); checkTextXml(true, "text/xml"); checkTextXml(true, "text/xml-external-parsed-entity"); checkTextXml(true, "text/soap+xml"); checkTextXml(true, "text/atom+xml"); checkTextXml(false, "text/atomxml"); checkTextXml(false, "application/xml"); checkTextXml(false, "application/atom+xml"); } private void checkTextXml(boolean expected, String mime) { assertEquals("Mime=[" + mime + "]", expected, XmlStreamReader.isTextXml(mime)); } /** No BOM calculateRawEncoding() Test */ public void testCalculateRawEncodingNoBOM() throws IOException { // No BOM Expected BOM Guess XML Default checkRawError(RAWMGS2, "UTF-32", null, null, null); checkRawEncoding("UTF-8", null, null, null, null); checkRawEncoding("UTF-8", null, "UTF-16BE", null, null); /* why default & not Guess? */ checkRawEncoding("UTF-8", null, null, "UTF-16BE", null); /* why default & not XMLEnc? */ checkRawEncoding("UTF-16BE", null, "UTF-16BE", "UTF-16BE", null); checkRawEncoding("UTF-16BE", null, null, null, "UTF-16BE"); checkRawEncoding("UTF-16BE", null, "UTF-8", null, "UTF-16BE"); /* why default & not Guess? */ checkRawEncoding("UTF-16BE", null, null, "UTF-8", "UTF-16BE"); /* why default & not Guess? */ checkRawEncoding("UTF-8", null, "UTF-8", "UTF-8", "UTF-16BE"); checkRawEncoding("UTF-16BE", null, "UTF-16BE", "UTF-16", null); checkRawEncoding("UTF-16LE", null, "UTF-16LE", "UTF-16", null); } /** BOM calculateRawEncoding() Test */ public void testCalculateRawEncodingStandard() throws IOException { // Standard BOM Checks BOM Other Default testCalculateRawEncodingStandard("UTF-8", "UTF-16BE", "UTF-16LE"); testCalculateRawEncodingStandard("UTF-16BE", "UTF-8", "UTF-16LE"); testCalculateRawEncodingStandard("UTF-16LE", "UTF-8", "UTF-16BE"); } private void testCalculateRawEncodingStandard(String bomEnc, String otherEnc, String defaultEnc) throws IOException { // Expected BOM Guess XMLEnc Default checkRawEncoding(bomEnc, bomEnc, null, null, defaultEnc); checkRawEncoding(bomEnc, bomEnc, bomEnc, null, defaultEnc); checkRawError(RAWMGS1, bomEnc, otherEnc, null, defaultEnc); checkRawEncoding(bomEnc, bomEnc, null, bomEnc, defaultEnc); checkRawError(RAWMGS1, bomEnc, null, otherEnc, defaultEnc); checkRawEncoding(bomEnc, bomEnc, bomEnc, bomEnc, defaultEnc); checkRawError(RAWMGS1, bomEnc, bomEnc, otherEnc, defaultEnc); checkRawError(RAWMGS1, bomEnc, otherEnc, bomEnc, defaultEnc); } /** Additional UTF-16 calculateRawEncoding() Test */ public void testCalculateRawEncodingAdditonalkUTF16() throws IOException { // BOM Guess XML Default checkRawError(RAWMGS1, "UTF-16BE", "UTF-16", null, null); checkRawEncoding("UTF-16BE", "UTF-16BE", null, "UTF-16", null); checkRawEncoding("UTF-16BE", "UTF-16BE", "UTF-16BE", "UTF-16", null); checkRawError(RAWMGS1, "UTF-16BE", null, "UTF-16LE", null); checkRawError(RAWMGS1, "UTF-16BE", "UTF-16BE", "UTF-16LE", null); checkRawError(RAWMGS1, "UTF-16LE", "UTF-16", null, null); checkRawEncoding("UTF-16LE", "UTF-16LE", null, "UTF-16", null); checkRawEncoding("UTF-16LE", "UTF-16LE", "UTF-16LE", "UTF-16", null); checkRawError(RAWMGS1, "UTF-16LE", null, "UTF-16BE", null); checkRawError(RAWMGS1, "UTF-16LE", "UTF-16LE", "UTF-16BE", null); } private void checkRawEncoding(String expected, String bomEnc, String xmlGuessEnc, String xmlEnc, String defaultEncoding) throws IOException { StringBuilder builder = new StringBuilder(); builder.append("RawEncoding: ").append(bomEnc).append("], "); builder.append("bomEnc=[").append(bomEnc).append("], "); builder.append("xmlGuessEnc=[").append(xmlGuessEnc).append("], "); builder.append("xmlEnc=[").append(xmlEnc).append("], "); builder.append("defaultEncoding=[").append(defaultEncoding).append("],"); String encoding = calculateRawEncoding(bomEnc,xmlGuessEnc,xmlEnc, defaultEncoding); assertEquals(builder.toString(), expected, encoding); } protected String calculateRawEncoding(String bomEnc, String xmlGuessEnc, String xmlEnc, String defaultEncoding) throws IOException { MockXmlStreamReader mock = new MockXmlStreamReader(defaultEncoding); String encoding = mock.calculateRawEncoding(bomEnc, xmlGuessEnc, xmlEnc); return encoding; } private void checkRawError(String msgSuffix, String bomEnc, String xmlGuessEnc, String xmlEnc, String defaultEncoding) { try { checkRawEncoding("XmlStreamReaderException", bomEnc, xmlGuessEnc, xmlEnc, defaultEncoding); fail("Expected XmlStreamReaderException"); } catch (XmlStreamReaderException e) { assertTrue("Msg Start: " + e.getMessage(), e.getMessage().startsWith("Invalid encoding")); assertTrue("Msg End: " + e.getMessage(), e.getMessage().endsWith(msgSuffix)); assertEquals("bomEnc", bomEnc, e.getBomEncoding()); assertEquals("xmlGuessEnc", xmlGuessEnc, e.getXmlGuessEncoding()); assertEquals("xmlEnc", xmlEnc, e.getXmlEncoding()); assertNull("ContentTypeEncoding", e.getContentTypeEncoding()); assertNull("ContentTypeMime", e.getContentTypeMime()); } catch (Exception e) { fail("Expected XmlStreamReaderException, but threw " + e); } } /** Test calculate HTTP Encoding */ public void testCalculateHttpEncoding() throws IOException { // No BOM Expected Lenient cType BOM Guess XML Default checkHttpError(HTTPMGS3, true, null, null, null, null, null); checkHttpError(HTTPMGS3, false, null, null, null, "UTF-8", null); checkHttpEncoding("UTF-8", true, null, null, null, "UTF-8", null); checkHttpEncoding("UTF-16LE", true, null, null, null, "UTF-16LE", null); checkHttpError(HTTPMGS3, false, "text/css", null, null, null, null); checkHttpEncoding("US-ASCII", false, TXTXML, null, null, null, null); checkHttpEncoding("UTF-16BE", false, TXTXML, null, null, null, "UTF-16BE"); checkHttpEncoding("UTF-8", false, APPXML, null, null, null, null); checkHttpEncoding("UTF-16BE", false, APPXML, null, null, null, "UTF-16BE"); checkHttpEncoding("UTF-8", false, APPXML, "UTF-8", null, null, "UTF-16BE"); checkHttpEncoding("UTF-16LE", false, APPXML_UTF16LE, null, null, null, null); checkHttpEncoding("UTF-16BE", false, APPXML_UTF16BE, null, null, null, null); checkHttpError(HTTPMGS1, false, APPXML_UTF16LE, "UTF-16LE", null, null, null); checkHttpError(HTTPMGS1, false, APPXML_UTF16BE, "UTF-16BE", null, null, null); checkHttpError(HTTPMGS2, false, APPXML_UTF16, null, null, null, null); checkHttpError(HTTPMGS2, false, APPXML_UTF16, "UTF-8", null, null, null); checkHttpEncoding("UTF-16LE", false, APPXML_UTF16, "UTF-16LE", null, null, null); checkHttpEncoding("UTF-16BE", false, APPXML_UTF16, "UTF-16BE", null, null, null); checkHttpEncoding("UTF-8", false, APPXML_UTF8, null, null, null, null); checkHttpEncoding("UTF-8", false, APPXML_UTF8, "UTF-16BE", "UTF-16BE", "UTF-16BE", "UTF-16BE"); } private void checkHttpEncoding(String expected, boolean lenient, String httpContentType, String bomEnc, String xmlGuessEnc, String xmlEnc, String defaultEncoding) throws IOException { StringBuilder builder = new StringBuilder(); builder.append("HttpEncoding: ").append(bomEnc).append("], "); builder.append("lenient=[").append(lenient).append("], "); builder.append("httpContentType=[").append(httpContentType).append("], "); builder.append("bomEnc=[").append(bomEnc).append("], "); builder.append("xmlGuessEnc=[").append(xmlGuessEnc).append("], "); builder.append("xmlEnc=[").append(xmlEnc).append("], "); builder.append("defaultEncoding=[").append(defaultEncoding).append("],"); String encoding = calculateHttpEncoding(httpContentType, bomEnc, xmlGuessEnc, xmlEnc, lenient, defaultEncoding); assertEquals(builder.toString(), expected, encoding); } protected String calculateHttpEncoding(String httpContentType, String bomEnc, String xmlGuessEnc, String xmlEnc, boolean lenient, String defaultEncoding) throws IOException { MockXmlStreamReader mock = new MockXmlStreamReader(defaultEncoding); String encoding = mock.calculateHttpEncoding(httpContentType, bomEnc, xmlGuessEnc, xmlEnc, lenient); return encoding; } private void checkHttpError(String msgSuffix, boolean lenienet, String httpContentType, String bomEnc, String xmlGuessEnc, String xmlEnc, String defaultEncoding) { try { checkHttpEncoding("XmlStreamReaderException", lenienet, httpContentType, bomEnc, xmlGuessEnc, xmlEnc, defaultEncoding); fail("Expected XmlStreamReaderException"); } catch (XmlStreamReaderException e) { assertTrue("Msg Start: " + e.getMessage(), e.getMessage().startsWith("Invalid encoding")); assertTrue("Msg End: " + e.getMessage(), e.getMessage().endsWith(msgSuffix)); assertEquals("bomEnc", bomEnc, e.getBomEncoding()); assertEquals("xmlGuessEnc", xmlGuessEnc, e.getXmlGuessEncoding()); assertEquals("xmlEnc", xmlEnc, e.getXmlEncoding()); assertEquals("ContentTypeEncoding", XmlStreamReader.getContentTypeEncoding(httpContentType), e.getContentTypeEncoding()); assertEquals("ContentTypeMime", XmlStreamReader.getContentTypeMime(httpContentType), e.getContentTypeMime()); } catch (Exception e) { fail("Expected XmlStreamReaderException, but threw " + e); } } /** Mock {@link XmlStreamReader} implementation */ private static class MockXmlStreamReader extends XmlStreamReader { MockXmlStreamReader(String defaultEncoding) throws IOException { super(new ByteArrayInputStream("".getBytes()), null, true, defaultEncoding); } } } Other Commons IO examples (source code examples)Here is a short list of links related to this Commons IO XmlStreamReaderUtilitiesTest.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.