diff --git a/core/src/main/java/com/tngtech/valueprovider/ValueProvider.java b/core/src/main/java/com/tngtech/valueprovider/ValueProvider.java
index e7d3f46..7614be4 100644
--- a/core/src/main/java/com/tngtech/valueprovider/ValueProvider.java
+++ b/core/src/main/java/com/tngtech/valueprovider/ValueProvider.java
@@ -29,6 +29,7 @@
import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Lists.newArrayListWithCapacity;
import static com.google.common.collect.Sets.newHashSet;
+import static java.lang.String.format;
import static java.time.LocalDateTime.now;
import static java.time.temporal.ChronoUnit.DAYS;
import static java.time.temporal.ChronoUnit.SECONDS;
@@ -199,7 +200,7 @@ public List
* ValueProvider vp = ValueProviderFactory.createRandomValueProvider();
- * vp.url("foo"); // -> "http://foo.com"
+ * vp.url("foo"); // -> "http://fooeFg.com"
*
*
* ValueProvider vp = ValueProviderFactory.createRandomValueProvider(); - * vp.httpUrl("mydomain"); // -> "http://www.mydomain.com" + * vp.httpUrl("mydomain"); // -> "http://www.mydomainStu.com" ** * * @param domain the domain of the {@link URL}. * @return the generated URL. - * @throws MalformedURLException if {@code domain} yields an invalid {@link URL}. + * @throws IllegalArgumentException if {@code domain} yields an invalid {@link URL}. */ - public URL httpUrl(String domain) throws MalformedURLException { + public URL httpUrl(String domain) { return createUrl("http", domain); } @@ -1009,12 +1000,7 @@ public URL httpUrl(String domain) throws MalformedURLException { * @return the generated URL. */ public URL httpsUrl() { - try { - return httpsUrl(fixedDecoratedString("domain")); - } catch (MalformedURLException e) { - // won't happen. 'domain' yields valid URL. - } - return null; // won't happen. 'domain' yields valid URL. + return httpsUrl("domain"); } /** @@ -1023,24 +1009,29 @@ public URL httpsUrl() { * Example: *
* ValueProvider vp = ValueProviderFactory.createRandomValueProvider(); - * vp.httpsUrl("somedomain"); // -> "https://somedomain.co.uk" + * vp.httpsUrl("somedomain"); // -> "https://somedomainUVw.co.uk" ** * * @return the generated URL. - * @throws MalformedURLException if {@code domain} yields an invalid {@link URL}. + * @throws IllegalArgumentException if {@code domain} yields an invalid {@link URL}. */ - public URL httpsUrl(String domain) throws MalformedURLException { + public URL httpsUrl(String domain) { return createUrl("https", domain); } - private URL createUrl(String scheme, String domain) throws MalformedURLException { + private URL createUrl(String scheme, String domain) { + String decoratedDomain = fixedDecoratedString(domain); String optionalWWWPrefix = ""; if (!domain.startsWith("www")) { optionalWWWPrefix = booleanValue() ? "www." : ""; } String countrySuffix = oneOf("de", "com", "net", "co.uk"); - return new URL(String.format("%s://%s%s.%s", scheme, optionalWWWPrefix, domain, countrySuffix)); + try { + return new URL(format("%s://%s%s.%s", scheme, optionalWWWPrefix, decoratedDomain, countrySuffix)); + } catch (MalformedURLException e) { + throw new IllegalArgumentException(format("Illegal domain %s", domain)); + } } String getPrefix() { diff --git a/core/src/test/java/com/tngtech/valueprovider/ValueProviderTest.java b/core/src/test/java/com/tngtech/valueprovider/ValueProviderTest.java index 032d9b6..e45ac7b 100644 --- a/core/src/test/java/com/tngtech/valueprovider/ValueProviderTest.java +++ b/core/src/test/java/com/tngtech/valueprovider/ValueProviderTest.java @@ -5,6 +5,7 @@ import java.math.BigInteger; import java.net.Inet6Address; import java.net.InetAddress; +import java.net.URL; import java.net.UnknownHostException; import java.time.LocalDateTime; import java.util.Arrays; @@ -581,6 +582,22 @@ void ipV6Address_should_return_valid_IPv6_address() throws UnknownHostException assertThat(address).isInstanceOf(Inet6Address.class); } + @Test + void url_related_methods_should_fail_on_malformed_urls() { + ValueProvider random = withRandomValues(); + + assertFailsOnMalformedUrl(random::url); + assertFailsOnMalformedUrl(random::httpUrl); + assertFailsOnMalformedUrl(random::httpsUrl); + } + + private void assertFailsOnMalformedUrl(Function