1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath * @author Vladimir N. Molotkov
208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath */
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.security.tests.java.security.spec;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.math.BigInteger;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.security.spec.ECFieldF2m;
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests for <code>ECFieldF2m</code> class fields and methods.
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class ECFieldF2m_ImplTest extends TestCase {
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Support class for this test.
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Encapsulates <code>ECFieldF2m</code> testing
378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * domain parameters.
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private static final class ECFieldF2mDomainParams {
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * <code>NPE</code> reference object of class NullPointerException.
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * NullPointerException must be thrown by <code>ECFieldF2m</code>
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * ctors in some circumstances
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        static final NullPointerException NPE = new NullPointerException();
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * <code>IArgE</code> reference object of class IllegalArgumentException.
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * IllegalArgumentException must be thrown by <code>ECFieldF2m</code>
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * ctors in some circumstances
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        static final IllegalArgumentException IArgE = new IllegalArgumentException();
538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * The <code>m</code> parameter for <code>ECFieldF2m</code>
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * ctor for the current test.
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final int m;
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * The <code>rp</code> parameter for <code>ECFieldF2m</code>
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * ctor for the current test.
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final BigInteger rp;
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * The <code>ks</code> parameter for <code>ECFieldF2m</code>
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * ctor for the current test.
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final int[] ks;
698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * Exception expected with this parameters set or <code>null</code>
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * if no exception expected.
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        final Exception x;
768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        /**
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * Constructs ECFieldF2mDomainParams
798d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath         *
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * @param m
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * @param rp
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * @param ks
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         * @param expectedException
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes         */
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ECFieldF2mDomainParams(final int m,
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                final BigInteger rp,
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                final int[] ks,
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                final Exception expectedException) {
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.m = m;
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.rp = rp;
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.ks = ks;
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            this.x = expectedException;
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Set of parameters used for <code>ECFieldF2m(int, BigInteger)</code>
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * constructor tests.
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    private final ECFieldF2mDomainParams[] intBigIntegerCtorTestParameters =
1028d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            new ECFieldF2mDomainParams[] {
1038d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 0: valid m and rp - trinomial basis params
1048d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1058d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            1999,
1068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            BigInteger.valueOf(0L).setBit(0).setBit(367).setBit(1999),
1078d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1088d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null),
1098d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 1: valid m and rp - pentanomial basis params
1108d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1118d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            2000,
1128d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            BigInteger.valueOf(0L).setBit(0).setBit(1).setBit(2).setBit(981).setBit(2000),
1138d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1148d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null),
1158d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 2: valid m, invalid (null) rp
1168d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1178d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            1963,
1188d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            (BigInteger) null,
1198d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1208d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.NPE),
1218d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 3: valid m, invalid rp - bit 0 not set
1228d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1238d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            1999,
1248d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            BigInteger.valueOf(0L).setBit(1).setBit(367).setBit(1999),
1258d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1268d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
1278d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 4: valid m, invalid rp - bit m not set
1288d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1298d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            1999,
1308d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            BigInteger.valueOf(0L).setBit(0).setBit(367).setBit(1998),
1318d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1328d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
1338d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 5: valid m, invalid rp - bit k improperly set
1348d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1358d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            1999,
1368d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            BigInteger.valueOf(0L).setBit(0).setBit(2367).setBit(1999),
1378d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1388d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
1398d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 6: valid m, invalid rp - k1 k2 k3
1408d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1418d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            2000,
1428d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            BigInteger.valueOf(0L).setBit(0).setBit(2001).setBit(2002).setBit(2003).setBit(2000),
1438d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1448d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
1458d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 7: valid m, invalid rp - number of bits set
1468d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1478d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            2000,
1488d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            BigInteger.valueOf(0L).setBit(0).setBit(2000),
1498d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1508d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
1518d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 8: valid m, invalid rp - number of bits set
1528d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1538d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            2000,
1548d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            BigInteger.valueOf(0L).setBit(0).setBit(1).setBit(2).setBit(2000),
1558d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1568d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
1578d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 9: valid m, invalid rp - number of bits set
1588d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1598d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            2000,
1608d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            BigInteger.valueOf(0L).setBit(0).setBit(1).setBit(2).
1618d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                    setBit(981).setBit(985).setBit(2000),
1628d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1638d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
1648d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 10: valid m, invalid rp
1658d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1668d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            2000,
1678d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            BigInteger.valueOf(0L),
1688d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1698d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
1708d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    // set 11: invalid m
1718d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                    new ECFieldF2mDomainParams(
1728d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            -2000,
1738d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            BigInteger.valueOf(0L).setBit(0).setBit(1).setBit(2).
1748d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                                    setBit(981).setBit(2000),
1758d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            null,
1768d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath                            ECFieldF2mDomainParams.IArgE),
1778d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            };
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /**
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Tests for constructor <code>ECFieldF2m(int, BigInteger)</code><br>
1818d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: constructs new <code>ECFieldF2m</code> object
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * using valid parameters m and rp. rp represents trinomial basis.
1848d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: constructs new <code>ECFieldF2m</code> object
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * using valid parameters m and rp. rp represents pentanomial basis.
1878d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: IllegalArgumentException if m is not positive.
1898d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: NullPointerException if rp is null.
1918d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath     * <p/>
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Assertion: IllegalArgumentException if rp is invalid.
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public final void testECFieldF2mintBigInteger() {
1958d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath        for (int i = 0; i < intBigIntegerCtorTestParameters.length; i++) {
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            ECFieldF2mDomainParams tp = intBigIntegerCtorTestParameters[i];
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // perform test
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                new ECFieldF2m(tp.m, tp.rp);
2008d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (tp.x != null) {
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // exception has been expected
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + ", set " + i +
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            " FAILED: expected exception has not been thrown");
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
2068d8858e39800de641b50f6e8e864af9cf68bedeaNarayan Kamath            } catch (Exception e) {
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                if (tp.x == null || !e.getClass().isInstance(tp.x)) {
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // exception: failure
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // if it has not been expected
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    // or wrong one has been thrown
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                    fail(getName() + ", set " + i +
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                            " FAILED: unexpected " + e);
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                }
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
218