diff options
author | Khaled Yakdan <yakdan@code-intelligence.com> | 2021-10-15 13:32:38 +0200 |
---|---|---|
committer | Fabian Meumertzheim <fabian@meumertzhe.im> | 2021-10-19 11:07:51 +0200 |
commit | bebc491c60c0b26313ed43387411627817ef1d0c (patch) | |
tree | cf33eae9ca4ebd00475653b9be74003640da3512 /agent/src/test/java/com/code_intelligence/jazzer/autofuzz/BuilderPatternTest.java | |
parent | 8ffc98fe44236a542127395c60253e980f8970a6 (diff) | |
download | jazzer-api-bebc491c60c0b26313ed43387411627817ef1d0c.tar.gz |
Create object with nested builder class
Diffstat (limited to 'agent/src/test/java/com/code_intelligence/jazzer/autofuzz/BuilderPatternTest.java')
-rw-r--r-- | agent/src/test/java/com/code_intelligence/jazzer/autofuzz/BuilderPatternTest.java | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/agent/src/test/java/com/code_intelligence/jazzer/autofuzz/BuilderPatternTest.java b/agent/src/test/java/com/code_intelligence/jazzer/autofuzz/BuilderPatternTest.java new file mode 100644 index 00000000..2389f83e --- /dev/null +++ b/agent/src/test/java/com/code_intelligence/jazzer/autofuzz/BuilderPatternTest.java @@ -0,0 +1,103 @@ +// Copyright 2021 Code Intelligence GmbH +// +// 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 com.code_intelligence.jazzer.autofuzz; + +import static org.junit.Assert.assertEquals; + +import com.code_intelligence.jazzer.api.CannedFuzzedDataProvider; +import com.code_intelligence.jazzer.api.FuzzedDataProvider; +import java.util.Arrays; +import java.util.Objects; +import org.junit.Test; + +class Employee { + private final String firstName; + private final String lastName; + private final String jobTitle; + private final int age; + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Employee hero = (Employee) o; + return age == hero.age && Objects.equals(firstName, hero.firstName) + && Objects.equals(lastName, hero.lastName) && Objects.equals(jobTitle, hero.jobTitle); + } + + @Override + public int hashCode() { + return Objects.hash(firstName, lastName, jobTitle, age); + } + + private Employee(Builder builder) { + this.jobTitle = builder.jobTitle; + this.firstName = builder.firstName; + this.lastName = builder.lastName; + this.age = builder.age; + } + + public static class Builder { + private final String firstName; + private final String lastName; + private String jobTitle; + private int age; + + public Builder(String firstName, String lastName) { + this.firstName = firstName; + this.lastName = lastName; + } + + public Builder withAge(int age) { + this.age = age; + return this; + } + + public Builder withJobTitle(String jobTitle) { + this.jobTitle = jobTitle; + return this; + } + + public Employee build() { + return new Employee(this); + } + } +} + +public class BuilderPatternTest { + FuzzedDataProvider data = + CannedFuzzedDataProvider.create(Arrays.asList(0, // Select the first Builder + 2, // Select two Builder methods returning a builder object (fluent design) + 0, // Select the first build method + 0, // pick the first remaining builder method (withAge) + 0, // pick the first remaining builder method (withJobTitle) + 0, // pick the first build method + 6, // remaining bytes + "foo", // firstName + 6, // remaining bytes + "bar", // lastName + 20, // age + 6, // remaining bytes + "baz" // jobTitle + )); + + @Test + public void testBuilderPattern() { + assertEquals(Meta.consume(data, Employee.class), + new Employee.Builder("foo", "bar").withAge(20).withJobTitle("baz").build()); + } +} |