@Test
  public void testEmptyConstruction() {

    // PREPARE & TEST
    final StringVariableResolver testee = new StringVariableResolver(new ArrayList<Variable>());

    // VERIFY
    assertThat(testee.getDepth()).isEmpty();
    assertThat(testee.getResolved()).isEmpty();
    assertThat(testee.getUnresolved()).isEmpty();
  }
  @Test
  public void testTwoLevels() {

    // PREPARE
    final List<Variable> vars = new ArrayList<Variable>();
    vars.add(new SimpleVariable("a", "a${b}"));
    vars.add(new SimpleVariable("b", "2"));

    // TEST
    final StringVariableResolver testee = new StringVariableResolver(vars);

    // VERIFY
    assertThat(testee.getDepth()).contains(entry("a", 1), entry("b", 0));
    assertThat(testee.getResolved()).contains(entry("a", "a2"), entry("b", "2"));
    assertThat(testee.getUnresolved()).contains(entry("a", "a${b}"), entry("b", "2"));
  }
  @Test
  public void testFourLevels() {

    // PREPARE
    final List<Variable> vars = new ArrayList<Variable>();
    vars.add(new SimpleVariable("a", "1${b}"));
    vars.add(new SimpleVariable("b", "2${c}"));
    vars.add(new SimpleVariable("c", "3${d}"));
    vars.add(new SimpleVariable("d", "4"));

    // TEST
    final StringVariableResolver testee = new StringVariableResolver(vars);

    // VERIFY
    assertThat(testee.getDepth())
        .contains(entry("a", 3), entry("b", 2), entry("c", 1), entry("d", 0));
    assertThat(testee.getResolved())
        .contains(entry("a", "1234"), entry("b", "234"), entry("c", "34"), entry("d", "4"));
    assertThat(testee.getUnresolved())
        .contains(entry("a", "1${b}"), entry("b", "2${c}"), entry("c", "3${d}"), entry("d", "4"));
  }