From 7d272615961e43851ab2ee0d57d2b849454d7f9f Mon Sep 17 00:00:00 2001 From: Shubham Ugare Date: Wed, 24 Apr 2019 21:16:51 +0530 Subject: [PATCH] Added tests for optional emptiness support with Rx --- .../java/com/uber/nullaway/NullAwayTest.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/nullaway/src/test/java/com/uber/nullaway/NullAwayTest.java b/nullaway/src/test/java/com/uber/nullaway/NullAwayTest.java index d167482205..41cb0dc545 100644 --- a/nullaway/src/test/java/com/uber/nullaway/NullAwayTest.java +++ b/nullaway/src/test/java/com/uber/nullaway/NullAwayTest.java @@ -1551,6 +1551,67 @@ public void OptionalEmptinessUncheckedTest() { .doTest(); } + @Test + public void OptionalEmptinessRxPositiveTest() { + compilationHelper + .setArgs( + Arrays.asList( + "-d", + temporaryFolder.getRoot().getAbsolutePath(), + "-XepOpt:NullAway:AnnotatedPackages=com.uber,io.reactivex", + "-XepOpt:NullAway:UnannotatedSubPackages=com.uber.lib.unannotated", + "-XepOpt:NullAway:CheckOptionalEmptiness=true")) + .addSourceLines( + "TestPositive.java", + "package com.uber;", + "import java.util.Optional;", + "import io.reactivex.Observable;", + "public class TestPositive {", + " private static boolean perhaps() { return Math.random() > 0.5; }", + " void foo(Observable> observable) {", + " observable", + " .filter(optional -> optional.isPresent() || perhaps())", + " // BUG: Diagnostic contains: Optional optional can be empty", + " .map(optional -> optional.get().toString());", + " observable", + " .filter(optional -> optional.isPresent() || perhaps())", + " // BUG: Diagnostic contains: returning @Nullable expression from method with @NonNull", + " .map(optional -> optional.get())", + " .map(irr -> irr.toString());", + " }", + "}") + .doTest(); + } + + @Test + public void OptionalEmptinessRxNegativeTest() { + compilationHelper + .setArgs( + Arrays.asList( + "-d", + temporaryFolder.getRoot().getAbsolutePath(), + "-XepOpt:NullAway:AnnotatedPackages=com.uber", + "-XepOpt:NullAway:UnannotatedSubPackages=com.uber.lib.unannotated", + "-XepOpt:NullAway:CheckOptionalEmptiness=true")) + .addSourceLines( + "TestNegative.java", + "package com.uber;", + "import java.util.Optional;", + "import io.reactivex.Observable;", + "public class TestNegative {", + " private static boolean perhaps() { return Math.random() > 0.5; }", + " void foo(Observable> observable) {", + " observable", + " .filter(optional -> optional.isPresent() && perhaps())", + " .map(optional -> optional.get().toString());", + " observable", + " .filter(optional -> optional.isPresent() && perhaps())", + " .map(optional -> optional.get());", + " }", + "}") + .doTest(); + } + @Test public void testCastToNonNull() { compilationHelper