| 25 | import org.junit.runners.JUnit4; |
| 26 | |
| 27 | @RunWith(JUnit4.class) |
| 28 | public class NullabilityTest { |
| 29 | @Test public void testNullability_provides() { |
| 30 | NullModule module = new NullModule(); |
| 31 | NullComponent component = DaggerNullComponent.builder().nullModule(module).build(); |
| 32 | |
| 33 | // Can't construct NullFoo because it depends on Number, and Number was null. |
| 34 | try { |
| 35 | component.nullFoo(); |
| 36 | fail(); |
| 37 | } catch (NullPointerException npe) { |
| 38 | assertThat(npe).hasMessage("Cannot return null from a non-@Nullable @Provides method"); |
| 39 | } |
| 40 | |
| 41 | // set number to non-null so we can create |
| 42 | module.numberValue = 1; |
| 43 | NullFoo nullFoo = component.nullFoo(); |
| 44 | |
| 45 | // Then set it back to null so we can test its providers. |
| 46 | module.numberValue = null; |
| 47 | validate(true, nullFoo.string, nullFoo.stringProvider, nullFoo.numberProvider); |
| 48 | validate(true, nullFoo.methodInjectedString, nullFoo.methodInjectedStringProvider, |
| 49 | nullFoo.methodInjectedNumberProvider); |
| 50 | validate(true, nullFoo.fieldInjectedString, nullFoo.fieldInjectedStringProvider, |
| 51 | nullFoo.fieldInjectedNumberProvider); |
| 52 | } |
| 53 | |
| 54 | @Test public void testNullability_components() { |
| 55 | NullComponent nullComponent = new NullComponent() { |
| 56 | @Override public Provider<String> stringProvider() { |
| 57 | return new Provider<String>() { |
| 58 | @Override public String get() { |
| 59 | return null; |
| 60 | } |
| 61 | }; |
| 62 | } |
| 63 | |
| 64 | @Override public String string() { |
| 65 | return null; |
| 66 | } |
| 67 | |
| 68 | @Override public Provider<Number> numberProvider() { |
| 69 | return new Provider<Number>() { |
| 70 | @Override public Number get() { |
| 71 | return null; |
| 72 | } |
| 73 | }; |
| 74 | } |
| 75 | |
| 76 | @Override public Number number() { |
| 77 | return null; |
| 78 | } |
| 79 | |
| 80 | @Override public NullFoo nullFoo() { |
| 81 | return null; |
| 82 | } |
| 83 | }; |
| 84 | NullComponentWithDependency component = |
nothing calls this directly
no outgoing calls
no test coverage detected