@Test
  public void testGlobalsAttributeWithDeepNestedScript() throws IOException {
    File dir = tempDir();
    File foo =
        tempScript(
            "foo.mt", "Button 1FOO${foo} Tap\nScript bar.mt Run\nButton 2FOO${foo} Tap", dir);
    tempScript(
        "bar.mt",
        "Button 1BAR${foo} Tap\nGlobals * Set foo=234\nScript baz.mt Run\nButton 2BAR${foo} Tap",
        dir);
    tempScript(
        "baz.mt", "Button 1BAZ${foo} Tap\nGlobals * Set foo=345\nButton 2BAZ${foo} Tap", dir);

    task.setScript(foo);
    task.setAgent("iOS");
    task.setGlobals("foo=123");

    task.execute();

    assertThat(server.getCommands(), notNullValue());
    assertThat(server.getCommands().size(), is(6));
    assertThat(server.getCommands().get(0).getCommand(), is("Button 1FOO123 Tap"));
    assertThat(server.getCommands().get(1).getCommand(), is("Button 1BAR123 Tap"));
    assertThat(server.getCommands().get(2).getCommand(), is("Button 1BAZ234 Tap"));
    assertThat(server.getCommands().get(3).getCommand(), is("Button 2BAZ345 Tap"));
    assertThat(server.getCommands().get(4).getCommand(), is("Button 2BAR345 Tap"));
    assertThat(server.getCommands().get(5).getCommand(), is("Button 2FOO345 Tap"));

    assertThat(Globals.getGlobals().size(), is(1));
    assertThat(Globals.getGlobal("foo"), is("345"));
  }
  @Test
  public void testGlobalsAttribute() throws IOException {
    File dir = tempDir();
    File foo = tempScript("foo.mt", "Button ${foo} Tap ${bar}", dir);

    task.setScript(foo);
    task.setAgent("iOS");
    task.setGlobals("foo=123 bar=\"Bo Bo\"");

    task.execute();

    assertThat(server.getCommands(), notNullValue());
    assertThat(server.getCommands().size(), is(1));
    assertThat(server.getCommands().get(0).getCommand(), is("Button 123 Tap \"Bo Bo\""));

    assertThat(Globals.getGlobals().size(), is(2));
    assertThat(Globals.getGlobal("foo"), is("123"));
    assertThat(Globals.getGlobal("bar"), is("Bo Bo"));
  }
  @Test
  public void testPropertiesFile() throws IOException {
    File dir = tempDir();
    tempScript("globals.properties", "foo=123\nbar=Bo Bo", dir);
    File foo = tempScript("foo.mt", "Button ${foo} Tap\nButton ${bar} Tap", dir);

    task.setScript(foo);
    task.setAgent("iOS");

    task.execute();

    assertThat(server.getCommands(), notNullValue());
    assertThat(server.getCommands().size(), is(2));
    assertThat(server.getCommands().get(0).getCommand(), is("Button 123 Tap"));
    assertThat(server.getCommands().get(1).getCommand(), is("Button \"Bo Bo\" Tap"));

    assertThat(Globals.getGlobals().size(), is(2));
    assertThat(Globals.getGlobal("foo"), is("123"));
    assertThat(Globals.getGlobal("bar"), is("Bo Bo"));
  }
  @Before
  public void before() throws IOException {
    task = new RunTask();
    task.setHost(HOST);
    task.setPort(PORT);

    proj = new Project();
    task.setProject(proj);

    server = new PlaybackCommandServer(new TestHelper(), PORT);
    Globals.clear();
  }
  @Test
  public void testBothGlobalsAttributeAndPropertiesFile() throws IOException {
    File dir = tempDir();
    tempScript("globals.properties", "foo=123\nbar=Bo Bo", dir);
    File foo = tempScript("foo.mt", "Button ${foo} Tap\nButton ${bar} Tap", dir);

    task.setScript(foo);
    task.setAgent("iOS");
    task.setGlobals("foo=234");

    task.execute();

    assertThat(server.getCommands(), notNullValue());
    assertThat(server.getCommands().size(), is(2));
    // because the globals attribute overrides the properties file
    assertThat(server.getCommands().get(0).getCommand(), is("Button 234 Tap"));
    assertThat(server.getCommands().get(1).getCommand(), is("Button \"Bo Bo\" Tap"));

    assertThat(Globals.getGlobals().size(), is(2));
    assertThat(Globals.getGlobal("foo"), is("234"));
    assertThat(Globals.getGlobal("bar"), is("Bo Bo"));
  }