14c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin/*
24c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
34c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin *
54c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * This code is free software; you can redistribute it and/or modify it
64c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * under the terms of the GNU General Public License version 2 only, as
74c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * published by the Free Software Foundation.
84c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin *
94c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * This code is distributed in the hope that it will be useful, but WITHOUT
104c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
114c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
124c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * version 2 for more details (a copy is included in the LICENSE file that
134c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * accompanied this code).
144c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin *
154c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * You should have received a copy of the GNU General Public License version
164c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * 2 along with this work; if not, write to the Free Software Foundation,
174c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
184c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin *
194c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
204c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * or visit www.oracle.com if you need additional information or have any
214c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * questions.
224c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin */
234c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinpackage org.openjdk.tests.java.util;
244c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
254c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport org.testng.annotations.Test;
264c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
274c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport java.util.Arrays;
284c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport java.util.function.Consumer;
294c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
304c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinimport static org.testng.Assert.fail;
314c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
324c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin/**
334c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * NullArgsTestCase -- Given a Consumer&ltObject[]&gt, and an Object[] array of args, call the block with the args,
344c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * assert success, and then call the consumer N times, each time setting one of the args to null, and assert that
354c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * all these throw NPE.
364c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin *
374c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * Typically this would be combined with a DataProvider that serves up combinations of things to be tested, as in
384c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin * IteratorsNullTest.
394c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin */
404c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkinpublic abstract class NullArgsTestCase {
414c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public final String name;
424c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public final Consumer<Object[]> sink;
434c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public final Object[] args;
444c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
454c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    protected NullArgsTestCase(String name, Consumer<Object[]> sink, Object[] args) {
464c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        this.name = name;
474c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        this.sink = sink;
484c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        this.args = args;
494c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
504c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
514c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    @Test
524c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void goodNonNull() {
534c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        sink.accept(args);
544c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
554c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin
564c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    @Test
574c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    public void throwWithNull() {
584c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        for (int i=0; i<args.length; i++) {
594c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            Object[] temp = Arrays.copyOf(args, args.length);
604c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            temp[i] = null;
614c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            try {
624c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                sink.accept(temp);
634c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                fail(String.format("Expected NullPointerException for argument %d of test case %s", i, name));
644c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            }
654c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            catch (NullPointerException e) {
664c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin                // Success
674c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin            }
684c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin        }
694c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin    }
704c65c01a4fcfe8c68cd73914370bd269712b91d9Igor Murashkin}
71