827N/A/*
2362N/A * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
827N/A * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
827N/A *
827N/A * This code is free software; you can redistribute it and/or modify it
827N/A * under the terms of the GNU General Public License version 2 only, as
827N/A * published by the Free Software Foundation.
827N/A *
827N/A * This code is distributed in the hope that it will be useful, but WITHOUT
827N/A * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
827N/A * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
827N/A * version 2 for more details (a copy is included in the LICENSE file that
827N/A * accompanied this code).
827N/A *
827N/A * You should have received a copy of the GNU General Public License version
827N/A * 2 along with this work; if not, write to the Free Software Foundation,
827N/A * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
827N/A *
2362N/A * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2362N/A * or visit www.oracle.com if you need additional information or have any
2362N/A * questions.
827N/A */
827N/A
827N/Aimport java.beans.ExceptionListener;
827N/Aimport java.beans.XMLDecoder;
827N/A
827N/Aimport java.io.ByteArrayInputStream;
827N/A
827N/Aabstract class AbstractTest implements ExceptionListener {
827N/A public void exceptionThrown(Exception exception) {
827N/A throw new Error("unexpected exception", exception);
827N/A }
827N/A
827N/A /**
827N/A * Validates the XML decoder for XML archive
827N/A * that defined in the public field of the subclass.
827N/A *
827N/A * @param decoder the initialized XML decoder
827N/A * @throws Error if validation failed
827N/A */
827N/A protected abstract void validate(XMLDecoder decoder);
827N/A
827N/A /**
827N/A * This is entry point to start testing.
827N/A *
827N/A * @param security use {@code true} to start
827N/A * second pass in secure context
827N/A */
827N/A final void test(boolean security) {
827N/A byte[] array = getFieldValue("XML").getBytes(); // NON-NLS: the field name
827N/A ByteArrayInputStream input = new ByteArrayInputStream(array);
827N/A XMLDecoder decoder = new XMLDecoder(input);
827N/A decoder.setExceptionListener(this);
827N/A validate(decoder);
827N/A try {
827N/A throw new Error("unexpected object" + decoder.readObject());
827N/A } catch (ArrayIndexOutOfBoundsException exception) {
827N/A // expected exception
827N/A }
827N/A decoder.close();
827N/A if (security) {
827N/A System.setSecurityManager(new SecurityManager());
827N/A test(false);
827N/A }
827N/A }
827N/A
827N/A private String getFieldValue(String field) {
827N/A try {
827N/A return getClass().getField(field).get(this).toString();
827N/A } catch (NoSuchFieldException exception) {
827N/A throw new Error("unexpected exception", exception);
827N/A } catch (IllegalAccessException exception) {
827N/A throw new Error("unexpected exception", exception);
827N/A }
827N/A }
827N/A}