
tech.sirwellington.alchemy.generator.StringGenerators Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of alchemy-generator Show documentation
Show all versions of alchemy-generator Show documentation
Part of the Alchemy collection.
More Data means better tests.
Alchemy Generator makes it easier to test your code
by providing generators for common Objects and Data.
/*
* Copyright 2015 SirWellington Tech.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package tech.sirwellington.alchemy.generator;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import tech.sirwellington.alchemy.annotations.access.NonInstantiable;
import tech.sirwellington.alchemy.annotations.arguments.NonNull;
import tech.sirwellington.alchemy.annotations.designs.patterns.StrategyPattern;
import static tech.sirwellington.alchemy.annotations.designs.patterns.StrategyPattern.Role.CONCRETE_BEHAVIOR;
import static tech.sirwellington.alchemy.generator.AlchemyGenerator.one;
import static tech.sirwellington.alchemy.generator.BinaryGenerators.binary;
import static tech.sirwellington.alchemy.generator.Checks.checkNotNull;
import static tech.sirwellington.alchemy.generator.Checks.checkThat;
import static tech.sirwellington.alchemy.generator.NumberGenerators.integers;
/**
*
* @author SirWellington
*/
@NonInstantiable
@StrategyPattern(role = CONCRETE_BEHAVIOR)
public final class StringGenerators
{
private final static Logger LOG = LoggerFactory.getLogger(StringGenerators.class);
StringGenerators() throws IllegalAccessException
{
throw new IllegalAccessException("cannot instantiate this class");
}
/**
* Generates a random string of a random length. Characters can include ASCII, Unicode, or
* International Characters.
*
* @return
*/
public static AlchemyGenerator strings()
{
return () ->
{
int size = one(integers(5, 1000));
return RandomStringUtils.random(size);
};
}
/**
* Generates a random string of specified length. Characters are included from all sets.
*
* @param length The length of the String, must be at least 1.
*
* @return
*/
public static AlchemyGenerator strings(int length)
{
checkThat(length > 0, "Length must be at least 1");
return () -> RandomStringUtils.random(length);
}
/**
* Generates a random hexadecimal string.
*
* @param length The length of the String, must be at least 1.
*
* @return
*/
public static AlchemyGenerator hexadecimalString(int length)
{
checkThat(length > 0, "Length must be at least 1");
HexBinaryAdapter hexBinaryAdapter = new HexBinaryAdapter();
AlchemyGenerator binaryGenerator = binary(length);
return () ->
{
byte[] binary = one(binaryGenerator);
String hex = hexBinaryAdapter.marshal(binary);
return StringUtils.left(hex, length);
};
}
/**
* Generates a random alphabetic string.
*
* @param length The length of the String, must be at least 1.
*
* @throws IllegalArgumentException If {@code length < 0}
*
* @see #alphabeticString()
*/
public static AlchemyGenerator alphabeticString(int length) throws IllegalArgumentException
{
checkThat(length > 0, "length must be > 0");
return () -> RandomStringUtils.randomAlphabetic(length);
}
/**
* Generates a random alphabetic string anywhere between {@code 10 - 100} characters. Well suited for the case when
* you don't really care for the size of the string returned.
*
* @see #alphabeticString(int)
*/
public static AlchemyGenerator alphabeticString()
{
int length = one(integers(10, 100));
return alphabeticString(length);
}
/**
* Generates a random alphanumeric string anywhere between {@code 10 - 100} characters. Well suited for the case
* when you don't really care what the size of the string returned.
*
* @see #alphanumericString(int)
*/
public static AlchemyGenerator alphanumericString()
{
int length = one(integers(10, 100));
return alphabeticString(length);
}
/**
*
* @param length The length of the Generated Strings.
*
* @throws IllegalArgumentException If {@code length < 0}
*/
public static AlchemyGenerator alphanumericString(int length) throws IllegalArgumentException
{
checkThat(length > 0, "length must be > 0");
return () -> RandomStringUtils.randomAlphanumeric(length);
}
//==============================================================================================
//UUIDs
//==============================================================================================
/**
* Generates random {@linkplain UUID UUIDs}.
*/
public static AlchemyGenerator uuids = () -> UUID.randomUUID().toString();
/**
* Just returns {@link #uuids}. This exists for consistency.
*
* @return
*/
public static AlchemyGenerator uuids()
{
return uuids;
}
//==============================================================================================
//From Fixed targets
//==============================================================================================
/**
* Generates a string value from the specified set.
*
* @param values
*
* @return
*/
public static AlchemyGenerator stringsFromFixedList(List values)
{
checkNotNull(values);
checkThat(!values.isEmpty(), "No values specified");
return () ->
{
int index = integers(0, values.size()).get();
return values.get(index);
};
}
/**
* Generates a string value from the specified set.
*
* @param values
*
* @return
*/
public static AlchemyGenerator stringsFromFixedList(String... values)
{
checkNotNull(values);
checkThat(values.length != 0, "No values specified");
return stringsFromFixedList(Arrays.asList(values));
}
/**
* Takes an existing {@linkplain AlchemyGenerator Generator} and transforms its values to a
* String using the {@link Object#toString() } method.
*
* @param
* @param generator The backing Alchemy Generator.
*
* @return
*
* @throws IllegalArgumentException If the Generator is null.
*/
public static AlchemyGenerator asString(@NonNull AlchemyGenerator generator) throws IllegalArgumentException
{
checkNotNull(generator, "generator missing");
return () ->
{
T value = generator.get();
return value != null ? value.toString() : "";
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy