/*
 * 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;

import com.google.gwt.emultest.java8.lang.DoubleTest;
import com.google.gwt.emultest.java8.lang.FloatTest;
import com.google.gwt.emultest.java8.lang.MathTest;
import com.google.gwt.emultest.java8.lang.StringTest;
import com.google.gwt.emultest.java8.math.BigIntegerConvertTest;
import com.google.gwt.emultest.java8.util.ArrayListTest;
import com.google.gwt.emultest.java8.util.ArraysTest;
import com.google.gwt.emultest.java8.util.ComparatorTest;
import com.google.gwt.emultest.java8.util.DoubleSummaryStatisticsTest;
import com.google.gwt.emultest.java8.util.HashMapTest;
import com.google.gwt.emultest.java8.util.IdentityHashMapTest;
import com.google.gwt.emultest.java8.util.IntSummaryStatisticsTest;
import com.google.gwt.emultest.java8.util.LinkedHashMapTest;
import com.google.gwt.emultest.java8.util.LinkedListTest;
import com.google.gwt.emultest.java8.util.ListTest;
import com.google.gwt.emultest.java8.util.LongSummaryStatisticsTest;
import com.google.gwt.emultest.java8.util.MapEntryTest;
import com.google.gwt.emultest.java8.util.MapTest;
import com.google.gwt.emultest.java8.util.OptionalDoubleTest;
import com.google.gwt.emultest.java8.util.OptionalIntTest;
import com.google.gwt.emultest.java8.util.OptionalLongTest;
import com.google.gwt.emultest.java8.util.OptionalTest;
import com.google.gwt.emultest.java8.util.PrimitiveIteratorTest;
import com.google.gwt.emultest.java8.util.SpliteratorsTest;
import com.google.gwt.emultest.java8.util.StringJoinerTest;
import com.google.gwt.emultest.java8.util.TreeMapTest;
import com.google.gwt.emultest.java8.util.VectorTest;
import com.google.gwt.emultest.java8.util.stream.CollectorsTest;
import com.google.gwt.emultest.java8.util.stream.DoubleStreamTest;
import com.google.gwt.emultest.java8.util.stream.IntStreamTest;
import com.google.gwt.emultest.java8.util.stream.LongStreamTest;
import com.google.gwt.emultest.java8.util.stream.StreamSupportTest;
import com.google.gwt.emultest.java8.util.stream.StreamTest;
import com.google.gwt.junit.tools.GWTTestSuite;

import junit.framework.Test;

/**
 * Test Java8 JRE emulations.
 */
public class EmulJava8Suite {

  public static Test suite() {
    GWTTestSuite suite = new GWTTestSuite("Tests for com.google.gwt.emul.java8");

    //-- java.lang
    suite.addTestSuite(DoubleTest.class);
    suite.addTestSuite(FloatTest.class);
    suite.addTestSuite(MathTest.class);
    suite.addTestSuite(StringTest.class);

    //-- java.math
    suite.addTestSuite(BigIntegerConvertTest.class);

    //-- java.util
    suite.addTestSuite(ArraysTest.class);
    suite.addTestSuite(ArrayListTest.class);
    suite.addTestSuite(LinkedListTest.class);
    suite.addTestSuite(ListTest.class);
    suite.addTestSuite(VectorTest.class);
    suite.addTestSuite(ComparatorTest.class);
    suite.addTestSuite(MapTest.class);
    suite.addTestSuite(MapEntryTest.class);
    suite.addTestSuite(HashMapTest.class);
    suite.addTestSuite(IdentityHashMapTest.class);
    suite.addTestSuite(LinkedHashMapTest.class);
    suite.addTestSuite(TreeMapTest.class);
    suite.addTestSuite(OptionalTest.class);
    suite.addTestSuite(OptionalIntTest.class);
    suite.addTestSuite(OptionalLongTest.class);
    suite.addTestSuite(OptionalDoubleTest.class);
    suite.addTestSuite(PrimitiveIteratorTest.class);
    suite.addTestSuite(SpliteratorsTest.class);
    suite.addTestSuite(StringJoinerTest.class);
    suite.addTestSuite(DoubleSummaryStatisticsTest.class);
    suite.addTestSuite(IntSummaryStatisticsTest.class);
    suite.addTestSuite(LongSummaryStatisticsTest.class);

    //-- java.util.stream
    suite.addTestSuite(CollectorsTest.class);
    suite.addTestSuite(DoubleStreamTest.class);
    suite.addTestSuite(IntStreamTest.class);
    suite.addTestSuite(LongStreamTest.class);
    suite.addTestSuite(StreamTest.class);
    suite.addTestSuite(StreamSupportTest.class);

    return suite;
  }
}
