From 7f15d46d00e6c2fb7c15b79a06b2da8505e46be9 Mon Sep 17 00:00:00 2001 From: Michael Olayemi Date: Mon, 8 May 2023 03:38:08 +0000 Subject: [PATCH 1/2] Uploading File using Selenium WebDriver in Java (#13947) * Uploading File using Selenium WebDriver in Java * Uploading File using Selenium WebDriver in Java * Uploading File using Selenium WebDriver in Java * Uploading File using Selenium WebDriver in Java --- testing-modules/pom.xml | 1 + .../selenium-webdriver/1688web.png | Bin 0 -> 14203 bytes testing-modules/selenium-webdriver/README.md | 1 + testing-modules/selenium-webdriver/pom.xml | 59 ++++++++++++++++++ .../FileUploadWebDriverUnitTest.java | 53 ++++++++++++++++ 5 files changed, 114 insertions(+) create mode 100644 testing-modules/selenium-webdriver/1688web.png create mode 100644 testing-modules/selenium-webdriver/README.md create mode 100644 testing-modules/selenium-webdriver/pom.xml create mode 100644 testing-modules/selenium-webdriver/src/test/java/com/baeldung/selenium/webdriver/fileupload/FileUploadWebDriverUnitTest.java diff --git a/testing-modules/pom.xml b/testing-modules/pom.xml index 80e0c3bc29..8fb7a93a02 100644 --- a/testing-modules/pom.xml +++ b/testing-modules/pom.xml @@ -40,6 +40,7 @@ rest-assured rest-testing selenium-junit-testng + selenium-webdriver spring-mockito spring-testing-2 spring-testing diff --git a/testing-modules/selenium-webdriver/1688web.png b/testing-modules/selenium-webdriver/1688web.png new file mode 100644 index 0000000000000000000000000000000000000000..92ae7921fb89ac89c4ac399f07d60006bf89ad94 GIT binary patch literal 14203 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 + + 4.0.0 + selenium-webdriver + 0.0.1-SNAPSHOT + selenium-webdriver + + + com.baeldung + testing-modules + 1.0.0-SNAPSHOT + + + + + org.seleniumhq.selenium + selenium-java + ${selenium-java.version} + + + commons-logging + commons-logging + + + + + org.testng + testng + ${testng.version} + + + io.github.bonigarcia + webdrivermanager + ${webdrivermanager.version} + + + + + + + src/main/resources + true + + + src/test/resources + true + + + + + + 6.10 + 4.8.3 + 5.3.2 + + + \ No newline at end of file diff --git a/testing-modules/selenium-webdriver/src/test/java/com/baeldung/selenium/webdriver/fileupload/FileUploadWebDriverUnitTest.java b/testing-modules/selenium-webdriver/src/test/java/com/baeldung/selenium/webdriver/fileupload/FileUploadWebDriverUnitTest.java new file mode 100644 index 0000000000..18853ede56 --- /dev/null +++ b/testing-modules/selenium-webdriver/src/test/java/com/baeldung/selenium/webdriver/fileupload/FileUploadWebDriverUnitTest.java @@ -0,0 +1,53 @@ +package com.baeldung.selenium.webdriver.fileupload; + +import org.junit.Assert; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.By; + +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; + +import org.openqa.selenium.firefox.FirefoxDriver; + +import io.github.bonigarcia.wdm.WebDriverManager; + +public class FileUploadWebDriverUnitTest { + + private WebDriver driver; + + private static final String URL = "http://www.csm-testcenter.org/test?do=show&subdo=common&test=file_upload"; + private static final String INPUT_NAME = "file_upload"; + + @BeforeEach + public void setUp() { + WebDriverManager.firefoxdriver() + .setup(); + driver = new FirefoxDriver(); + } + + @AfterEach + public void tearDown() { + driver.quit(); + } + + @Test + public void givenFileUploadPage_whenInputFilePath_thenFileUploadEndsWithFilename() { + driver.get(URL); + + String filePath = System.getProperty("user.dir") + "/1688web.png"; + WebElement inputElement = driver.findElement(By.name(INPUT_NAME)); + WebElement submitButton = driver.findElement(By.name("http_submit")); + + inputElement.sendKeys(filePath); + + String actualFilePath = inputElement.getAttribute("value"); + String fileName = filePath.substring(filePath.lastIndexOf("/") + 1); + + submitButton.click(); + + Assert.assertTrue(actualFilePath.endsWith(fileName)); + } + +} \ No newline at end of file From a673cea33de8dcff0f6628b4a0b201d365fccde0 Mon Sep 17 00:00:00 2001 From: Raj Kishor <30443297+rajkishorraj@users.noreply.github.com> Date: Mon, 8 May 2023 09:33:17 +0530 Subject: [PATCH 2/2] [rajkishorraj185@gmail.com] Lombok equalsandhashcode annotation (#13717) * example code for equalsandhashcode annotation * moving codes to lombok-2 --------- Co-authored-by: raj kishor --- .../lombok/equalsandhashcode/Employee.java | 14 +++++ .../equalsandhashcode/EmployeeDelomboked.java | 57 +++++++++++++++++++ .../commonissue/Employee.java | 20 +++++++ .../commonissue/EmployeeV2.java | 17 ++++++ .../commonissue/Manager.java | 16 ++++++ .../commonissue/ManagerV2.java | 16 ++++++ .../exclude/classlevel/Employee.java | 15 +++++ .../classlevel/EmployeeDelomboked.java | 37 ++++++++++++ .../exclude/fieldlevel/Employee.java | 18 ++++++ .../fieldlevel/EmployeeDelomboked.java | 31 ++++++++++ .../include/classlevel/Employee.java | 15 +++++ .../include/fieldlevel/Employee.java | 18 ++++++ .../include/methodlevel/Employee.java | 20 +++++++ .../methodlevel/EmployeeDelomboked.java | 40 +++++++++++++ .../inheritance/Employee.java | 16 ++++++ .../inheritance/Manager.java | 20 +++++++ .../inheritance/ManagerDelomboked.java | 37 ++++++++++++ .../inheritance/ManagerV2.java | 19 +++++++ .../EqualsAndHashCodeUnitTest.java | 20 +++++++ .../EqualsAndHashCodeUnitTest.java | 34 +++++++++++ .../classlevel/EqualsAndHashCodeUnitTest.java | 17 ++++++ .../fieldLevel/EqualsAndHashCodeUnitTest.java | 18 ++++++ .../classlevel/EqualsAndHashCodeUnitTest.java | 21 +++++++ .../fieldlevel/EqualsAndHashCodeUnitTest.java | 21 +++++++ .../EqualsAndHashCodeUnitTest.java | 22 +++++++ .../EqualsAndHashCodeUnitTest.java | 29 ++++++++++ 26 files changed, 608 insertions(+) create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/Employee.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/EmployeeDelomboked.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/Employee.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/EmployeeV2.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/Manager.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/ManagerV2.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/classlevel/Employee.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/classlevel/EmployeeDelomboked.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/fieldlevel/Employee.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/fieldlevel/EmployeeDelomboked.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/classlevel/Employee.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/fieldlevel/Employee.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/methodlevel/Employee.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/methodlevel/EmployeeDelomboked.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/Employee.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/Manager.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/ManagerDelomboked.java create mode 100644 lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/ManagerV2.java create mode 100644 lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/EqualsAndHashCodeUnitTest.java create mode 100644 lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/commonissue/EqualsAndHashCodeUnitTest.java create mode 100644 lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/exclude/classlevel/EqualsAndHashCodeUnitTest.java create mode 100644 lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/exclude/fieldLevel/EqualsAndHashCodeUnitTest.java create mode 100644 lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/include/classlevel/EqualsAndHashCodeUnitTest.java create mode 100644 lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/include/fieldlevel/EqualsAndHashCodeUnitTest.java create mode 100644 lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/include/methodlevel/EqualsAndHashCodeUnitTest.java create mode 100644 lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/inheritance/EqualsAndHashCodeUnitTest.java diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/Employee.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/Employee.java new file mode 100644 index 0000000000..6f0ac60cca --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/Employee.java @@ -0,0 +1,14 @@ +package com.baeldung.lombok.equalsandhashcode; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Getter +@EqualsAndHashCode +@AllArgsConstructor +public class Employee { + private String name; + private int id; + private int age; +} diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/EmployeeDelomboked.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/EmployeeDelomboked.java new file mode 100644 index 0000000000..afae2d4c17 --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/EmployeeDelomboked.java @@ -0,0 +1,57 @@ +package com.baeldung.lombok.equalsandhashcode; + +import lombok.Getter; + +@Getter +public class EmployeeDelomboked { + + private String name; + private int id; + private int age; + + public EmployeeDelomboked() { + } + + public boolean equals(Object o) { + if (o == this) { + return true; + } else if (!(o instanceof Employee)) { + return false; + } else { + Employee other = (Employee) o; + if (!other.canEqual(this)) { + return false; + } else if (this.getId() != other.getId()) { + return false; + } else if (this.getAge() != other.getAge()) { + return false; + } else { + Object this$name = this.getName(); + Object other$name = other.getName(); + if (this$name == null) { + if (other$name == null) { + return true; + } + } else if (this$name.equals(other$name)) { + return true; + } + + return false; + } + } + } + + protected boolean canEqual(Object other) { + return other instanceof Employee; + } + + public int hashCode() { + final int PRIME = 59; + int result = 1; + result = result * PRIME + this.getId(); + result = result * PRIME + this.getAge(); + Object $name = this.getName(); + result = result * PRIME + ($name == null ? 43 : $name.hashCode()); + return result; + } +} diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/Employee.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/Employee.java new file mode 100644 index 0000000000..91090a4a8c --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/Employee.java @@ -0,0 +1,20 @@ +package com.baeldung.lombok.equalsandhashcode.commonissue; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode +@AllArgsConstructor +@NoArgsConstructor +public class Employee { + private String name; + private int id; + private int age; + private Manager manager; +} + diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/EmployeeV2.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/EmployeeV2.java new file mode 100644 index 0000000000..02bbbacaed --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/EmployeeV2.java @@ -0,0 +1,17 @@ +package com.baeldung.lombok.equalsandhashcode.commonissue; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode(exclude = "manager") +@AllArgsConstructor +public class EmployeeV2 { + private String name; + private int id; + private int age; + private ManagerV2 manager; +} diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/Manager.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/Manager.java new file mode 100644 index 0000000000..aa6221d54a --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/Manager.java @@ -0,0 +1,16 @@ +package com.baeldung.lombok.equalsandhashcode.commonissue; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode +@AllArgsConstructor +public class Manager { + private String name; + private Employee assistantManager; +} + diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/ManagerV2.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/ManagerV2.java new file mode 100644 index 0000000000..67068341f3 --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/commonissue/ManagerV2.java @@ -0,0 +1,16 @@ +package com.baeldung.lombok.equalsandhashcode.commonissue; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode +@AllArgsConstructor +public class ManagerV2 { + private String name; + private EmployeeV2 assistantManager; +} + diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/classlevel/Employee.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/classlevel/Employee.java new file mode 100644 index 0000000000..64c95d0e7b --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/classlevel/Employee.java @@ -0,0 +1,15 @@ +package com.baeldung.lombok.equalsandhashcode.exclude.classlevel; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Getter +@EqualsAndHashCode(exclude = {"id", "age"}) +@AllArgsConstructor +public class Employee { + private String name; + private int id; + private int age; +} + diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/classlevel/EmployeeDelomboked.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/classlevel/EmployeeDelomboked.java new file mode 100644 index 0000000000..edf70689e1 --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/classlevel/EmployeeDelomboked.java @@ -0,0 +1,37 @@ +package com.baeldung.lombok.equalsandhashcode.exclude.classlevel; + + +import lombok.Getter; + +@Getter +public class EmployeeDelomboked { + private String name; + private int id; + private int age; + + @Override + public boolean equals(final Object o) { + if (o == this) return true; + if (!(o instanceof Employee)) return false; + final Employee other = (Employee) o; + if (!other.canEqual((Object) this)) return false; + final Object this$name = this.getName(); + final Object other$name = other.getName(); + if (this$name == null ? other$name != null : !this$name.equals(other$name)) return false; + return true; + } + + protected boolean canEqual(final Object other) { + return other instanceof Employee; + } + + @Override + public int hashCode() { + final int PRIME = 59; + int result = 1; + final Object $name = this.getName(); + result = result * PRIME + ($name == null ? 43 : $name.hashCode()); + return result; + } +} + diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/fieldlevel/Employee.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/fieldlevel/Employee.java new file mode 100644 index 0000000000..a03d1fc43a --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/fieldlevel/Employee.java @@ -0,0 +1,18 @@ +package com.baeldung.lombok.equalsandhashcode.exclude.fieldlevel; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Getter +@EqualsAndHashCode +@AllArgsConstructor +public class Employee { + private String name; + @EqualsAndHashCode.Exclude + private int id; + @EqualsAndHashCode.Exclude + private int age; +} + + diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/fieldlevel/EmployeeDelomboked.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/fieldlevel/EmployeeDelomboked.java new file mode 100644 index 0000000000..f30ab6f709 --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/exclude/fieldlevel/EmployeeDelomboked.java @@ -0,0 +1,31 @@ +package com.baeldung.lombok.equalsandhashcode.exclude.fieldlevel; + + +import lombok.Getter; + +@Getter +public class EmployeeDelomboked { + private String name; + private int id; + private int age; + + public boolean equals(final Object o) { + if (o == this) return true; + if (!(o instanceof com.baeldung.lombok.equalsandhashcode.exclude.fieldlevel.Employee)) return false; + final com.baeldung.lombok.equalsandhashcode.exclude.fieldlevel.Employee other = (com.baeldung.lombok.equalsandhashcode.exclude.fieldlevel.Employee) o; + if (!other.canEqual((Object) this)) return false; + final Object this$name = this.getName(); + final Object other$name = other.getName(); + if (this$name == null ? other$name != null : !this$name.equals(other$name)) return false; + return true; + } + + public int hashCode() { + final int PRIME = 59; + int result = 1; + final Object $name = this.getName(); + result = result * PRIME + ($name == null ? 43 : $name.hashCode()); + return result; + } +} + diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/classlevel/Employee.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/classlevel/Employee.java new file mode 100644 index 0000000000..e353c27dfd --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/classlevel/Employee.java @@ -0,0 +1,15 @@ +package com.baeldung.lombok.equalsandhashcode.include.classlevel; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(of = {"name", "id"}) +@AllArgsConstructor +public class Employee { + private String name; + private int id; + private int age; +} + diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/fieldlevel/Employee.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/fieldlevel/Employee.java new file mode 100644 index 0000000000..c1d4ab5b0f --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/fieldlevel/Employee.java @@ -0,0 +1,18 @@ +package com.baeldung.lombok.equalsandhashcode.include.fieldlevel; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Getter +@EqualsAndHashCode(onlyExplicitlyIncluded = true) +@AllArgsConstructor +public class Employee { + @EqualsAndHashCode.Include + private String name; + @EqualsAndHashCode.Include + private int id; + private int age; +} + + diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/methodlevel/Employee.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/methodlevel/Employee.java new file mode 100644 index 0000000000..3de8cc2c69 --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/methodlevel/Employee.java @@ -0,0 +1,20 @@ +package com.baeldung.lombok.equalsandhashcode.include.methodlevel; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Getter +@EqualsAndHashCode +@AllArgsConstructor +public class Employee { + private String name; + private int id; + private int age; + + @EqualsAndHashCode.Include + public boolean hasOddId() { + return id % 2 != 0; + } +} + diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/methodlevel/EmployeeDelomboked.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/methodlevel/EmployeeDelomboked.java new file mode 100644 index 0000000000..f25b996fe1 --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/include/methodlevel/EmployeeDelomboked.java @@ -0,0 +1,40 @@ +package com.baeldung.lombok.equalsandhashcode.include.methodlevel; + +import lombok.Getter; + +@Getter +public class EmployeeDelomboked { + private String name; + private int id; + private int age; + + public boolean hasOddId() { + return id % 2 != 0; + } + + public boolean equals(final Object o) { + if (o == this) return true; + if (!(o instanceof Employee)) return false; + final Employee other = (Employee) o; + if (!other.canEqual((Object) this)) return false; + if (this.getId() != other.getId()) return false; + if (this.getAge() != other.getAge()) return false; + if (this.hasOddId() != other.hasOddId()) return false; + final Object this$name = this.getName(); + final Object other$name = other.getName(); + if (this$name == null ? other$name != null : !this$name.equals(other$name)) return false; + return true; + } + + public int hashCode() { + final int PRIME = 59; + int result = 1; + result = result * PRIME + this.getId(); + result = result * PRIME + this.getAge(); + result = result * PRIME + (this.hasOddId() ? 79 : 97); + final Object $name = this.getName(); + result = result * PRIME + ($name == null ? 43 : $name.hashCode()); + return result; + } +} + diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/Employee.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/Employee.java new file mode 100644 index 0000000000..de63755cfc --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/Employee.java @@ -0,0 +1,16 @@ +package com.baeldung.lombok.equalsandhashcode.inheritance; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode +@AllArgsConstructor +public class Employee { + private String name; + private int id; + private int age; +} diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/Manager.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/Manager.java new file mode 100644 index 0000000000..e943940c32 --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/Manager.java @@ -0,0 +1,20 @@ +package com.baeldung.lombok.equalsandhashcode.inheritance; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode(callSuper = true) +public class Manager extends Employee { + private String departmentName; + private int uid; + + public Manager(String departmentName, int uid, String name, int id, int age) { + super(name, id, age); + this.departmentName = departmentName; + this.uid = uid; + } +} diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/ManagerDelomboked.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/ManagerDelomboked.java new file mode 100644 index 0000000000..e14b4a1f10 --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/ManagerDelomboked.java @@ -0,0 +1,37 @@ +package com.baeldung.lombok.equalsandhashcode.inheritance; + +import lombok.Getter; + +@Getter +public class ManagerDelomboked extends Employee { + private String departmentName; + private int uid; + + public ManagerDelomboked(String departmentName, int uid, String name, int id, int age) { + super(name, id, age); + this.departmentName = departmentName; + this.uid = uid; + } + + public boolean equals(final Object o) { + if (o == this) return true; + if (!(o instanceof com.baeldung.lombok.equalsandhashcode.inheritance.Manager)) return false; + final com.baeldung.lombok.equalsandhashcode.inheritance.Manager other = (com.baeldung.lombok.equalsandhashcode.inheritance.Manager) o; + if (!other.canEqual((Object) this)) return false; + if (!super.equals(o)) return false; + if (this.getUid() != other.getUid()) return false; + final Object this$departmentName = this.getDepartmentName(); + final Object other$departmentName = other.getDepartmentName(); + if (this$departmentName == null ? other$departmentName != null : !this$departmentName.equals(other$departmentName)) return false; + return true; + } + + public int hashCode() { + final int PRIME = 59; + int result = super.hashCode(); + result = result * PRIME + this.getUid(); + final Object $departmentName = this.getDepartmentName(); + result = result * PRIME + ($departmentName == null ? 43 : $departmentName.hashCode()); + return result; + } +} diff --git a/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/ManagerV2.java b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/ManagerV2.java new file mode 100644 index 0000000000..b5bdfd0891 --- /dev/null +++ b/lombok-modules/lombok-2/src/main/java/com/baeldung/lombok/equalsandhashcode/inheritance/ManagerV2.java @@ -0,0 +1,19 @@ +package com.baeldung.lombok.equalsandhashcode.inheritance; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode(callSuper = false) +public class ManagerV2 extends Employee { + private String departmentName; + private int uid; + + public ManagerV2(String departmentName, int uid, String name, int id, int age) { + super(name, id, age); + this.departmentName = departmentName; + this.uid = uid; + } +} diff --git a/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/EqualsAndHashCodeUnitTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/EqualsAndHashCodeUnitTest.java new file mode 100644 index 0000000000..614e94ea59 --- /dev/null +++ b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/EqualsAndHashCodeUnitTest.java @@ -0,0 +1,20 @@ +package com.baeldung.lombok.equalsandhashcode; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +public class EqualsAndHashCodeUnitTest { + + @Test + public void whenUsingEqualsAndHashCodeOnClassLevel_thenTwoObjectsAreEqualAndHaveSameHashCodeIfAllFieldsAreSame() { + Employee employee = new Employee("Nimi", 15, 22); + Employee employeeTwo = new Employee("Nimi", 15, 22); + Employee employeeThree = new Employee("Mannat", 15, 22); + assertEquals(employee, employeeTwo); + assertNotEquals(employee, employeeThree); + assertEquals(employee.hashCode(), employeeTwo.hashCode()); + assertNotEquals(employee.hashCode(), employeeThree.hashCode()); + } +} diff --git a/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/commonissue/EqualsAndHashCodeUnitTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/commonissue/EqualsAndHashCodeUnitTest.java new file mode 100644 index 0000000000..207e4e0636 --- /dev/null +++ b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/commonissue/EqualsAndHashCodeUnitTest.java @@ -0,0 +1,34 @@ +package com.baeldung.lombok.equalsandhashcode.commonissue; + +import org.junit.Test; + +public class EqualsAndHashCodeUnitTest { + + @Test(expected = StackOverflowError.class) + public void whenUsingEqualsAndHashInObjectWithCircularDependency_thenCallingEqualsAndHasCodeWillThrowStackOverFlowError() { + Manager manager = new Manager("Mannat", null); + + Employee employee = new Employee("Nimi", 15, 22, manager); + + manager.setAssistantManager(employee); + + employee.setManager(manager); + + int hash = employee.hashCode(); + + } + + @Test + public void whenUsingEqualsAndHashInObjectAndExcludingCircularDependencyField_thenNoStackOverFlowError() { + ManagerV2 manager = new ManagerV2("Mannat", null); + + EmployeeV2 employee = new EmployeeV2("Nimi", 15, 22, manager); + + manager.setAssistantManager(employee); + + employee.setManager(manager); + + int hash = employee.hashCode(); + + } +} diff --git a/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/exclude/classlevel/EqualsAndHashCodeUnitTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/exclude/classlevel/EqualsAndHashCodeUnitTest.java new file mode 100644 index 0000000000..be086ff7df --- /dev/null +++ b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/exclude/classlevel/EqualsAndHashCodeUnitTest.java @@ -0,0 +1,17 @@ +package com.baeldung.lombok.equalsandhashcode.exclude.classlevel; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class EqualsAndHashCodeUnitTest { + + @Test + public void whenUsingEqualsAndHashCodeOnClassLevelAndExcludingFields_thenTwoObjectsAreEqualAndHaveSameHashCodeEvenIfExcludedFieldsAreNotSame() { + Employee employee = new Employee("Nimi", 15, 22); + Employee employeeTwo = new Employee("Nimi", 17, 21); + + assertEquals(employee, employeeTwo); + assertEquals(employee.hashCode(), employeeTwo.hashCode()); + } +} diff --git a/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/exclude/fieldLevel/EqualsAndHashCodeUnitTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/exclude/fieldLevel/EqualsAndHashCodeUnitTest.java new file mode 100644 index 0000000000..832b188509 --- /dev/null +++ b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/exclude/fieldLevel/EqualsAndHashCodeUnitTest.java @@ -0,0 +1,18 @@ +package com.baeldung.lombok.equalsandhashcode.exclude.fieldLevel; + +import com.baeldung.lombok.equalsandhashcode.exclude.fieldlevel.Employee; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class EqualsAndHashCodeUnitTest { + + @Test + public void whenUsingEqualsAndHashCodeWithExcludingFields_thenTwoObjectsAreEqualAndHaveSameHashCodeEvenIfExcludedFieldsAreNotSame() { + Employee employee = new Employee("Nimi", 15, 22); + Employee employeeTwo = new Employee("Nimi", 17, 21); + + assertEquals(employee, employeeTwo); + assertEquals(employee.hashCode(), employeeTwo.hashCode()); + } +} diff --git a/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/include/classlevel/EqualsAndHashCodeUnitTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/include/classlevel/EqualsAndHashCodeUnitTest.java new file mode 100644 index 0000000000..1641966fd2 --- /dev/null +++ b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/include/classlevel/EqualsAndHashCodeUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.lombok.equalsandhashcode.include.classlevel; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class EqualsAndHashCodeUnitTest { + + @Test + public void whenUsingEqualsAndHashCodeOnClassLevelAndIncludeFields_thenTwoObjectsAreEqualAndHaveSameHashCodeIfIncludedFieldsAreSame() { + Employee employee = new Employee("Nimi", 15, 22); + Employee employeeTwo = new Employee("Nimi", 15, 22); + Employee employeeThree = new Employee("Nimi", 15, 23); + + assertEquals(employee, employeeTwo); + assertEquals(employee, employeeThree); + + assertEquals(employee.hashCode(), employeeTwo.hashCode()); + assertEquals(employee.hashCode(), employeeThree.hashCode()); + } +} diff --git a/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/include/fieldlevel/EqualsAndHashCodeUnitTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/include/fieldlevel/EqualsAndHashCodeUnitTest.java new file mode 100644 index 0000000000..dcf6123d2a --- /dev/null +++ b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/include/fieldlevel/EqualsAndHashCodeUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.lombok.equalsandhashcode.include.fieldlevel; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class EqualsAndHashCodeUnitTest { + + @Test + public void whenUsingEqualsAndHashCodeOnFieldLevel_thenTwoObjectsAreEqualAndHaveSameHashCodeIfIncludedFieldsAreSame() { + Employee employee = new Employee("Nimi", 15, 22); + Employee employeeTwo = new Employee("Nimi", 15, 22); + Employee employeeThree = new Employee("Nimi", 15, 23); + + assertEquals(employee, employeeTwo); + assertEquals(employee, employeeThree); + + assertEquals(employee.hashCode(), employeeTwo.hashCode()); + assertEquals(employee.hashCode(), employeeThree.hashCode()); + } +} diff --git a/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/include/methodlevel/EqualsAndHashCodeUnitTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/include/methodlevel/EqualsAndHashCodeUnitTest.java new file mode 100644 index 0000000000..79d673b4a4 --- /dev/null +++ b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/include/methodlevel/EqualsAndHashCodeUnitTest.java @@ -0,0 +1,22 @@ +package com.baeldung.lombok.equalsandhashcode.include.methodlevel; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +public class EqualsAndHashCodeUnitTest { + + @Test + public void whenUsingEqualsAndHashCodeOnMethodLevel_thenTwoObjectsAreEqualAndHaveSameHashCodeIfMethodsReturnSameValue() { + Employee employee = new Employee("Nimi", 15, 22); + Employee employeeTwo = new Employee("Nimi", 15, 22); + Employee employeeThree = new Employee("Nimi", 15, 23); + + assertEquals(employee, employeeTwo); + assertNotEquals(employee, employeeThree); + + assertEquals(employee.hashCode(), employeeTwo.hashCode()); + assertNotEquals(employee.hashCode(), employeeThree.hashCode()); + } +} diff --git a/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/inheritance/EqualsAndHashCodeUnitTest.java b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/inheritance/EqualsAndHashCodeUnitTest.java new file mode 100644 index 0000000000..abf71fe83f --- /dev/null +++ b/lombok-modules/lombok-2/src/test/java/com/baeldung/lombok/equalsandhashcode/inheritance/EqualsAndHashCodeUnitTest.java @@ -0,0 +1,29 @@ +package com.baeldung.lombok.equalsandhashcode.inheritance; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +public class EqualsAndHashCodeUnitTest { + + @Test + public void whenUsingEqualsAndHashCodeAndCallSuperIsTrue_thenTwoObjectsAreEqualAndHaveSameHashCodeIfAllFieldsIncludingParentsFieldsAreSame() { + Manager manager = new Manager("Opto", 444, "Nimi", 15, 22); + Manager managerTwo = new Manager("Opto", 444, "Nimi", 15, 22); + Manager managerThree = new Manager("Opto", 444, "Nimi", 15, 23); + + assertEquals(manager, managerTwo); + assertNotEquals(managerTwo, managerThree); + + } + + @Test + public void whenUsingEqualsAndHashCodeAndCallSuperIsFalse_thenTwoObjectsAreEqualAndHaveSameHashCodeEvenIfAllParentsFieldsAreNotSame() { + ManagerV2 manager = new ManagerV2("Opto", 444, "Nimi", 15, 22); + ManagerV2 managerTwo = new ManagerV2("Opto", 444, "Nimi", 15, 22); + ManagerV2 managerThree = new ManagerV2("Opto", 444, "Nimi", 14, 21); + assertEquals(manager, managerTwo); + assertEquals(managerTwo, managerThree); + } +}