### Question:
Condition implements Internal<Condition<S, T>, T> { public Logger<Condition<S, T>, T> log(Object tag) { return new Logger<>(this, sourceProxy.getConfiguration(), tag); } private  Condition(S source, Predicate<T> predicate, boolean negateExpression); S then(Consumer<T> action); S invoke(Action action); Optional<R> thenMap(Function<T, R> mapper); Optional<R> thenTo(@NonNull R item); Optional<R> thenTo(@NonNull Callable<R> itemCallable); Logger<Condition<S, T>, T> log(Object tag); @Override Proxy<Condition<S, T>, T> access();  }### Answer:
@Test public void logWithSelfAsSourceThenReturnSelfAsSource() { Condition<?,?> source = Chain.let(0).when(new Predicate<Integer>() { @Override public boolean test(Integer integer) throws Exception { return false; } }); Logger<?, ?> logger = source.log("1"); assertEquals(source, logger.source); }
@Test public void logWithStringTagThenReturnLoggerWithThatTag() { Condition<?,?> source = Chain.let(0).when(new Predicate<Integer>() { @Override public boolean test(Integer integer) throws Exception { return false; } }); Logger<?, ?> logger = source.log("1"); assertEquals("1", logger.tag); }