MentaRegex

Rev

Rev 4 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.mentaregex;

import static org.junit.Assert.*;
import static org.mentaregex.Regex.*;

import org.junit.Test;

public class RegexTest {

        @Test
        public void testMatches() {

                final String s = "sergio_oliveira_jr";

                assertTrue(matches(s, "/vei/"));
                assertTrue(matches(s, "/_jr$/"));
                assertTrue(matches(s, "/_jr/"));
                assertTrue(matches(s, "/^sergio/"));
                assertTrue(matches(s, "/sergio/"));

                assertTrue(matches(s, "/^s.+r$/"));
                assertTrue(matches(s, "/s.+r$/"));
                assertTrue(matches(s, "/^s.+r/"));
                assertTrue(matches(s, "/s.+r/"));

                assertTrue(matches(s, "/_\\w+_/"));

                assertFalse(matches(s, "/\\d/"));
                assertFalse(matches(s, "/^oliveira/"));
                assertFalse(matches(s, "/oliveira$/"));
        }

        @Test
        public void testMatchesIgnoreCase() {

                final String s = "sergio_OlIvEIrA_jr";

                assertTrue(matches(s, "/oliveira/i"));
                assertFalse(matches(s, "/oliveira/"));
        }

        private static void check(final String[] matches, final String... s) {

                assertEquals(matches.length, s.length);

                for (int i = 0; i < matches.length; i++) {
                        assertEquals(matches[i], s[i]);
                }
        }

        @Test
        public void testMatch() {

                String[] matches;

                final String s = "aa11bb22cc33";

                matches = match(s, "/aa11(\\w\\w)/");

                check(matches, "bb");

                matches = match(s, "/(\\d\\d)/");

                check(matches, "11");

                matches = match(s, "/(AA)/");

                assertNull(matches);

                matches = match(s, "/(AA)/i");

                check(matches, "aa");

                matches = match(s, "/11([a-z]+\\d+)/");

                check(matches, "bb22");
        }

        @Test
        public void testMatchGlobal() {

                String[] matches;

                final String s = "aa11bb22cc33";

                matches = match(s, "/(\\d\\d)/g");

                check(matches, "11", "22", "33");

                matches = match(s, "/([a-z]{2})/g");

                check(matches, "aa", "bb", "cc");

                matches = match(s, "/[a-z]{2}(\\d{2})/g");

                check(matches, "11", "22", "33");
        }
       
        @Test
        public void testSpecialCase() {
               
                String s = "aaaaaa [tag]house[/tag] bbbbb [tag]home[/tag] cccccccccccc";
               
                String[] m1 = Regex.match(s, "/\\[tag\\](.*?)\\[\\/tag\\]/");
               
                assertEquals("house", m1[0]);
        }

        @Test
        public void testSubstitution() {

                assertEquals("sergioAApelaAA", sub("sergio33pela44", "s/\\d+/AA/gi"));

                assertEquals("sergiopelaAAA", sub("sergioAAApelaAAA", "s/AAA//"));

                assertEquals("sergiopela", sub("sergioAAApelaAAA", "s/AAA//g"));

                assertEquals("sergioCCCpelaCCC", sub("sergioCCCpelaCCC", "s/c//"));

                assertEquals("sergioCCpelaCCC", sub("sergioCCCpelaCCC", "s/c//i"));

                assertEquals("sergiopela", sub("sergioCCCpelaCCC", "s/c//gi"));

                assertEquals("sergio/Z/Zpela", sub("sergioAApela", "s/AA/\\/Z\\/Z/g"));

                assertEquals("sergio\\Z\\Zpela", sub("sergioAApela", "s/AA/\\\\Z\\\\Z/g"));
        }
}