Skip to content

Commit

Permalink
Merge branch 'release/3.2.x'
Browse files Browse the repository at this point in the history
  • Loading branch information
astrapi69 committed May 10, 2019
2 parents 1380910 + 4b0be31 commit 8b8953a
Show file tree
Hide file tree
Showing 6 changed files with 222 additions and 15 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
## Change log
----------------------

Version 3.2-SNAPSHOT
-------------

CHANGED:

- update of parent version to 5
- update of dependency randomizer-core version to 6.0.1

Version 3.1.2
-------------

Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ Than you can add the dependency to your dependencies:
<properties>
...
<!-- JOBJ-CONTRACT-VERIFIER version -->
<jobj-contract-verifier.version>3.1.2</jobj-contract-verifier.version>
<jobj-contract-verifier.version>3.2</jobj-contract-verifier.version>
...
</properties>
...
Expand Down
6 changes: 3 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@
<parent>
<groupId>de.alpharogroup</groupId>
<artifactId>mvn-java-parent</artifactId>
<version>4.8</version>
<version>5</version>
</parent>

<artifactId>jobj-contract-verifier</artifactId>
<version>3.1.2</version>
<version>3.2</version>

<name>${project.artifactId}</name>

Expand All @@ -25,7 +25,7 @@
<!-- TEST-OBJECTS version -->
<test-objects.version>5.2</test-objects.version>
<!-- RANDOMIZER-CORE version -->
<randomizer-core.version>5.8.3</randomizer-core.version>
<randomizer-core.version>6.0.1</randomizer-core.version>
</properties>

<licenses>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import java.lang.reflect.InvocationTargetException;
import java.util.Optional;
import java.util.function.Function;
import java.util.logging.Level;

import de.alpharogroup.clone.object.CloneObjectExtensions;
import de.alpharogroup.evaluate.object.api.ContractViolation;
Expand All @@ -32,13 +33,17 @@
import de.alpharogroup.random.RandomObjectFactory;
import io.github.benas.randombeans.EnhancedRandomBuilder;
import lombok.experimental.UtilityClass;
import lombok.extern.java.Log;

/**
* The class {@link EqualsHashCodeAndToStringCheck} is a combination of all checks.
*/
@UtilityClass
@Log
public final class EqualsHashCodeAndToStringCheck
{
/** The Constant value for the default max iteration. */
public static final int DEFAULT_MAX_ITERATION = 9999;

/**
* Checks all the contract conditions for the methods {@link Object#equals(Object)} and
Expand Down Expand Up @@ -294,26 +299,110 @@ public static <T> Optional<ContractViolation> equalsHashcodeAndToString(Class<T>
{
return Optional.of(ToStringContractViolation.CLASS_NULL_ARGUMENT);
}
final T first = function.apply(cls);

final T first = getRandomObject(cls, function);
final T second = getSecondRandomObject(cls, function, first);
final T third = (T)CloneObjectExtensions.cloneObject(first);
final T fourth = (T)CloneObjectExtensions.cloneObject(third);

return EqualsHashCodeAndToStringCheck.equalsHashcodeAndToString(first, second, third,
fourth);
}

private static <T> T getSecondRandomObject(Class<T> cls, Function<Class<T>, T> function,
T first) throws AssertionError
{
T second = null;
int count = 0;
boolean iterate = true;
do
{
if (second == null)
second = getRandomObject(cls, function);
count++;
try {
iterate = first.equals(second);
} catch(Exception e) {
iterate = false;
log.log(Level.INFO, e.getMessage(), e);
}
}
while (iterate && count < DEFAULT_MAX_ITERATION);
return second;
}

private static <T> T getRandomObject(Class<T> cls, Function<Class<T>, T> function)
throws AssertionError
{
return getRandomObject(cls, function, false);
}

private static <T> T getRandomObject(Class<T> cls, Function<Class<T>, T> function,
boolean withRandomizer) throws AssertionError
{
T first = null;
Optional<T> optionalRandomObject = forceNewRandomObject(cls, function, withRandomizer);
if (optionalRandomObject.isPresent())
{
first = optionalRandomObject.get();
}
else
{
throw new AssertionError("Failed to create random object.");
}
return first;
}

private static <T> Optional<T> forceNewRandomObject(Class<T> cls,
Function<Class<T>, T> function, boolean withRandomizer)
{
Optional<T> optionalRandomObject = Optional.empty();
if (withRandomizer)
{
optionalRandomObject = newRandomObjectWithRandomizer(cls, function);
if (!optionalRandomObject.isPresent())
{
second = function.apply(cls);
optionalRandomObject = newRandomObjectWithRandomBeans(cls, function);
}
else
}
else
{
optionalRandomObject = newRandomObjectWithRandomBeans(cls, function);
if (!optionalRandomObject.isPresent())
{
second = RandomObjectFactory.newRandomObject(cls);
optionalRandomObject = newRandomObjectWithRandomizer(cls, function);
}
}
while (second.equals(first));
return optionalRandomObject;
}

final T third = (T)CloneObjectExtensions.cloneObject(first);
final T fourth = (T)CloneObjectExtensions.cloneObject(third);
private static <T> Optional<T> newRandomObjectWithRandomBeans(Class<T> cls,
Function<Class<T>, T> function)
{
Optional<T> randomObject = Optional.empty();
try
{
randomObject = Optional.of(function.apply(cls));
}
catch (Exception e)
{
log.log(Level.INFO, "Failed to create random object with random beans.", e);
}
return randomObject;
}

return EqualsHashCodeAndToStringCheck.equalsHashcodeAndToString(first, second, third,
fourth);
private static <T> Optional<T> newRandomObjectWithRandomizer(Class<T> cls,
Function<Class<T>, T> function)
{
Optional<T> randomObject = Optional.empty();
try
{
randomObject = Optional.of(RandomObjectFactory.newRandomObject(cls));
}
catch (Exception e)
{
log.log(Level.INFO, "Failed to create random object with RandomObjectFactory", e);
}
return randomObject;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,28 @@

import org.testng.annotations.Test;

import de.alpharogroup.test.objects.A;
import de.alpharogroup.test.objects.AlgorithmModel;
import de.alpharogroup.test.objects.ClonableObject;
import de.alpharogroup.test.objects.Company;
import de.alpharogroup.test.objects.Customer;
import de.alpharogroup.test.objects.Employee;
import de.alpharogroup.test.objects.EmployeeList;
import de.alpharogroup.test.objects.Light;
import de.alpharogroup.test.objects.Member;
import de.alpharogroup.test.objects.NotSerializable;
import de.alpharogroup.test.objects.Permission;
import de.alpharogroup.test.objects.Person;
import de.alpharogroup.test.objects.PremiumMember;
import de.alpharogroup.test.objects.Television;
import de.alpharogroup.test.objects.annotations.classes.AnnotatedClass;
import de.alpharogroup.test.objects.annotations.classes.AnnotatedTestClass;
import de.alpharogroup.test.objects.annotations.classes.ClassExtendsAnnotatedInterface;
import de.alpharogroup.test.objects.annotations.classes.SubAnnotatedClass;
import de.alpharogroup.test.objects.auth.AccessRight;
import de.alpharogroup.test.objects.auth.Role;
import de.alpharogroup.test.objects.auth.Roles;
import de.alpharogroup.test.objects.exceptions.ExceptionEvent;

/**
* The unit test class for the class {@link ContractVerifier}
Expand All @@ -37,7 +57,28 @@ public class ContractVerifierTest
@Test
public void testOfVerify()
{
ContractVerifier.of(Person.class).verify();
ContractVerifier.of(AnnotatedClass.class).verify();
ContractVerifier.of(AnnotatedTestClass.class).verify();
ContractVerifier.of(ClassExtendsAnnotatedInterface.class).verify();
ContractVerifier.of(SubAnnotatedClass.class).verify();
ContractVerifier.of(AccessRight.class).verify();
ContractVerifier.of(Roles.class).verify();
ContractVerifier.of(Role.class).verify();
ContractVerifier.of(ExceptionEvent.class).verify();
ContractVerifier.of(AlgorithmModel.class).verify();
ContractVerifier.of(A.class).verify();
ContractVerifier.of(ClonableObject.class).verify();
ContractVerifier.of(Company.class).verify();
ContractVerifier.of(Customer.class).verify();
ContractVerifier.of(EmployeeList.class).verify();
ContractVerifier.of(Employee.class).verify();
ContractVerifier.of(Light.class).verify();
ContractVerifier.of(Member.class).verify();
ContractVerifier.of(NotSerializable.class).verify();
ContractVerifier.of(Permission.class).verify();
ContractVerifier.of(Person.class).verify();
ContractVerifier.of(PremiumMember.class).verify();
ContractVerifier.of(Television.class).verify();
ContractVerifier.of(ManifestVersion.class).withFactoryFunction(clzz -> ManifestVersion.builder().build()).verify();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package de.alpharogroup.evaluate.object.verifier;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.jar.Attributes;
import java.util.jar.Manifest;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.FieldDefaults;

/**
* Simple bean to hold information about the version of a Manifest. Can be used for JAR, EAR and WAR
* manifest files.
*/
@Getter
@Setter
@EqualsAndHashCode
@ToString
@NoArgsConstructor
@AllArgsConstructor
@Builder(toBuilder = true)
@FieldDefaults(level = AccessLevel.PRIVATE)
public class ManifestVersion implements Serializable
{

/** The serialVersionUID. */
private static final long serialVersionUID = 1L;

/** The last modified holds the {@code LocalDateTime} when the last build was. */
LocalDateTime lastModified;

/** The manifest. */
Manifest manifest;

/** The title. */
String title;

/** The version number. */
String version;

/**
* Gets the manifest attribute value from the given {@code Attributes.Name} object.
*
* @param name
* the name
* @return the manifest attribute or an empty String if the manifest attribute value is null
*/
public String getManifestAttribute(final Attributes.Name name)
{
if (getManifest() != null)
{
final Attributes attributes = getManifest().getMainAttributes();
final Object value = attributes.get(name);
if (value != null)
{
return value.toString().trim();
}
}
return "";
}

}

0 comments on commit 8b8953a

Please sign in to comment.