1   /**
2    * Logback: the generic, reliable, fast and flexible logging framework.
3    * 
4    * Copyright (C) 2000-2008, QOS.ch
5    * 
6    * This library is free software, you can redistribute it and/or modify it under
7    * the terms of the GNU Lesser General Public License as published by the Free
8    * Software Foundation.
9    */
10  
11  package ch.qos.logback.core.joran.spi;
12  
13  import static org.junit.Assert.assertEquals;
14  
15  import org.junit.Test;
16  
17  /**
18   * Test pattern manipulation code.
19   * 
20   * @author Ceki Gulcu
21   */
22  public class PatternTest {
23  
24    @Test
25    public void test1() {
26      Pattern p = new Pattern("a");
27      assertEquals(1, p.size());
28      assertEquals("a", p.peekLast());
29      assertEquals("a", p.get(0));
30    }
31  
32    @Test
33    public void testSuffix() {
34      Pattern p = new Pattern("a/");
35      assertEquals(1, p.size());
36      assertEquals("a", p.peekLast());
37      assertEquals("a", p.get(0));
38    }
39    
40    @Test
41    public void test2() {
42      Pattern p = new Pattern("a/b");
43      assertEquals(2, p.size());
44      assertEquals("b", p.peekLast());
45      assertEquals("a", p.get(0));
46      assertEquals("b", p.get(1));
47    }
48  
49    @Test
50    public void test3() {
51      Pattern p = new Pattern("a123/b1234/cvvsdf");
52      assertEquals(3, p.size());
53      assertEquals("a123", p.get(0));
54      assertEquals("b1234", p.get(1));
55      assertEquals("cvvsdf", p.get(2));
56    }
57  
58    @Test
59    public void test4() {
60      Pattern p = new Pattern("/a123/b1234/cvvsdf");
61      assertEquals(3, p.size());
62      assertEquals("a123", p.get(0));
63      assertEquals("b1234", p.get(1));
64      assertEquals("cvvsdf", p.get(2));
65    }
66  
67    @Test
68    public void test5() {
69      Pattern p = new Pattern("//a");
70      assertEquals(1, p.size());
71      assertEquals("a", p.get(0));
72    }
73  
74    @Test
75    public void test6() {
76      Pattern p = new Pattern("//a//b");
77      assertEquals(2, p.size());
78      assertEquals("a", p.get(0));
79      assertEquals("b", p.get(1));
80    }
81  
82    
83    // test tail matching
84    @Test
85    public void testTailMatch() {
86      {
87        Pattern p = new Pattern("/a/b");
88        Pattern rulePattern = new Pattern("*");
89        assertEquals(0, p.getTailMatchLength(rulePattern));
90      }
91  
92      {
93        Pattern p = new Pattern("/a");
94        Pattern rulePattern = new Pattern("*/a");
95        assertEquals(1, p.getTailMatchLength(rulePattern));
96      }
97      
98      {
99        Pattern p = new Pattern("/a/b");
100       Pattern rulePattern = new Pattern("*/b");
101       assertEquals(1, p.getTailMatchLength(rulePattern));
102     }
103     
104     
105     {
106       Pattern p = new Pattern("/a/b/c");
107       Pattern rulePattern = new Pattern("*/b/c");
108       assertEquals(2, p.getTailMatchLength(rulePattern));
109     }
110   }
111   
112   // test prefix matching
113   @Test
114   public void testPrefixMatch() {
115     {
116       Pattern p = new Pattern("/a/b");
117       Pattern rulePattern = new Pattern("/x/*");
118       assertEquals(0, p.getPrefixMatchLength(rulePattern));
119     }
120 
121     {
122       Pattern p = new Pattern("/a");
123       Pattern rulePattern = new Pattern("/x/*");
124       assertEquals(0, p.getPrefixMatchLength(rulePattern));
125     }
126 
127     {
128       Pattern p = new Pattern("/a/b");
129       Pattern rulePattern = new Pattern("/a/*");
130       assertEquals(1, p.getPrefixMatchLength(rulePattern));
131     }
132     
133     {
134       Pattern p = new Pattern("/a/b");
135       Pattern rulePattern = new Pattern("/a/b/*");
136       assertEquals(2, p.getPrefixMatchLength(rulePattern));
137     }
138     
139     {
140       Pattern p = new Pattern("/a/b");
141       Pattern rulePattern = new Pattern("/*");
142       assertEquals(0, p.getPrefixMatchLength(rulePattern));
143     }
144   }
145 
146 }