Sha256: b1f4ebc54f3b50671ef9819208acd43dcf3d5e2f48d9fda868732e423df6b979

Contents?: true

Size: 1.82 KB

Versions: 6

Compression:

Stored size: 1.82 KB

Contents

package org.embulk;

import java.util.ArrayList;
import java.util.List;
import org.junit.rules.TestRule;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import com.google.common.collect.ImmutableList;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;

public class GuiceBinder
        implements TestRule
{
    private final List<Module> baseModules;
    private List<Module> extraModules;
    private Injector injector;

    public GuiceBinder(Module... baseModules)
    {
        this.baseModules = ImmutableList.copyOf(baseModules);
        reset();
    }

    private void reset()
    {
        extraModules = new ArrayList<Module>();
        injector = null;
    }

    public synchronized void addModule(Module module)
    {
        if (injector != null) {
            throw new IllegalStateException("Injector is already initialized. Call addModule before getInjector or getInstance");
        }
        extraModules.add(module);
    }

    public synchronized Injector getInjector()
    {
        if (injector == null) {
            ImmutableList.Builder modules = ImmutableList.builder();
            modules.addAll(baseModules);
            modules.addAll(extraModules);
            injector = Guice.createInjector(modules.build());
        }
        return injector;
    }

    public <T> T getInstance(Class<T> klass)
    {
        return getInjector().getInstance(klass);
    }

    @Override
    public Statement apply(Statement base, Description description)
    {
        return new GuceBinderWatcher().apply(base, description);
    }

    private class GuceBinderWatcher
            extends TestWatcher
    {
        @Override
        protected void starting(Description description)
        {
            reset();
        }
    }
}

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
embulk-0.3.2 embulk-core/src/test/java/org/embulk/GuiceBinder.java
embulk-0.3.1 embulk-core/src/test/java/org/embulk/GuiceBinder.java
embulk-0.3.0 embulk-core/src/test/java/org/embulk/GuiceBinder.java
embulk-0.2.1 embulk-core/src/test/java/org/embulk/GuiceBinder.java
embulk-0.2.0 embulk-core/src/test/java/org/embulk/GuiceBinder.java
embulk-0.1.0 embulk-core/src/test/java/org/embulk/GuiceBinder.java