예제 #1
0
        public virtual void testCreateMatcherForSuffix()
        {
            const string pattern = "helloworld";

            var matcher = new FileNameMatcher(pattern, null);

            matcher.Append("hello");

            FileNameMatcher childMatcher = matcher.CreateMatcherForSuffix();

            Assert.AreEqual(false, matcher.IsMatch());
            Assert.AreEqual(true, matcher.CanAppendMatch());
            Assert.AreEqual(false, childMatcher.IsMatch());
            Assert.AreEqual(true, childMatcher.CanAppendMatch());
            matcher.Append("world");
            Assert.AreEqual(true, matcher.IsMatch());
            Assert.AreEqual(false, matcher.CanAppendMatch());
            Assert.AreEqual(false, childMatcher.IsMatch());
            Assert.AreEqual(true, childMatcher.CanAppendMatch());
            childMatcher.Append("world");
            Assert.AreEqual(true, matcher.IsMatch());
            Assert.AreEqual(false, matcher.CanAppendMatch());
            Assert.AreEqual(true, childMatcher.IsMatch());
            Assert.AreEqual(false, childMatcher.CanAppendMatch());
            childMatcher.Reset();
            Assert.AreEqual(true, matcher.IsMatch());
            Assert.AreEqual(false, matcher.CanAppendMatch());
            Assert.AreEqual(false, childMatcher.IsMatch());
            Assert.AreEqual(true, childMatcher.CanAppendMatch());
            childMatcher.Append("world");
            Assert.AreEqual(true, matcher.IsMatch());
            Assert.AreEqual(false, matcher.CanAppendMatch());
            Assert.AreEqual(true, childMatcher.IsMatch());
            Assert.AreEqual(false, childMatcher.CanAppendMatch());
        }
예제 #2
0
        public virtual void testCopyConstructor()
        {
            const string pattern = "helloworld";

            var matcher = new FileNameMatcher(pattern, null);

            matcher.Append("hello");

            var copy = new FileNameMatcher(matcher);

            Assert.AreEqual(false, matcher.IsMatch());
            Assert.AreEqual(true, matcher.CanAppendMatch());
            Assert.AreEqual(false, copy.IsMatch());
            Assert.AreEqual(true, copy.CanAppendMatch());
            matcher.Append("world");
            Assert.AreEqual(true, matcher.IsMatch());
            Assert.AreEqual(false, matcher.CanAppendMatch());
            Assert.AreEqual(false, copy.IsMatch());
            Assert.AreEqual(true, copy.CanAppendMatch());
            copy.Append("world");
            Assert.AreEqual(true, matcher.IsMatch());
            Assert.AreEqual(false, matcher.CanAppendMatch());
            Assert.AreEqual(true, copy.IsMatch());
            Assert.AreEqual(false, copy.CanAppendMatch());
            copy.Reset();
            Assert.AreEqual(true, matcher.IsMatch());
            Assert.AreEqual(false, matcher.CanAppendMatch());
            Assert.AreEqual(false, copy.IsMatch());
            Assert.AreEqual(true, copy.CanAppendMatch());
            copy.Append("helloworld");
            Assert.AreEqual(true, matcher.IsMatch());
            Assert.AreEqual(false, matcher.CanAppendMatch());
            Assert.AreEqual(true, copy.IsMatch());
            Assert.AreEqual(false, copy.CanAppendMatch());
        }
예제 #3
0
        private static void AssertFileNameMatch(string pattern, string input, char excludedCharacter, bool matchExpected, bool appendCanMatchExpected)
        {
            var matcher = new FileNameMatcher(pattern, excludedCharacter);

            matcher.Append(input);
            Assert.AreEqual(matchExpected, matcher.IsMatch());
            Assert.AreEqual(appendCanMatchExpected, matcher.CanAppendMatch());
        }
예제 #4
0
        private static bool IsHostMatch(string pattern, string name)
        {
            FileNameMatcher fn;

            try
            {
                fn = new FileNameMatcher(pattern, null);
            }
            catch (InvalidPatternException)
            {
                return(false);
            }
            fn.Append(name);
            return(fn.IsMatch());
        }
예제 #5
0
        public virtual void testReset()
        {
            const string pattern = "helloworld";

            var matcher = new FileNameMatcher(pattern, null);

            matcher.Append("helloworld");
            Assert.AreEqual(true, matcher.IsMatch());
            Assert.AreEqual(false, matcher.CanAppendMatch());
            matcher.Reset();
            matcher.Append("hello");
            Assert.AreEqual(false, matcher.IsMatch());
            Assert.AreEqual(true, matcher.CanAppendMatch());
            matcher.Append("world");
            Assert.AreEqual(true, matcher.IsMatch());
            Assert.AreEqual(false, matcher.CanAppendMatch());
            matcher.Append("to much");
            Assert.AreEqual(false, matcher.IsMatch());
            Assert.AreEqual(false, matcher.CanAppendMatch());
            matcher.Reset();
            matcher.Append("helloworld");
            Assert.AreEqual(true, matcher.IsMatch());
            Assert.AreEqual(false, matcher.CanAppendMatch());
        }
예제 #6
0
 public bool IsIgnored(string path)
 {
     _matcher.Reset();
     _matcher.Append(path);
     return(_matcher.IsMatch());
 }
예제 #7
0
파일: IgnoreRule.cs 프로젝트: shoff/ngit
 /// <summary>Returns true if a match was made.</summary>
 /// <remarks>
 /// Returns true if a match was made.
 /// <br />
 /// This function does NOT return the actual ignore status of the
 /// target! Please consult
 /// <see cref="GetResult()">GetResult()</see>
 /// for the ignore status. The actual
 /// ignore status may be true or false depending on whether this rule is
 /// an ignore rule or a negation rule.
 /// </remarks>
 /// <param name="target">Name pattern of the file, relative to the base directory of this rule
 ///     </param>
 /// <param name="isDirectory">Whether the target file is a directory or not</param>
 /// <returns>
 /// True if a match was made. This does not necessarily mean that
 /// the target is ignored. Call
 /// <see cref="GetResult()">getResult()</see>
 /// for the result.
 /// </returns>
 public virtual bool IsMatch(string target, bool isDirectory)
 {
     if (!target.StartsWith("/"))
     {
         target = "/" + target;
     }
     if (matcher == null)
     {
         if (target.Equals(pattern))
         {
             //Exact match
             if (dirOnly && !isDirectory)
             {
                 //Directory expectations not met
                 return(false);
             }
             else
             {
                 //Directory expectations met
                 return(true);
             }
         }
         if ((target).StartsWith(pattern + "/"))
         {
             return(true);
         }
         if (nameOnly)
         {
             //Iterate through each sub-name
             string[] segments = target.Split("/");
             for (int idx = 0; idx < segments.Length; idx++)
             {
                 string segmentName = segments[idx];
                 if (segmentName.Equals(pattern) && DoesMatchDirectoryExpectations(isDirectory, idx
                                                                                   , segments.Length))
                 {
                     return(true);
                 }
             }
         }
     }
     else
     {
         matcher.Append(target);
         if (matcher.IsMatch())
         {
             return(true);
         }
         string[] segments = target.Split("/");
         if (nameOnly)
         {
             for (int idx = 0; idx < segments.Length; idx++)
             {
                 string segmentName = segments[idx];
                 //Iterate through each sub-directory
                 matcher.Reset();
                 matcher.Append(segmentName);
                 if (matcher.IsMatch() && DoesMatchDirectoryExpectations(isDirectory, idx, segments
                                                                         .Length))
                 {
                     return(true);
                 }
             }
         }
         else
         {
             //TODO: This is the slowest operation
             //This matches e.g. "/src/ne?" to "/src/new/file.c"
             matcher.Reset();
             for (int idx = 0; idx < segments.Length; idx++)
             {
                 string segmentName = segments[idx];
                 if (segmentName.Length > 0)
                 {
                     matcher.Append("/" + segmentName);
                 }
                 if (matcher.IsMatch() && DoesMatchDirectoryExpectations(isDirectory, idx, segments
                                                                         .Length))
                 {
                     return(true);
                 }
             }
         }
     }
     return(false);
 }