test/jdk/java/net/httpclient/websocket/jdk.incubator.httpclient/jdk/incubator/http/internal/websocket/TestSupport.java
branchhttp-client-branch
changeset 56089 42208b2f224e
parent 56088 38fac6d0521d
child 56090 5c7fb702948a
--- a/test/jdk/java/net/httpclient/websocket/jdk.incubator.httpclient/jdk/incubator/http/internal/websocket/TestSupport.java	Tue Feb 06 19:37:56 2018 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,336 +0,0 @@
-/*
- * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package jdk.incubator.http.internal.websocket;
-
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.NoSuchElementException;
-import java.util.Stack;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.CompletionStage;
-import java.util.function.Consumer;
-import java.util.function.Predicate;
-import java.util.regex.Pattern;
-
-import static java.util.List.of;
-import static java.util.Objects.requireNonNull;
-
-/*
- * Auxiliary test infrastructure
- */
-final class TestSupport {
-
-    private TestSupport() { }
-
-    static <A, B, R> Iterator<R> cartesianIterator(List<A> a,
-                                                   List<B> b,
-                                                   F2<A, B, R> f2) {
-        @SuppressWarnings("unchecked")
-        F<R> t = p -> f2.apply((A) p[0], (B) p[1]);
-        return cartesianIterator(of(a, b), t);
-    }
-
-    static <A, B, C, R> Iterator<R> cartesianIterator(List<A> a,
-                                                      List<B> b,
-                                                      List<C> c,
-                                                      F3<A, B, C, R> f3) {
-        @SuppressWarnings("unchecked")
-        F<R> t = p -> f3.apply((A) p[0], (B) p[1], (C) p[2]);
-        return cartesianIterator(of(a, b, c), t);
-    }
-
-    static <A, B, C, D, R> Iterator<R> cartesianIterator(List<A> a,
-                                                         List<B> b,
-                                                         List<C> c,
-                                                         List<D> d,
-                                                         F4<A, B, C, D, R> f4) {
-        @SuppressWarnings("unchecked")
-        F<R> t = p -> f4.apply((A) p[0], (B) p[1], (C) p[2], (D) p[3]);
-        return cartesianIterator(of(a, b, c, d), t);
-    }
-
-    static <A, B, C, D, E, R> Iterator<R> cartesianIterator(List<A> a,
-                                                            List<B> b,
-                                                            List<C> c,
-                                                            List<D> d,
-                                                            List<E> e,
-                                                            F5<A, B, C, D, E, R> f5) {
-        @SuppressWarnings("unchecked")
-        F<R> t = p -> f5.apply((A) p[0], (B) p[1], (C) p[2], (D) p[3], (E) p[4]);
-        return cartesianIterator(of(a, b, c, d, e), t);
-    }
-
-    static <R> Iterator<R> cartesianIterator(List<? extends List<?>> params,
-                                             F<R> function) {
-        if (params.isEmpty()) {
-            return Collections.emptyIterator();
-        }
-        for (List<?> l : params) {
-            if (l.isEmpty()) {
-                return Collections.emptyIterator();
-            }
-        }
-        // Assertion: if we are still here, there is at least a single element
-        // in the product
-        return new Iterator<>() {
-
-            private final int arity = params.size();
-            private final int[] coordinates = new int[arity];
-            private boolean hasNext = true;
-
-            @Override
-            public boolean hasNext() {
-                return hasNext;
-            }
-
-            @Override
-            public R next() {
-                if (!hasNext) {
-                    throw new NoSuchElementException();
-                }
-                Object[] array = new Object[arity];
-                for (int i = 0; i < arity; i++) {
-                    array[i] = params.get(i).get(coordinates[i]);
-                }
-                int p = arity - 1;
-                while (p >= 0 && coordinates[p] == params.get(p).size() - 1) {
-                    p--;
-                }
-                if (p < 0) {
-                    hasNext = false;
-                } else {
-                    coordinates[p]++;
-                    for (int i = p + 1; i < arity; i++) {
-                        coordinates[i] = 0;
-                    }
-                }
-                return function.apply(array);
-            }
-        };
-    }
-
-    @FunctionalInterface
-    public interface F1<A, R> {
-        R apply(A a);
-    }
-
-    @FunctionalInterface
-    public interface F2<A, B, R> {
-        R apply(A a, B b);
-    }
-
-    @FunctionalInterface
-    public interface F3<A, B, C, R> {
-        R apply(A a, B b, C c);
-    }
-
-    @FunctionalInterface
-    public interface F4<A, B, C, D, R> {
-        R apply(A a, B b, C c, D d);
-    }
-
-    @FunctionalInterface
-    public interface F5<A, B, C, D, E, R> {
-        R apply(A a, B b, C c, D d, E e);
-    }
-
-    @FunctionalInterface
-    public interface F<R> {
-        R apply(Object[] args);
-    }
-
-    static <T> Iterator<T> iteratorOf1(T element) {
-        return List.of(element).iterator();
-    }
-
-    @SafeVarargs
-    static <T> Iterator<T> iteratorOf(T... elements) {
-        return List.of(elements).iterator();
-    }
-
-    static <T> Iterator<T> limit(int maxElements, Iterator<? extends T> elements) {
-        return new Iterator<>() {
-
-            int count = maxElements;
-
-            @Override
-            public boolean hasNext() {
-                return count > 0 && elements.hasNext();
-            }
-
-            @Override
-            public T next() {
-                if (!hasNext()) {
-                    throw new NoSuchElementException();
-                }
-                count--;
-                return elements.next();
-            }
-        };
-    }
-
-    static ByteBuffer fullCopy(ByteBuffer src) {
-        ByteBuffer copy = ByteBuffer.allocate(src.capacity());
-        int p = src.position();
-        int l = src.limit();
-        src.clear();
-        copy.put(src).position(p).limit(l);
-        src.position(p).limit(l);
-        return copy;
-    }
-
-    static void forEachBufferPartition(ByteBuffer src,
-                                       Consumer<? super Iterable<? extends ByteBuffer>> action) {
-        forEachPartition(src.remaining(),
-                (lengths) -> {
-                    int end = src.position();
-                    List<ByteBuffer> buffers = new LinkedList<>();
-                    for (int len : lengths) {
-                        ByteBuffer d = src.duplicate();
-                        d.position(end);
-                        d.limit(end + len);
-                        end += len;
-                        buffers.add(d);
-                    }
-                    action.accept(buffers);
-                });
-    }
-
-    private static void forEachPartition(int n,
-                                         Consumer<? super Iterable<Integer>> action) {
-        forEachPartition(n, new Stack<>(), action);
-    }
-
-    private static void forEachPartition(int n,
-                                         Stack<Integer> path,
-                                         Consumer<? super Iterable<Integer>> action) {
-        if (n == 0) {
-            action.accept(path);
-        } else {
-            for (int i = 1; i <= n; i++) {
-                path.push(i);
-                forEachPartition(n - i, path, action);
-                path.pop();
-            }
-        }
-    }
-
-    static void forEachPermutation(int n, Consumer<? super int[]> c) {
-        int[] a = new int[n];
-        for (int i = 0; i < n; i++) {
-            a[i] = i;
-        }
-        permutations(0, a, c);
-    }
-
-    private static void permutations(int i, int[] a, Consumer<? super int[]> c) {
-        if (i == a.length) {
-            c.accept(Arrays.copyOf(a, a.length));
-            return;
-        }
-        for (int j = i; j < a.length; j++) {
-            swap(a, i, j);
-            permutations(i + 1, a, c);
-            swap(a, i, j);
-        }
-    }
-
-    private static void swap(int[] a, int i, int j) {
-        int x = a[i];
-        a[i] = a[j];
-        a[j] = x;
-    }
-
-    public static <T extends Throwable> T assertThrows(Class<? extends T> clazz,
-                                                       ThrowingProcedure code) {
-        @SuppressWarnings("unchecked")
-        T t = (T) assertThrows(clazz::isInstance, code);
-        return t;
-    }
-
-    /*
-     * The rationale behind asking for a regex is to not pollute variable names
-     * space in the scope of assertion: if it's something as simple as checking
-     * a message, we can do it inside
-     */
-    @SuppressWarnings("unchecked")
-    static <T extends Throwable> T assertThrows(Class<? extends T> clazz,
-                                                String messageRegex,
-                                                ThrowingProcedure code) {
-        requireNonNull(messageRegex, "messagePattern");
-        Predicate<Throwable> p = e -> clazz.isInstance(e)
-                && Pattern.matches(messageRegex, e.getMessage());
-        return (T) assertThrows(p, code);
-    }
-
-    static Throwable assertThrows(Predicate<? super Throwable> predicate,
-                                  ThrowingProcedure code) {
-        requireNonNull(predicate, "predicate");
-        requireNonNull(code, "code");
-        Throwable caught = null;
-        try {
-            code.run();
-        } catch (Throwable t) {
-            caught = t;
-        }
-        if (caught == null) {
-            throw new AssertionFailedException("No exception was thrown");
-        }
-        if (predicate.test(caught)) {
-            System.out.println("Got expected exception: " + caught);
-            return caught;
-        }
-        throw new AssertionFailedException("Caught exception didn't match the predicate", caught);
-    }
-
-    /*
-     * Blocking assertion, waits for completion
-     */
-    static Throwable assertCompletesExceptionally(Class<? extends Throwable> clazz,
-                                                  CompletionStage<?> stage) {
-        CompletableFuture<?> cf =
-                CompletableFuture.completedFuture(null).thenCompose(x -> stage);
-        return assertThrows(t -> clazz.isInstance(t.getCause()), cf::get);
-    }
-
-    interface ThrowingProcedure {
-        void run() throws Throwable;
-    }
-
-    static final class AssertionFailedException extends RuntimeException {
-
-        private static final long serialVersionUID = 1L;
-
-        AssertionFailedException(String message) {
-            super(message);
-        }
-
-        AssertionFailedException(String message, Throwable cause) {
-            super(message, cause);
-        }
-    }
-}