Path: blob/master/test/jdk/java/net/httpclient/FlowAdaptersCompileOnly.java
41152 views
/*1* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223import java.net.http.HttpClient;24import java.net.http.HttpRequest;25import java.net.http.HttpResponse;26import java.nio.ByteBuffer;27import java.nio.MappedByteBuffer;28import java.util.Collection;29import java.util.List;30import java.util.concurrent.Flow;31import java.util.function.Function;32import java.net.http.HttpRequest.BodyPublishers;33import java.net.http.HttpResponse.BodyHandler;34import java.net.http.HttpResponse.BodyHandlers;35import java.net.http.HttpResponse.BodySubscriber;36import java.net.http.HttpResponse.BodySubscribers;3738/*39* @test40* @summary Basic test for Flow adapters with generic type parameters41* @compile FlowAdaptersCompileOnly.java42*/4344public class FlowAdaptersCompileOnly {4546static void makesSureDifferentGenericSignaturesCompile() {47BodyPublishers.fromPublisher(new BBPublisher());48BodyPublishers.fromPublisher(new MBBPublisher());4950BodyHandlers.fromSubscriber(new ListSubscriber());51BodyHandlers.fromSubscriber(new CollectionSubscriber());52BodyHandlers.fromSubscriber(new IterableSubscriber());53BodyHandlers.fromSubscriber(new ObjectSubscriber());5455BodySubscribers.fromSubscriber(new ListSubscriber());56BodySubscribers.fromSubscriber(new CollectionSubscriber());57BodySubscribers.fromSubscriber(new IterableSubscriber());58BodySubscribers.fromSubscriber(new ObjectSubscriber());5960BodyPublishers.fromPublisher(new BBPublisher(), 1);61BodyPublishers.fromPublisher(new MBBPublisher(), 1);6263BodyHandlers.fromSubscriber(new ListSubscriber(), Function.identity());64BodyHandlers.fromSubscriber(new CollectionSubscriber(), Function.identity());65BodyHandlers.fromSubscriber(new IterableSubscriber(), Function.identity());66BodyHandlers.fromSubscriber(new ObjectSubscriber(), Function.identity());6768BodySubscribers.fromSubscriber(new ListSubscriber(), Function.identity());69BodySubscribers.fromSubscriber(new CollectionSubscriber(), Function.identity());70BodySubscribers.fromSubscriber(new IterableSubscriber(), Function.identity());71BodySubscribers.fromSubscriber(new ObjectSubscriber(), Function.identity());72}7374static class BBPublisher implements Flow.Publisher<ByteBuffer> {75@Override76public void subscribe(Flow.Subscriber<? super ByteBuffer> subscriber) { }77}7879static class MBBPublisher implements Flow.Publisher<MappedByteBuffer> {80@Override81public void subscribe(Flow.Subscriber<? super MappedByteBuffer> subscriber) { }82}8384static class ListSubscriber implements Flow.Subscriber<List<ByteBuffer>> {85@Override public void onSubscribe(Flow.Subscription subscription) { }86@Override public void onNext(List<ByteBuffer> item) { }87@Override public void onError(Throwable throwable) { }88@Override public void onComplete() { }89}9091static class CollectionSubscriber implements Flow.Subscriber<Collection<ByteBuffer>> {92@Override public void onSubscribe(Flow.Subscription subscription) { }93@Override public void onNext(Collection<ByteBuffer> item) { }94@Override public void onError(Throwable throwable) { }95@Override public void onComplete() { }96}9798static class IterableSubscriber implements Flow.Subscriber<Iterable<ByteBuffer>> {99@Override public void onSubscribe(Flow.Subscription subscription) { }100@Override public void onNext(Iterable<ByteBuffer> item) { }101@Override public void onError(Throwable throwable) { }102@Override public void onComplete() { }103}104105static class ObjectSubscriber implements Flow.Subscriber<Object> {106@Override public void onSubscribe(Flow.Subscription subscription) { }107@Override public void onNext(Object item) { }108@Override public void onError(Throwable throwable) { }109@Override public void onComplete() { }110}111112// ---113114static final Function<ListSubscriber,Integer> f1 = subscriber -> 1;115static final Function<ListSubscriber,Number> f2 = subscriber -> 2;116static final Function<ListSubscriberX,Integer> f3 = subscriber -> 3;117static final Function<ListSubscriberX,Number> f4 = subscriber -> 4;118119static class ListSubscriberX extends ListSubscriber {120int getIntegerX() { return 5; }121}122123static void makesSureDifferentGenericFunctionSignaturesCompile() {124BodyHandler<Integer> bh01 = BodyHandlers.fromSubscriber(new ListSubscriber(), s -> 6);125BodyHandler<Number> bh02 = BodyHandlers.fromSubscriber(new ListSubscriber(), s -> 7);126BodyHandler<Integer> bh03 = BodyHandlers.fromSubscriber(new ListSubscriber(), f1);127BodyHandler<Number> bh04 = BodyHandlers.fromSubscriber(new ListSubscriber(), f1);128BodyHandler<Number> bh05 = BodyHandlers.fromSubscriber(new ListSubscriber(), f2);129BodyHandler<Integer> bh06 = BodyHandlers.fromSubscriber(new ListSubscriberX(), f1);130BodyHandler<Number> bh07 = BodyHandlers.fromSubscriber(new ListSubscriberX(), f1);131BodyHandler<Number> bh08 = BodyHandlers.fromSubscriber(new ListSubscriberX(), f2);132BodyHandler<Integer> bh09 = BodyHandlers.fromSubscriber(new ListSubscriberX(), ListSubscriberX::getIntegerX);133BodyHandler<Number> bh10 = BodyHandlers.fromSubscriber(new ListSubscriberX(), ListSubscriberX::getIntegerX);134BodyHandler<Integer> bh11 = BodyHandlers.fromSubscriber(new ListSubscriberX(), f3);135BodyHandler<Number> bh12 = BodyHandlers.fromSubscriber(new ListSubscriberX(), f3);136BodyHandler<Number> bh13 = BodyHandlers.fromSubscriber(new ListSubscriberX(), f4);137138BodySubscriber<Integer> bs01 = BodySubscribers.fromSubscriber(new ListSubscriber(), s -> 6);139BodySubscriber<Number> bs02 = BodySubscribers.fromSubscriber(new ListSubscriber(), s -> 7);140BodySubscriber<Integer> bs03 = BodySubscribers.fromSubscriber(new ListSubscriber(), f1);141BodySubscriber<Number> bs04 = BodySubscribers.fromSubscriber(new ListSubscriber(), f1);142BodySubscriber<Number> bs05 = BodySubscribers.fromSubscriber(new ListSubscriber(), f2);143BodySubscriber<Integer> bs06 = BodySubscribers.fromSubscriber(new ListSubscriberX(), f1);144BodySubscriber<Number> bs07 = BodySubscribers.fromSubscriber(new ListSubscriberX(), f1);145BodySubscriber<Number> bs08 = BodySubscribers.fromSubscriber(new ListSubscriberX(), f2);146BodySubscriber<Integer> bs09 = BodySubscribers.fromSubscriber(new ListSubscriberX(), ListSubscriberX::getIntegerX);147BodySubscriber<Number> bs10 = BodySubscribers.fromSubscriber(new ListSubscriberX(), ListSubscriberX::getIntegerX);148BodySubscriber<Integer> bs11 = BodySubscribers.fromSubscriber(new ListSubscriberX(), f3);149BodySubscriber<Number> bs12 = BodySubscribers.fromSubscriber(new ListSubscriberX(), f3);150BodySubscriber<Number> bs13 = BodySubscribers.fromSubscriber(new ListSubscriberX(), f4);151}152153// ---154155static class NumberSubscriber implements Flow.Subscriber<List<ByteBuffer>> {156@Override public void onSubscribe(Flow.Subscription subscription) { }157@Override public void onNext(List<ByteBuffer> item) { }158@Override public void onError(Throwable throwable) { }159@Override public void onComplete() { }160public Number getNumber() { return null; }161}162163static class IntegerSubscriber extends NumberSubscriber {164@Override public void onSubscribe(Flow.Subscription subscription) { }165@Override public void onNext(List<ByteBuffer> item) { }166@Override public void onError(Throwable throwable) { }167@Override public void onComplete() { }168public Integer getInteger() { return null; }169}170171static class LongSubscriber extends NumberSubscriber {172@Override public void onSubscribe(Flow.Subscription subscription) { }173@Override public void onNext(List<ByteBuffer> item) { }174@Override public void onError(Throwable throwable) { }175@Override public void onComplete() { }176public Long getLong() { return null; }177}178179static final Function<NumberSubscriber,Number> numMapper = sub -> sub.getNumber();180static final Function<IntegerSubscriber,Integer> intMapper = sub -> sub.getInteger();181static final Function<LongSubscriber,Long> longMapper = sub -> sub.getLong();182183public void makesSureDifferentGenericSubscriberSignaturesCompile()184throws Exception185{186HttpClient client = null;187HttpRequest request = null;188IntegerSubscriber sub1 = new IntegerSubscriber();189190HttpResponse<Integer> r1 = client.send(request, BodyHandlers.fromSubscriber(sub1, IntegerSubscriber::getInteger));191HttpResponse<Number> r2 = client.send(request, BodyHandlers.fromSubscriber(sub1, IntegerSubscriber::getInteger));192HttpResponse<Number> r3 = client.send(request, BodyHandlers.fromSubscriber(sub1, NumberSubscriber::getNumber));193HttpResponse<Integer> r4 = client.send(request, BodyHandlers.fromSubscriber(sub1, intMapper));194HttpResponse<Number> r5 = client.send(request, BodyHandlers.fromSubscriber(sub1, intMapper));195HttpResponse<Number> r6 = client.send(request, BodyHandlers.fromSubscriber(sub1, numMapper));196197// compiles but makes little sense. Just what you get with any usage of `? super`198final Function<Object,Number> objectMapper = sub -> 1;199client.sendAsync(request, BodyHandlers.fromSubscriber(sub1, objectMapper));200201// does not compile, as expected ( uncomment to see )202//HttpResponse<Number> r7 = client.send(request, BodyHandler.fromSubscriber(sub1, longMapper));203}204}205206207