/** * Copyright (c) 2016-present, RxJava Contributors. * * 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 io.reactivex.internal.util; import java.io.*; import java.lang.reflect.Method; import java.util.*; /** * Utility class that lists tests related to Observable that is not present in Flowable tests. */ public final class ObservableToFlowabeTestSync { private ObservableToFlowabeTestSync() { throw new IllegalStateException("No instances!"); } static List<String> readAllLines(File f) { List<String> result = new ArrayList<String>(); try { BufferedReader in = new BufferedReader(new FileReader(f)); try { String line; while ((line = in.readLine()) != null) { result.add(line); } } finally { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } return result; } static void list(String basepath, String basepackage) throws Exception { File[] observables = new File(basepath + "observable/").listFiles(); int count = 0; for (File f : observables) { if (!f.getName().endsWith(".java")) { continue; } Class<?> clazz = Class.forName(basepackage + "observable." + f.getName().replace(".java", "")); String cn = f.getName().replace(".java", "").replace("Observable", "Flowable"); File f2 = new File(basepath + "/flowable/" + cn + ".java"); if (!f2.exists()) { continue; } Class<?> clazz2 = Class.forName(basepackage + "flowable." + cn); Set<String> methods2 = new HashSet<String>(); for (Method m : clazz2.getMethods()) { methods2.add(m.getName()); } for (Method m : clazz.getMethods()) { if (!methods2.contains(m.getName()) && !methods2.contains(m.getName().replace("Observable", "Flowable"))) { count++; System.out.println(); System.out.print("java.lang.RuntimeException: missing > "); System.out.println(m.getName()); System.out.print(" at "); System.out.print(clazz.getName()); System.out.print(" ("); System.out.print(clazz.getSimpleName()); System.out.print(".java:"); List<String> lines = readAllLines(f); int j = 1; for (int i = 1; i <= lines.size(); i++) { if (lines.get(i - 1).contains("public void " + m.getName() + "(")) { j = i; } } System.out.print(j); System.out.println(")"); System.out.print(" at "); System.out.print(clazz2.getName()); System.out.print(" ("); System.out.print(clazz2.getSimpleName()); lines = readAllLines(f2); System.out.print(".java:"); System.out.print(lines.size() - 1); System.out.println(")"); } } } System.out.println(); System.out.println(count); } public static void main(String[] args) throws Exception { list("src/test/java/io/reactivex/internal/operators/", "io.reactivex.internal.operators."); // list("src/test/java/io/reactivex/", "io.reactivex."); } }