public void testSplit() {
    ValueHolder<String> value = new Constant<String>("buckminster.tigris.org:/cvs"); // $NON-NLS-1$
    String fmtString =
        "First \"{0}\", second \"{1}\", third \"{2}\", and fourth \"{3}\""; //$NON-NLS-1$

    Format fmt = new Format(fmtString);
    Split split = new Split("\\.|:", 0); // $NON-NLS-1$
    split.addValueHolder(value);
    fmt.addValueHolder(split);

    String expected =
        new MessageFormat(fmtString)
            .format(
                new String[] {
                  "buckminster", //$NON-NLS-1$
                  "tigris",
                  "org",
                  "/cvs"
                }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

    IProperties<String> props = BMProperties.getSystemProperties();
    String result = fmt.getValue(props);
    log(result);
    assertEquals(expected, result);
  }
  public void testSystemProperties() {
    Format fmt =
        new Format(
            "You are {0}, the parent of your home is {1} and you run Java version {2}"); //$NON-NLS-1$
    fmt.addValueHolder(new PropertyRef<String>(String.class, "user.name")); // $NON-NLS-1$
    Replace rpl1 = new Replace();
    rpl1.addMatch(new Replace.Match(Pattern.quote("\\"), "/", false)); // $NON-NLS-1$ //$NON-NLS-2$
    rpl1.addValueHolder(new PropertyRef<String>(String.class, "user.home")); // $NON-NLS-1$
    Replace rpl2 = new Replace();
    rpl2.addMatch(new Replace.Match("^(.*)/[^/]+$", "$1", false)); // $NON-NLS-1$ //$NON-NLS-2$
    rpl2.addValueHolder(rpl1);
    fmt.addValueHolder(rpl2);
    fmt.addValueHolder(new PropertyRef<String>(String.class, "java.version")); // $NON-NLS-1$

    IProperties<String> props = BMProperties.getSystemProperties();
    String result = fmt.getValue(props);
    String expected =
        "You are "
            + props.get("user.name")
            + ", the parent of your home is " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
            + (new File(props.get("user.home"))).getParent().replace('\\', '/')
            + " and you run Java version " //$NON-NLS-1$ //$NON-NLS-2$
            + props.get("java.version"); // $NON-NLS-1$

    log(result);
    assertEquals(expected, result);
  }
  public void testExpressions() {
    ValueHolder<String> cvsRoot =
        new Constant<String>(":pserver:${user.name}@buckminster.tigris.org:/cvs"); // $NON-NLS-1$
    String fmtString =
        "First \"{0}\", second \"{1}\", third \"{2}\", and fourth \"{3}\""; //$NON-NLS-1$

    Format fmt = new Format(fmtString);
    Split split = new Split(":|@", 0); // $NON-NLS-1$
    Replace rpl = new Replace();
    rpl.addMatch(new Replace.Match("^:(.*)$", "$1", false)); // $NON-NLS-1$ //$NON-NLS-2$
    rpl.addValueHolder(cvsRoot);
    split.addValueHolder(rpl);
    fmt.addValueHolder(split);

    String expected =
        new MessageFormat(fmtString)
            .format(
                new String[] {
                  "pserver", //$NON-NLS-1$
                  System.getProperty("user.name"),
                  "buckminster.tigris.org",
                  "/cvs"
                }); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$

    IProperties<String> props = BMProperties.getSystemProperties();
    String result = fmt.getValue(props);
    log(result);
    assertEquals(expected, result);
  }
 public void testExpandingEnvVarProperties() {
   IProperties<String> props = new ExpandingProperties<String>(BMProperties.getSystemProperties());
   props.put("env.salut", "Hello ${env_var:LOGNAME}!");
   props.put("env.salut.home", "${env.salut} Your $${env_var:PATH} is ${env_var:PATH}");
   String result = props.get("env.salut.home"); // $NON-NLS-1$
   String expected =
       "Hello "
           + System.getenv("LOGNAME")
           + "! Your ${env_var:PATH} is " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
           + System.getenv("PATH"); // $NON-NLS-1$
   log(result);
   assertEquals(expected, result);
 }
  public void testReplace() {
    ValueHolder<String> value = new Constant<String>("buckminster.tigris.org:/cvs"); // $NON-NLS-1$

    Replace rpl = new Replace();
    rpl.addMatch(
        new Replace.Match(
            "(.*)\\.tigris\\.org", "$1.eclipse.org", false)); // $NON-NLS-1$ //$NON-NLS-2$
    rpl.addValueHolder(value);

    String expected = "buckminster.eclipse.org:/cvs"; // $NON-NLS-1$

    IProperties<String> props = BMProperties.getSystemProperties();
    String result = rpl.getValue(props);
    log(result);
    assertEquals(expected, result);
  }
  public void testExpandingProperties() {
    IProperties<String> props = new ExpandingProperties<String>(BMProperties.getSystemProperties());
    props.put("salut", "Hello ${user.name}!"); // $NON-NLS-1$ //$NON-NLS-2$
    props.put(
        "salut.home", "${salut} Your $${user.home} is ${user.home}"); // $NON-NLS-1$ //$NON-NLS-2$

    String result = props.get("salut.home"); // $NON-NLS-1$
    String expected =
        "Hello "
            + System.getProperty("user.name")
            + "! Your ${user.home} is " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
            + System.getProperty("user.home"); // $NON-NLS-1$

    log(result);
    assertEquals(expected, result);
  }
  public void testPropertyParser() throws Exception {
    IProperties<String> props = new ExpandingProperties<String>(BMProperties.getSystemProperties());
    props.put("buckminster.component.target", "ant-optional"); // $NON-NLS-1$ //$NON-NLS-2$
    props.put("buckminster.component.name", "org.apache.tools.ant"); // $NON-NLS-1$ //$NON-NLS-2$
    props.put("buckminster.component.version", "1.7.0beta1"); // $NON-NLS-1$ //$NON-NLS-2$

    DummyParser parser = new DummyParser(props);
    parser.parse(this.getClass().getResource("/testData/misc/valuetest.xml")); // $NON-NLS-1$

    String result = props.get("maven.url"); // $NON-NLS-1$
    String verboseResult = props.get("verbose.maven.url"); // $NON-NLS-1$

    log(result);
    log(verboseResult);

    assertEquals(
        "http://www.ibiblio.org/maven/ant/jars/ant-optional-1.7.0.jar", result); // $NON-NLS-1$
    assertEquals("The created URL is \"" + result + '"', verboseResult); // $NON-NLS-1$
  }