public void AllLiteral()
 {
   var p1 = new PathMatcher("x");
   Assert.AreEqual(0, p1.ArgumentCount);
   Assert.IsTrue(p1.Match("x").Success);
   Assert.AreEqual(0, p1.Match("x").Parameters.Length);
   Assert.IsFalse(p1.Match("X").Success);
 }
 private void VerifyMatchNo(string expr, string path)
 {
   var what = string.Format("Match {0} with {1}", expr, path);
   var p = new PathMatcher(expr);
   var match = p.Match(path);
   Assert.IsFalse(match.Success, what);
 }
    //[TestMethod()]
    //public void ValidManyMatches()
    //{
    //  string literal = "abcdefg";
    //  for (int parts = 1; parts < 5; parts++)
    //  {
    //    for (int prefixLength = 0; prefixLength < 3; prefixLength++)
    //    {
    //      for (int postfixLength = 0; postfixLength < 3; postfixLength++)
    //      {
    //        StringBuilder sb = new StringBuilder();
    //        for (int i = 0; i < parts; i++)
    //        {
    //          var prefix = literal.Substring(0, prefixLength);
    //          var postfix = literal.Substring(0, postfixLength);
    //          var name = literal.Substring(i, 1);
    //          if (sb.Length > 0 && sb[sb.Length - 1] == '}')
    //            sb.Append("x");
    //          sb.AppendFormat("{0}{{{1}}}{2}", prefix, name, postfix);
    //        }
    //        var expr = sb.ToString();
            
    //      }
    //    }
    //  }
    //}

    private void VerifyMatchDo(string expr, string path, params string[] expect)
    {
      var what = string.Format("Match {0} with {1}", expr, path);
      var p = new PathMatcher(expr);
      Assert.AreEqual(expect.Length, p.ArgumentCount, what);
      var match = p.Match(path);
      Assert.IsTrue(match.Success, what);
      Assert.AreEqual(expect.Length, match.Parameters.Length, what);
      //Assert.IsTrue(expect.SequenceEqual(match.Parameters), what);
    }