package org.tessell.tests.model.validation.rules; import static org.tessell.model.properties.NewProperty.stringProperty; import org.junit.Test; import org.tessell.model.properties.StringProperty; import org.tessell.model.validation.rules.Regex; public class RegexTest extends AbstractRuleTest { @Test public void urls() { assertRegex(// Regex.URL, true, null, // null is valid "http://foo.com/n/5TBGvq1BAALzjEMAAAgYQgAAabxmMQA-A/", "http://foo.com/n/5TBGvq1BAALzjEMAAAgYQgAAabxmMQA-A/?a-b=c-d", "http://foo.com/n/a?campaign=foo'bar", "http://foo.com/n", "http://foo.com/n?a=b#c/", "http://foo.com", "http://foo1.com", "http://foo-bar.com"); assertRegex(// Regex.URL, false, "http://foo", "foo.com/", "/n?a=b#c/", "http://foo.com/ n.html", "http://foo.com/q?a\"b"); } @Test public void urlsNoProtocol() { assertRegex(// Regex.URL_NO_PROTOCOL, true, null, // null is valid "foo.com/n/5TBGvq1BAALzjEMAAAgYQgAAabxmMQA-A/", "foo.com/n", "foo.com/n?a=b#c", "foo.com", "foo-bar.com"); assertRegex(// Regex.URL_NO_PROTOCOL, false, "foo", "/n?a=b#c/", "foo.com/ n.html", "foo.com/\"n.html"); } @Test public void domains() { assertRegex(// Regex.DOMAIN, true, null, // null is valid "f.co", "foo1.com", "foo-bar.com", "foo-bar.com.com"); assertRegex(// Regex.DOMAIN, false, "foo", "f.c", "http://foo.com", "foo.com/", "foo.com/asdf.html", "/n?a=b#c/", "foo bar.com"); } private void assertRegex(String regex, boolean valid, String... urls) { final StringProperty url = stringProperty("url"); Regex r = new Regex("invalid", regex); url.addRule(r); listenTo(r); for (String u : urls) { url.set(u); if (valid) { assertNoMessages(); } else { assertMessages("invalid"); } } } }