Package org.jbehave.core.steps.needle

Source Code of org.jbehave.core.steps.needle.NeedleStepsFactoryBehaviour$FooStepsWithDependency

package org.jbehave.core.steps.needle;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.util.List;

import javax.inject.Inject;

import org.jbehave.core.annotations.Given;
import org.jbehave.core.annotations.needle.NeedleInjectionProvider;
import org.jbehave.core.configuration.MostUsefulConfiguration;
import org.jbehave.core.configuration.needle.ValueGetterProvider;
import org.jbehave.core.steps.CandidateSteps;
import org.jbehave.core.steps.InjectableStepsFactory;
import org.jbehave.core.steps.Steps;
import org.junit.Test;
import org.needle4j.injection.InjectionProvider;

public class NeedleStepsFactoryBehaviour {

  @Test
  public void stepsShouldBeCreated() throws NoSuchFieldException, IllegalAccessException {
    // Given
    final InjectableStepsFactory factory = new NeedleStepsFactory(new MostUsefulConfiguration(), FooSteps.class);
    // When
    List<CandidateSteps> steps = factory.createCandidateSteps();
    // Then
    assertEquals(1, steps.size());
    assertTrue(steps.get(0) instanceof CandidateSteps);
    Object instance = stepsInstance(steps.get(0));
    assertTrue(instance instanceof FooSteps);
  }

  @Test
  public void stepsShouldContainInjectedDependencies() throws NoSuchFieldException, IllegalAccessException {
    // Given
    final InjectableStepsFactory factory = new NeedleStepsFactory(new MostUsefulConfiguration(),
        FooStepsWithDependency.class);
    // When
    List<CandidateSteps> steps = factory.createCandidateSteps();
    // Then
    assertEquals(1, steps.size());
    assertTrue(steps.get(0) instanceof CandidateSteps);
    Object instance = stepsInstance(steps.get(0));
    assertTrue(instance instanceof FooStepsWithDependency);
    FooStepsWithDependency withDependency = (FooStepsWithDependency) instance;
    assertNotNull(withDependency.getter);
    assertEquals(ValueGetter.VALUE, withDependency.getter.getValue());
  }

  private Object stepsInstance(CandidateSteps candidateSteps) {
    return ((Steps) candidateSteps).instance();
  }

  public static class FooSteps {
    @NeedleInjectionProvider
    private InjectionProvider<?> provider = new ValueGetterProvider();

    @Given("a step with a $param")
    public void aStepWithAParam(String param) {
    }

  }

  public static class FooStepsWithDependency extends FooSteps {
    @Inject
    private ValueGetter getter;

    public ValueGetter getGetter() {
      return getter;
    }

  }
}
TOP

Related Classes of org.jbehave.core.steps.needle.NeedleStepsFactoryBehaviour$FooStepsWithDependency

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.