package com.cookpad.puree; import com.google.gson.JsonObject; import com.cookpad.puree.outputs.OutputConfiguration; import com.cookpad.puree.outputs.PureeOutput; import org.junit.Test; import org.junit.runner.RunWith; import android.content.Context; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; import java.util.List; import java.util.Map; import javax.annotation.Nonnull; import javax.annotation.ParametersAreNonnullByDefault; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; @ParametersAreNonnullByDefault @RunWith(AndroidJUnit4.class) public class PureeConfigurationTest { @Test public void checkDefaultValue() { Context context = InstrumentationRegistry.getContext(); PureeConfiguration conf = new PureeConfiguration.Builder(context) .build(); assertThat(conf.getContext(), notNullValue()); assertThat(conf.getGson(), notNullValue()); Map<?, ?> sourceOutputMap = conf.getSourceOutputMap(); assertThat(sourceOutputMap.size(), is(0)); } @Test public void build() { Context context = InstrumentationRegistry.getContext(); PureeConfiguration conf = new PureeConfiguration.Builder(context) .source(FooLog.class).to(new OutFoo()) .source(FooLog.class).filters(new FooFilter()).to(new OutFoo()) .source(FooLog.class).filter(new FooFilter()).filter(new BarFilter()).to(new OutBar()) .source(BarLog.class).filter(new FooFilter()).to(new OutFoo()) .build(); { List<PureeOutput> outputs = conf.getRegisteredOutputPlugins(FooLog.class); assertThat(outputs, is(not(nullValue()))); assertThat(outputs.size(), is(3)); } { List<PureeOutput> outputs = conf.getRegisteredOutputPlugins(BarLog.class); assertThat(outputs.size(), is(1)); assertThat(outputs.get(0).getClass().getName(), is(OutFoo.class.getName())); List<PureeFilter> filters = outputs.get(0).getFilters(); assertThat(filters.size(), is(1)); assertThat(filters.get(0).getClass().getName(), is(FooFilter.class.getName())); } } @Test public void build2() { Context context = InstrumentationRegistry.getContext(); PureeConfiguration conf = new PureeConfiguration.Builder(context) .register(FooLog.class, new OutFoo()) .register(FooLog.class, new OutFoo().withFilters(new FooFilter())) .register(FooLog.class, new OutBar().withFilters(new FooFilter(), new BarFilter())) .register(BarLog.class, new OutFoo().withFilters(new FooFilter())) .build(); { List<PureeOutput> outputs = conf.getRegisteredOutputPlugins(FooLog.class); assertThat(outputs.size(), is(3)); } { List<PureeOutput> outputs = conf.getRegisteredOutputPlugins(BarLog.class); assertThat(outputs.size(), is(1)); assertThat(outputs.get(0).getClass().getName(), is(OutFoo.class.getName())); List<PureeFilter> filters = outputs.get(0).getFilters(); assertThat(filters.size(), is(1)); assertThat(filters.get(0).getClass().getName(), is(FooFilter.class.getName())); } } private static class FooLog implements PureeLog { } private static class BarLog implements PureeLog { } private static class FooFilter implements PureeFilter { @Override public JsonObject apply(JsonObject jsonLog) { return null; } } private static class BarFilter implements PureeFilter { @Override public JsonObject apply(JsonObject jsonLog) { return null; } } private static class OutFoo extends PureeOutput { @Nonnull @Override public String type() { return "out_foo"; } @Nonnull @Override public OutputConfiguration configure(OutputConfiguration conf) { return conf; } @Override public void emit(JsonObject jsonLog) { } } private static class OutBar extends PureeOutput { @Nonnull @Override public String type() { return "out_bar"; } @Nonnull @Override public OutputConfiguration configure(OutputConfiguration conf) { return conf; } @Override public void emit(JsonObject jsonLog) { } } }