/** * Copyright (C) 2010-2017 Gordon Fraser, Andrea Arcuri and EvoSuite * contributors * * This file is part of EvoSuite. * * EvoSuite is free software: you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation, either version 3.0 of the License, or * (at your option) any later version. * * EvoSuite is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with EvoSuite. If not, see <http://www.gnu.org/licenses/>. */ package org.evosuite; import static org.junit.Assert.*; import org.evosuite.instrumentation.RegexDistance; import org.junit.Ignore; import org.junit.Test; public class TestRegexInstantiation { @Test public void testFailingSeedingRegex() { String FAILING_PATTERN = "^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; String matchingInstance = RegexDistance.getRegexInstance(FAILING_PATTERN); String nonMatchingInstance = RegexDistance.getNonMatchingRegexInstance(FAILING_PATTERN); assertTrue("String does not match regex: "+matchingInstance, matchingInstance.matches(FAILING_PATTERN)); assertFalse("String matches regex but shouldn't: "+nonMatchingInstance, nonMatchingInstance.matches(FAILING_PATTERN)); assertTrue(RegexDistance.getDistance(matchingInstance, FAILING_PATTERN) == 0); assertTrue(RegexDistance.getDistance(nonMatchingInstance, FAILING_PATTERN) > 0); } @Test public void testEmailRegex() { String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; String matchingInstance = RegexDistance.getRegexInstance(EMAIL_PATTERN); String nonMatchingInstance = RegexDistance.getNonMatchingRegexInstance(EMAIL_PATTERN); assertTrue("String does not match regex: "+matchingInstance, matchingInstance.matches(EMAIL_PATTERN)); assertFalse("String matches regex but shouldn't: "+nonMatchingInstance, nonMatchingInstance.matches(EMAIL_PATTERN)); assertTrue(RegexDistance.getDistance(matchingInstance, EMAIL_PATTERN) == 0); assertTrue(RegexDistance.getDistance(nonMatchingInstance, EMAIL_PATTERN) > 0); } @Test public void testUsernameRegex() { String USERNAME_PATTERN = "^[a-z0-9_-]{3,15}$"; String matchingInstance = RegexDistance.getRegexInstance(USERNAME_PATTERN); String nonMatchingInstance = RegexDistance.getNonMatchingRegexInstance(USERNAME_PATTERN); assertTrue("String does not match regex: "+matchingInstance, matchingInstance.matches(USERNAME_PATTERN)); assertFalse("String matches regex but shouldn't: "+nonMatchingInstance, nonMatchingInstance.matches(USERNAME_PATTERN)); assertTrue(RegexDistance.getDistance(matchingInstance, USERNAME_PATTERN) == 0); assertTrue(RegexDistance.getDistance(nonMatchingInstance, USERNAME_PATTERN) > 0); } @Ignore @Test // dk.brics.automaton runs out of memory on this one, need to investigate why public void testPasswordRegex() { String PASSWORD_PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{6,20})"; String matchingInstance = RegexDistance.getRegexInstance(PASSWORD_PATTERN); String nonMatchingInstance = RegexDistance.getNonMatchingRegexInstance(PASSWORD_PATTERN); assertTrue("String does not match regex: "+matchingInstance, matchingInstance.matches(PASSWORD_PATTERN)); assertFalse("String matches regex but shouldn't: "+nonMatchingInstance, nonMatchingInstance.matches(PASSWORD_PATTERN)); assertTrue(RegexDistance.getDistance(matchingInstance, PASSWORD_PATTERN) == 0); assertTrue(RegexDistance.getDistance(nonMatchingInstance, PASSWORD_PATTERN) > 0); } @Test public void testHexRegex() { String HEX_PATTERN = "^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$"; String matchingInstance = RegexDistance.getRegexInstance(HEX_PATTERN); String nonMatchingInstance = RegexDistance.getNonMatchingRegexInstance(HEX_PATTERN); assertTrue("String does not match regex: "+matchingInstance, matchingInstance.matches(HEX_PATTERN)); assertFalse("String matches regex but shouldn't: "+nonMatchingInstance, nonMatchingInstance.matches(HEX_PATTERN)); assertTrue(RegexDistance.getDistance(matchingInstance, HEX_PATTERN) == 0); assertTrue(RegexDistance.getDistance(nonMatchingInstance, HEX_PATTERN) > 0); } @Test public void testImageRegex() { // TODO: If the whole thing is in parenthesis, then $ will not be removed String IMAGE_PATTERN = "[^\\s]+(\\.(?i)(jpg|png|gif|bmp))$"; String matchingInstance = RegexDistance.getRegexInstance(IMAGE_PATTERN); String nonMatchingInstance = RegexDistance.getNonMatchingRegexInstance(IMAGE_PATTERN); assertTrue("String does not match regex: "+matchingInstance, matchingInstance.matches(IMAGE_PATTERN)); assertFalse("String matches regex but shouldn't: "+nonMatchingInstance, nonMatchingInstance.matches(IMAGE_PATTERN)); assertTrue(RegexDistance.getDistance(matchingInstance, IMAGE_PATTERN) == 0); assertTrue(RegexDistance.getDistance(nonMatchingInstance, IMAGE_PATTERN) > 0); } @Test public void testIPRegex() { String IPADDRESS_PATTERN = "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"; String matchingInstance = RegexDistance.getRegexInstance(IPADDRESS_PATTERN); String nonMatchingInstance = RegexDistance.getNonMatchingRegexInstance(IPADDRESS_PATTERN); assertTrue("String does not match regex: "+matchingInstance, matchingInstance.matches(IPADDRESS_PATTERN)); assertFalse("String matches regex but shouldn't: "+nonMatchingInstance, nonMatchingInstance.matches(IPADDRESS_PATTERN)); assertTrue(RegexDistance.getDistance(matchingInstance, IPADDRESS_PATTERN) == 0); assertTrue(RegexDistance.getDistance(nonMatchingInstance, IPADDRESS_PATTERN) > 0); } @Test public void testTime12Regex() { String TIME12HOURS_PATTERN = "(1[012]|[1-9]):[0-5][0-9](\\s)?(?i)(am|pm)"; String matchingInstance = RegexDistance.getRegexInstance(TIME12HOURS_PATTERN); String nonMatchingInstance = RegexDistance.getNonMatchingRegexInstance(TIME12HOURS_PATTERN); assertTrue("String does not match regex: "+matchingInstance, matchingInstance.matches(TIME12HOURS_PATTERN)); assertFalse("String matches regex but shouldn't: "+nonMatchingInstance, nonMatchingInstance.matches(TIME12HOURS_PATTERN)); assertTrue(RegexDistance.getDistance(matchingInstance, TIME12HOURS_PATTERN) == 0); assertTrue(RegexDistance.getDistance(nonMatchingInstance, TIME12HOURS_PATTERN) > 0); } @Test public void testTime24Regex() { String TIME24HOURS_PATTERN = "([01]?[0-9]|2[0-3]):[0-5][0-9]"; String matchingInstance = RegexDistance.getRegexInstance(TIME24HOURS_PATTERN); String nonMatchingInstance = RegexDistance.getNonMatchingRegexInstance(TIME24HOURS_PATTERN); assertTrue("String does not match regex: "+matchingInstance, matchingInstance.matches(TIME24HOURS_PATTERN)); assertFalse("String matches regex but shouldn't: "+nonMatchingInstance, nonMatchingInstance.matches(TIME24HOURS_PATTERN)); assertTrue(RegexDistance.getDistance(matchingInstance, TIME24HOURS_PATTERN) == 0); assertTrue(RegexDistance.getDistance(nonMatchingInstance, TIME24HOURS_PATTERN) > 0); } @Test public void testDateRegex() { String DATE_PATTERN = "(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\\d\\d)"; String matchingInstance = RegexDistance.getRegexInstance(DATE_PATTERN); String nonMatchingInstance = RegexDistance.getNonMatchingRegexInstance(DATE_PATTERN); assertTrue("String does not match regex: "+matchingInstance, matchingInstance.matches(DATE_PATTERN)); assertFalse("String matches regex but shouldn't: "+nonMatchingInstance, nonMatchingInstance.matches(DATE_PATTERN)); assertTrue(RegexDistance.getDistance(matchingInstance, DATE_PATTERN) == 0); assertTrue(RegexDistance.getDistance(nonMatchingInstance, DATE_PATTERN) > 0); } @Test public void testHTMLRegex() { String HTML_TAG_PATTERN = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>"; String matchingInstance = RegexDistance.getRegexInstance(HTML_TAG_PATTERN); String nonMatchingInstance = RegexDistance.getNonMatchingRegexInstance(HTML_TAG_PATTERN); assertTrue("String does not match regex: "+matchingInstance, matchingInstance.matches(HTML_TAG_PATTERN)); assertFalse("String matches regex but shouldn't: "+nonMatchingInstance, nonMatchingInstance.matches(HTML_TAG_PATTERN)); assertTrue(RegexDistance.getDistance(matchingInstance, HTML_TAG_PATTERN) == 0); assertTrue(RegexDistance.getDistance(nonMatchingInstance, HTML_TAG_PATTERN) > 0); } @Test public void testHTMLARegex() { String HTML_A_TAG_PATTERN = "(?i)<a([^>]+)>(.+?)</a>"; String matchingInstance = RegexDistance.getRegexInstance(HTML_A_TAG_PATTERN); String nonMatchingInstance = RegexDistance.getNonMatchingRegexInstance(HTML_A_TAG_PATTERN); assertTrue("String does not match regex: "+matchingInstance, matchingInstance.matches(HTML_A_TAG_PATTERN)); assertFalse("String matches regex but shouldn't: "+nonMatchingInstance, nonMatchingInstance.matches(HTML_A_TAG_PATTERN)); assertTrue(RegexDistance.getDistance(matchingInstance, HTML_A_TAG_PATTERN) == 0); assertTrue(RegexDistance.getDistance(nonMatchingInstance, HTML_A_TAG_PATTERN) > 0); } @Ignore @Test // I don't know what's happening in here public void testHTMLHrefRegex() { String HTML_A_HREF_TAG_PATTERN = "\\s*(?i)href\\s*=\\s*\".*\""; String matchingInstance = RegexDistance.getRegexInstance(HTML_A_HREF_TAG_PATTERN); String nonMatchingInstance = RegexDistance.getNonMatchingRegexInstance(HTML_A_HREF_TAG_PATTERN); assertTrue("String does not match regex: "+matchingInstance, matchingInstance.matches(HTML_A_HREF_TAG_PATTERN)); assertFalse("String matches regex but shouldn't: "+nonMatchingInstance, nonMatchingInstance.matches(HTML_A_HREF_TAG_PATTERN)); assertTrue(RegexDistance.getDistance(matchingInstance, HTML_A_HREF_TAG_PATTERN) == 0); assertTrue(RegexDistance.getDistance(nonMatchingInstance, HTML_A_HREF_TAG_PATTERN) > 0); } }