123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- /*
- * 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.
- */
-
- /* $Id$ */
-
- package org.apache.fop;
-
- import java.io.IOException;
- import java.io.StringReader;
- import java.security.NoSuchAlgorithmException;
-
- import javax.xml.parsers.ParserConfigurationException;
- import javax.xml.parsers.SAXParserFactory;
-
- import org.junit.Before;
- import org.junit.Test;
- import org.xml.sax.InputSource;
- import org.xml.sax.SAXException;
- import org.xml.sax.XMLReader;
-
- import static org.junit.Assert.assertTrue;
-
- import org.apache.fop.util.DigestFilter;
-
- /**
- * Test case for digesting SAX filter.
- *
- */
- public class DigestFilterTestCase {
-
- private SAXParserFactory parserFactory;
-
- @Before
- public void setUp() {
- parserFactory = SAXParserFactory.newInstance();
- parserFactory.setNamespaceAware(true);
- }
-
- private boolean compareDigest(byte[] a, byte[] b) {
- if (a.length != b.length) {
- return false;
- }
- for (int i = 0; i < a.length; i++) {
- if (a[i] != b[i]) {
- return false;
- }
- }
- return true;
- }
-
- private String digestToString(byte[] digest) {
- StringBuffer buffer = new StringBuffer(2 * digest.length);
- for (byte val : digest) {
- int hi = (val >> 4) & 0xF;
- int lo = val & 0xF;
- if (hi < 10) {
- buffer.append((char) (hi + 0x30));
- } else {
- buffer.append((char) (hi + 0x61 - 10));
- }
- if (lo < 10) {
- buffer.append((char) (lo + 0x30));
- } else {
- buffer.append((char) (lo + 0x61 - 10));
- }
- }
- return buffer.toString();
- }
-
- private byte[] runTest(String input)
- throws
- NoSuchAlgorithmException,
- ParserConfigurationException,
- SAXException,
- IOException {
- XMLReader parser = parserFactory.newSAXParser().getXMLReader();
- DigestFilter digestFilter = new DigestFilter("MD5");
- digestFilter.setParent(parser);
- digestFilter.setFeature("http://xml.org/sax/features/namespaces", true);
- parser.setContentHandler(digestFilter);
- InputSource inputSource = new InputSource(new StringReader(input));
- parser.parse(inputSource);
- return digestFilter.getDigestValue();
- }
-
- @Test
- public final void testLineFeed()
- throws
- NoSuchAlgorithmException,
- ParserConfigurationException,
- SAXException,
- IOException {
- byte[] lfDigest = runTest("<a>\n</a>");
- byte[] crlfDigest = runTest("<a>\r\n</a>");
- assertTrue(
- "LF: "
- + digestToString(lfDigest)
- + " CRLF: "
- + digestToString(crlfDigest),
- compareDigest(lfDigest, crlfDigest));
- }
-
- @Test
- public final void testAttributeOrder()
- throws
- NoSuchAlgorithmException,
- ParserConfigurationException,
- SAXException,
- IOException {
- byte[] sortDigest = runTest("<a a1='1' a2='2' a3='3'/>");
- byte[] permutationDigest = runTest("<a a2='2' a3='3' a1='1'/>");
- assertTrue(
- "Sort: "
- + digestToString(sortDigest)
- + " permuted: "
- + digestToString(permutationDigest),
- compareDigest(sortDigest, permutationDigest));
- byte[] reverseDigest = runTest("<a a3='3' a2='2' a1='1'/>");
- assertTrue(
- "Sort: "
- + digestToString(sortDigest)
- + " permuted: "
- + digestToString(reverseDigest),
- compareDigest(sortDigest, reverseDigest));
- }
-
- @Test
- public final void testNamespacePrefix()
- throws
- NoSuchAlgorithmException,
- ParserConfigurationException,
- SAXException,
- IOException {
- byte[] prefix1Digest = runTest("<a:a xmlns:a='foo'/>");
- byte[] prefix2Digest = runTest("<b:a xmlns:b='foo'/>");
- assertTrue(
- "prefix1: "
- + digestToString(prefix1Digest)
- + " prefix2: "
- + digestToString(prefix2Digest),
- compareDigest(prefix1Digest, prefix2Digest));
- }
-
- }
|