/* * Copyright 2015 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.emultest.java8.util; import com.google.gwt.core.client.JavaScriptException; import com.google.gwt.junit.client.GWTTestCase; import java.util.Collections; import java.util.Iterator; import java.util.PrimitiveIterator; import java.util.function.Consumer; import java.util.function.DoubleConsumer; import java.util.function.IntConsumer; import java.util.function.LongConsumer; /** * Tests for PrimitiveIterator JRE emulation. */ public class PrimitiveIteratorTest extends GWTTestCase { @Override public String getModuleName() { return "com.google.gwt.emultest.EmulSuite"; } public void testForEachRemainingDoubleConsumer() { PrimitiveIterator.OfDouble it = createTestPrimitiveDoubleIterator(); it.forEachRemaining((Consumer<Double>) new JanusDoubleConsumer() { @Override public void accept(Double value) { fail(); } @Override public void accept(double value) { } }); try { it = createTestPrimitiveDoubleIterator(); it.forEachRemaining((Consumer<Double>) null); fail(); } catch (NullPointerException e) { // expected } catch (JavaScriptException e) { // expected } try { it = createTestPrimitiveDoubleIterator(); it.forEachRemaining((DoubleConsumer) null); fail(); } catch (NullPointerException e) { // expected } catch (JavaScriptException e) { // expected } } public void testForEachRemainingIntConsumer() { PrimitiveIterator.OfInt it = createTestPrimitiveIntIterator(); it.forEachRemaining((Consumer<Integer>) new JanusIntConsumer() { @Override public void accept(Integer value) { fail(); } @Override public void accept(int value) { } }); try { it = createTestPrimitiveIntIterator(); it.forEachRemaining((Consumer<Integer>) null); fail(); } catch (NullPointerException e) { // expected } catch (JavaScriptException e) { // expected } try { it = createTestPrimitiveIntIterator(); it.forEachRemaining((IntConsumer) null); fail(); } catch (NullPointerException e) { // expected } catch (JavaScriptException e) { // expected } } public void testForEachRemainingLongConsumer() { PrimitiveIterator.OfLong it = createTestPrimitiveLongIterator(); it.forEachRemaining((Consumer<Long>) new JanusLongConsumer() { @Override public void accept(Long value) { fail(); } @Override public void accept(long value) { } }); try { it = createTestPrimitiveLongIterator(); it.forEachRemaining((Consumer<Long>) null); fail(); } catch (NullPointerException e) { // expected } catch (JavaScriptException e) { // expected } try { it = createTestPrimitiveLongIterator(); it.forEachRemaining((LongConsumer) null); fail(); } catch (NullPointerException e) { // expected } catch (JavaScriptException e) { // expected } } private static PrimitiveIterator.OfDouble createTestPrimitiveDoubleIterator() { final Iterator<Double> it = Collections.singletonList(1.).iterator(); return new PrimitiveIterator.OfDouble() { @Override public double nextDouble() { return it.next(); } @Override public boolean hasNext() { return it.hasNext(); } }; } private static PrimitiveIterator.OfInt createTestPrimitiveIntIterator() { final Iterator<Integer> it = Collections.singletonList(1).iterator(); return new PrimitiveIterator.OfInt() { @Override public int nextInt() { return it.next(); } @Override public boolean hasNext() { return it.hasNext(); } }; } private static PrimitiveIterator.OfLong createTestPrimitiveLongIterator() { final Iterator<Long> it = Collections.singletonList(1L).iterator(); return new PrimitiveIterator.OfLong() { @Override public long nextLong() { return it.next(); } @Override public boolean hasNext() { return it.hasNext(); } }; } private interface JanusDoubleConsumer extends Consumer<Double>, DoubleConsumer { } private interface JanusIntConsumer extends Consumer<Integer>, IntConsumer { } private interface JanusLongConsumer extends Consumer<Long>, LongConsumer { } }