diff --git a/.gitignore b/.gitignore
index d3a5dae06d..78125cc3ee 100644
--- a/.gitignore
+++ b/.gitignore
@@ -85,7 +85,3 @@ transaction.log
*-shell.log
apache-cxf/cxf-aegis/baeldung.xml
-apache-fop/src/test/resources/input.xml
-apache-fop/src/test/resources/output_herold.pdf
-apache-fop/src/test/resources/output_html2fo.pdf
-apache-fop/src/test/resources/output_jtidy.pdf
\ No newline at end of file
diff --git a/aws-app-sync/pom.xml b/aws-app-sync/pom.xml
index 1f915978ab..4c55d38d77 100644
--- a/aws-app-sync/pom.xml
+++ b/aws-app-sync/pom.xml
@@ -2,19 +2,16 @@
4.0.0
-
- org.springframework.boot
- spring-boot-starter-parent
- 2.2.6.RELEASE
-
-
-
- com.baeldung
aws-app-sync
- 0.0.1-SNAPSHOT
aws-app-sync
-
Spring Boot using AWS App Sync
+
+
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../parent-boot-2
+
1.8
diff --git a/aws-app-sync/src/test/java/com/baeldung/awsappsync/AwsAppSyncApplicationTests.java b/aws-app-sync/src/test/java/com/baeldung/awsappsync/AwsAppSyncApplicationUnitTest.java
similarity index 98%
rename from aws-app-sync/src/test/java/com/baeldung/awsappsync/AwsAppSyncApplicationTests.java
rename to aws-app-sync/src/test/java/com/baeldung/awsappsync/AwsAppSyncApplicationUnitTest.java
index 2338cc29a1..8d83dd5b4b 100644
--- a/aws-app-sync/src/test/java/com/baeldung/awsappsync/AwsAppSyncApplicationTests.java
+++ b/aws-app-sync/src/test/java/com/baeldung/awsappsync/AwsAppSyncApplicationUnitTest.java
@@ -12,7 +12,7 @@ import static org.junit.jupiter.api.Assertions.*;
@SpringBootTest
@Disabled
-class AwsAppSyncApplicationTests {
+class AwsAppSyncApplicationUnitTest {
@Test
void givenGraphQuery_whenListEvents_thenReturnAllEvents() {
diff --git a/core-groovy-2/determine-datatype/pom.xml b/core-groovy-2/determine-datatype/pom.xml
deleted file mode 100644
index e03cb58ead..0000000000
--- a/core-groovy-2/determine-datatype/pom.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-
- 4.0.0
- com.baeldung.groovy
- determine-datatype
- 0.0.1-SNAPSHOT
-
- src
-
-
- maven-compiler-plugin
- 3.8.0
-
- 1.8
- 1.8
-
-
-
- org.codehaus.gmaven
- groovy-maven-plugin
-
-
- org.codehaus.groovy
- groovy-all
- 2.0.6
-
-
-
-
-
-
-
-
- org.junit
- junit5-engine
- ${junit5.version}
-
-
-
-
- 5.0.0-ALPHA
-
-
\ No newline at end of file
diff --git a/core-groovy-2/determine-datatype/src/com/baeldung/groovy/determine/datatype/Person.groovy b/core-groovy-2/determine-datatype/src/com/baeldung/groovy/determine/datatype/Person.groovy
deleted file mode 100644
index 1a89dce435..0000000000
--- a/core-groovy-2/determine-datatype/src/com/baeldung/groovy/determine/datatype/Person.groovy
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.baeldung.groovy.determine.datatype
-
-class Person {
-
- private int ageAsInt
- private Double ageAsDouble
- private String ageAsString
-
- Person() {}
- Person(int ageAsInt) { this.ageAsInt = ageAsInt}
- Person(Double ageAsDouble) { this.ageAsDouble = ageAsDouble}
- Person(String ageAsString) { this.ageAsString = ageAsString}
-}
-class Student extends Person {}
diff --git a/core-groovy-2/determine-datatype/src/com/baeldung/groovy/determine/datatype/PersonTest.groovy b/core-groovy-2/determine-datatype/src/com/baeldung/groovy/determine/datatype/PersonTest.groovy
deleted file mode 100644
index 56095a3f1b..0000000000
--- a/core-groovy-2/determine-datatype/src/com/baeldung/groovy/determine/datatype/PersonTest.groovy
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.baeldung.groovy.determine.datatype;
-
-import org.junit.Assert
-import org.junit.Test;
-
-public class PersonTest {
-
- @Test
- public void givenWhenParameterTypeIsInteger_thenReturnTrue() {
- Person personObj = new Person(10)
- Assert.assertTrue(personObj.ageAsInt instanceof Integer);
- }
-
- @Test
- public void givenWhenParameterTypeIsDouble_thenReturnTrue() {
- Person personObj = new Person(10.0)
- Assert.assertTrue((personObj.ageAsDouble).getClass() == Double)
- }
-
- @Test
- public void givenWhenParameterTypeIsString_thenReturnTrue() {
- Person personObj = new Person("10 years")
- Assert.assertTrue(personObj.ageAsString.class == String)
- }
-
- @Test
- public void givenClassName_WhenParameterIsInteger_thenReturnTrue() {
- Assert.assertTrue(Person.class.getDeclaredField('ageAsInt').type == int.class)
- }
-
- @Test
- public void givenWhenObjectIsInstanceOfType_thenReturnTrue() {
- Person personObj = new Person()
- Assert.assertTrue(personObj instanceof Person)
- }
-
- @Test
- public void givenWhenInstanceIsOfSubtype_thenReturnTrue() {
- Student studentObj = new Student()
- Assert.assertTrue(studentObj in Person)
- }
-
- @Test
- public void givenGroovyList_WhenFindClassName_thenReturnTrue() {
- def ageList = ['ageAsString','ageAsDouble', 10]
- Assert.assertTrue(ageList.class == ArrayList)
- Assert.assertTrue(ageList.getClass() == ArrayList)
- }
-
- @Test
- public void givenGrooyMap_WhenFindClassName_thenReturnTrue() {
- def ageMap = [ageAsString: '10 years', ageAsDouble: 10.0]
- Assert.assertFalse(ageMap.class == LinkedHashMap)
- }
-}
\ No newline at end of file
diff --git a/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/macaddress/GetAllMacAddressesDemo.java b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/macaddress/GetAllMacAddressesDemo.java
new file mode 100644
index 0000000000..8f07d4133e
--- /dev/null
+++ b/core-java-modules/core-java-networking-2/src/main/java/com/baeldung/macaddress/GetAllMacAddressesDemo.java
@@ -0,0 +1,23 @@
+package com.baeldung.macaddress;
+
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Enumeration;
+
+public class GetAllMacAddressesDemo {
+
+ public static void main(String[] args) throws SocketException {
+ Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces();
+ while (networkInterfaces.hasMoreElements()) {
+ NetworkInterface ni = networkInterfaces.nextElement();
+ byte[] hardwareAddress = ni.getHardwareAddress();
+ if (hardwareAddress != null) {
+ String[] hexadecimalFormat = new String[hardwareAddress.length];
+ for (int i = 0; i < hardwareAddress.length; i++) {
+ hexadecimalFormat[i] = String.format("%02X", hardwareAddress[i]);
+ }
+ System.out.println(String.join("-", hexadecimalFormat));
+ }
+ }
+ }
+}
diff --git a/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/macaddress/MacAddressUnitTest.java b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/macaddress/MacAddressUnitTest.java
new file mode 100644
index 0000000000..293e92c690
--- /dev/null
+++ b/core-java-modules/core-java-networking-2/src/test/java/com/baeldung/macaddress/MacAddressUnitTest.java
@@ -0,0 +1,21 @@
+package com.baeldung.macaddress;
+
+import org.junit.Test;
+
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.net.UnknownHostException;
+
+import static org.junit.Assert.assertEquals;
+
+public class MacAddressUnitTest {
+
+ @Test
+ public void givenNetworkInterface_whenUsingLocalHost_thenGetMacAddress() throws UnknownHostException, SocketException {
+ InetAddress localHost = InetAddress.getLocalHost();
+ NetworkInterface ni = NetworkInterface.getByInetAddress(localHost);
+ byte[] macAddress = ni.getHardwareAddress();
+ assertEquals(6, macAddress.length);
+ }
+}
diff --git a/mapstruct/pom.xml b/mapstruct/pom.xml
index 11c8d9b41e..9fe6ab6485 100644
--- a/mapstruct/pom.xml
+++ b/mapstruct/pom.xml
@@ -16,7 +16,7 @@
org.mapstruct
- mapstruct-jdk8
+ mapstruct
${org.mapstruct.version}
@@ -71,12 +71,12 @@
- 1.3.0.Final
+ 1.4.0.Beta1
4.3.4.RELEASE
1.8
1.8
1.18.4
- 3.11.1
+ 3.16.1
diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/CompanyDTO.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/CompanyDTO.java
new file mode 100644
index 0000000000..de3571e676
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/CompanyDTO.java
@@ -0,0 +1,25 @@
+package com.baeldung.mapstruct.mappingCollections.dto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CompanyDTO {
+
+ private List employees;
+
+ public List getEmployees() {
+ return employees;
+ }
+
+ public void setEmployees(List employees) {
+ this.employees = employees;
+ }
+
+ public void addEmployee(EmployeeDTO employeeDTO) {
+ if (employees == null) {
+ employees = new ArrayList<>();
+ }
+
+ employees.add(employeeDTO);
+ }
+}
diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/EmployeeDTO.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/EmployeeDTO.java
new file mode 100644
index 0000000000..04e5a1f180
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/EmployeeDTO.java
@@ -0,0 +1,23 @@
+package com.baeldung.mapstruct.mappingCollections.dto;
+
+public class EmployeeDTO {
+
+ private String firstName;
+ private String lastName;
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+}
diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/EmployeeFullNameDTO.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/EmployeeFullNameDTO.java
new file mode 100644
index 0000000000..10b97bfce4
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/dto/EmployeeFullNameDTO.java
@@ -0,0 +1,14 @@
+package com.baeldung.mapstruct.mappingCollections.dto;
+
+public class EmployeeFullNameDTO {
+
+ private String fullName;
+
+ public String getFullName() {
+ return fullName;
+ }
+
+ public void setFullName(String fullName) {
+ this.fullName = fullName;
+ }
+}
diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapper.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapper.java
new file mode 100644
index 0000000000..5310c0454e
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapper.java
@@ -0,0 +1,11 @@
+package com.baeldung.mapstruct.mappingCollections.mapper;
+
+import com.baeldung.mapstruct.mappingCollections.dto.CompanyDTO;
+import com.baeldung.mapstruct.mappingCollections.model.Company;
+import org.mapstruct.Mapper;
+
+@Mapper(uses = EmployeeMapper.class)
+public interface CompanyMapper {
+
+ CompanyDTO map(Company company);
+}
diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperAdderPreferred.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperAdderPreferred.java
new file mode 100644
index 0000000000..e5cc43074e
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperAdderPreferred.java
@@ -0,0 +1,12 @@
+package com.baeldung.mapstruct.mappingCollections.mapper;
+
+import com.baeldung.mapstruct.mappingCollections.dto.CompanyDTO;
+import com.baeldung.mapstruct.mappingCollections.model.Company;
+import org.mapstruct.CollectionMappingStrategy;
+import org.mapstruct.Mapper;
+
+@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED)
+public interface CompanyMapperAdderPreferred {
+
+ CompanyDTO map(Company company);
+}
diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeFullNameMapper.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeFullNameMapper.java
new file mode 100644
index 0000000000..44d3961f2b
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeFullNameMapper.java
@@ -0,0 +1,20 @@
+package com.baeldung.mapstruct.mappingCollections.mapper;
+
+import com.baeldung.mapstruct.mappingCollections.dto.EmployeeFullNameDTO;
+import com.baeldung.mapstruct.mappingCollections.model.Employee;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface EmployeeFullNameMapper {
+
+ List map(List employees);
+
+ default EmployeeFullNameDTO map(Employee employee) {
+ EmployeeFullNameDTO employeeInfoDTO = new EmployeeFullNameDTO();
+ employeeInfoDTO.setFullName(employee.getFirstName() + " " + employee.getLastName());
+
+ return employeeInfoDTO;
+ }
+}
diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeMapper.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeMapper.java
new file mode 100644
index 0000000000..45bf76c5a4
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeMapper.java
@@ -0,0 +1,19 @@
+package com.baeldung.mapstruct.mappingCollections.mapper;
+
+import com.baeldung.mapstruct.mappingCollections.dto.EmployeeDTO;
+import com.baeldung.mapstruct.mappingCollections.model.Employee;
+import org.mapstruct.Mapper;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+@Mapper
+public interface EmployeeMapper {
+
+ List map(List employees);
+
+ Set map(Set employees);
+
+ Map map(Map idEmployeeMap);
+}
diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/model/Company.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/model/Company.java
new file mode 100644
index 0000000000..f96e0b7aea
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/model/Company.java
@@ -0,0 +1,16 @@
+package com.baeldung.mapstruct.mappingCollections.model;
+
+import java.util.List;
+
+public class Company {
+
+ private List employees;
+
+ public List getEmployees() {
+ return employees;
+ }
+
+ public void setEmployees(List employees) {
+ this.employees = employees;
+ }
+}
diff --git a/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/model/Employee.java b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/model/Employee.java
new file mode 100644
index 0000000000..db6809d53f
--- /dev/null
+++ b/mapstruct/src/main/java/com/baeldung/mapstruct/mappingCollections/model/Employee.java
@@ -0,0 +1,28 @@
+package com.baeldung.mapstruct.mappingCollections.model;
+
+public class Employee {
+
+ private String firstName;
+ private String lastName;
+
+ public Employee(String firstName, String lastName) {
+ this.firstName = firstName;
+ this.lastName = lastName;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+}
diff --git a/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperAdderPreferredUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperAdderPreferredUnitTest.java
new file mode 100644
index 0000000000..ad0096f189
--- /dev/null
+++ b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperAdderPreferredUnitTest.java
@@ -0,0 +1,32 @@
+package com.baeldung.mapstruct.mappingCollections.mapper;
+
+import com.baeldung.mapstruct.mappingCollections.dto.CompanyDTO;
+import com.baeldung.mapstruct.mappingCollections.dto.EmployeeDTO;
+import com.baeldung.mapstruct.mappingCollections.model.Company;
+import com.baeldung.mapstruct.mappingCollections.model.Employee;
+import org.junit.jupiter.api.Test;
+import org.mapstruct.factory.Mappers;
+
+import java.util.Collections;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class CompanyMapperAdderPreferredUnitTest {
+
+ private CompanyMapperAdderPreferred companyMapper = Mappers.getMapper(CompanyMapperAdderPreferred.class);
+
+ @Test
+ void whenMappingToCompanyDTO_thenExpectCorrectMappingResult() {
+ Employee employee = new Employee("John", "Doe");
+ Company company = new Company();
+ company.setEmployees(Collections.singletonList(employee));
+
+ CompanyDTO result = companyMapper.map(company);
+
+ List employees = result.getEmployees();
+ assertThat(employees).hasSize(1);
+ assertThat(employees.get(0).getFirstName()).isEqualTo("John");
+ assertThat(employees.get(0).getLastName()).isEqualTo("Doe");
+ }
+}
\ No newline at end of file
diff --git a/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperUnitTest.java
new file mode 100644
index 0000000000..a556c88ce5
--- /dev/null
+++ b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/CompanyMapperUnitTest.java
@@ -0,0 +1,32 @@
+package com.baeldung.mapstruct.mappingCollections.mapper;
+
+import com.baeldung.mapstruct.mappingCollections.dto.CompanyDTO;
+import com.baeldung.mapstruct.mappingCollections.dto.EmployeeDTO;
+import com.baeldung.mapstruct.mappingCollections.model.Company;
+import com.baeldung.mapstruct.mappingCollections.model.Employee;
+import org.junit.jupiter.api.Test;
+import org.mapstruct.factory.Mappers;
+
+import java.util.Collections;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class CompanyMapperUnitTest {
+
+ private CompanyMapper companyMapper = Mappers.getMapper(CompanyMapper.class);
+
+ @Test
+ void whenMappingToCompanyDTO_thenExpectCorrectMappingResult() {
+ Employee employee = new Employee("John", "Doe");
+ Company company = new Company();
+ company.setEmployees(Collections.singletonList(employee));
+
+ CompanyDTO result = companyMapper.map(company);
+
+ List employees = result.getEmployees();
+ assertThat(employees).hasSize(1);
+ assertThat(employees.get(0).getFirstName()).isEqualTo("John");
+ assertThat(employees.get(0).getLastName()).isEqualTo("Doe");
+ }
+}
\ No newline at end of file
diff --git a/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeFullNameMapperUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeFullNameMapperUnitTest.java
new file mode 100644
index 0000000000..ba010a2bca
--- /dev/null
+++ b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeFullNameMapperUnitTest.java
@@ -0,0 +1,26 @@
+package com.baeldung.mapstruct.mappingCollections.mapper;
+
+import com.baeldung.mapstruct.mappingCollections.dto.EmployeeFullNameDTO;
+import com.baeldung.mapstruct.mappingCollections.model.Employee;
+import org.junit.jupiter.api.Test;
+import org.mapstruct.factory.Mappers;
+
+import java.util.Collections;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class EmployeeFullNameMapperUnitTest {
+
+ private EmployeeFullNameMapper employeeMapper = Mappers.getMapper(EmployeeFullNameMapper.class);
+
+ @Test
+ void whenMappingToEmployeeFullNameDTOList_thenExpectCorrectMappingResult() {
+ Employee employee = new Employee("John", "Doe");
+
+ List result = employeeMapper.map(Collections.singletonList(employee));
+
+ assertThat(result).hasSize(1);
+ assertThat(result.get(0).getFullName()).isEqualTo("John Doe");
+ }
+}
\ No newline at end of file
diff --git a/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeMapperUnitTest.java b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeMapperUnitTest.java
new file mode 100644
index 0000000000..dfb58252dc
--- /dev/null
+++ b/mapstruct/src/test/java/com/baeldung/mapstruct/mappingCollections/mapper/EmployeeMapperUnitTest.java
@@ -0,0 +1,51 @@
+package com.baeldung.mapstruct.mappingCollections.mapper;
+
+import com.baeldung.mapstruct.mappingCollections.dto.EmployeeDTO;
+import com.baeldung.mapstruct.mappingCollections.model.Employee;
+import org.junit.jupiter.api.Test;
+import org.mapstruct.factory.Mappers;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class EmployeeMapperUnitTest {
+
+ private EmployeeMapper employeeMapper = Mappers.getMapper(EmployeeMapper.class);
+
+ @Test
+ void whenMappingToEmployeeDTOList_thenExpectCorrectMappingResult() {
+ Employee employee = new Employee("John", "Doe");
+
+ List result = employeeMapper.map(Collections.singletonList(employee));
+
+ assertThat(result).hasSize(1);
+ assertThat(result.get(0).getFirstName()).isEqualTo("John");
+ assertThat(result.get(0).getLastName()).isEqualTo("Doe");
+ }
+
+ @Test
+ void whenMappingToEmployeeDTOSet_thenExpectCorrectMappingResult() {
+ Employee employee = new Employee("John", "Doe");
+
+ Set result = employeeMapper.map(Collections.singleton(employee));
+
+ assertThat(result).hasSize(1);
+ assertThat(result.iterator().next().getFirstName()).isEqualTo("John");
+ assertThat(result.iterator().next().getLastName()).isEqualTo("Doe");
+ }
+
+ @Test
+ void whenMappingToEmployeeDTOMap_thenExpectCorrectMappingResult() {
+ Employee employee = new Employee("John", "Doe");
+
+ Map result = employeeMapper.map(Collections.singletonMap("1", employee));
+
+ assertThat(result).hasSize(1);
+ assertThat(result.get("1").getFirstName()).isEqualTo("John");
+ assertThat(result.get("1").getLastName()).isEqualTo("Doe");
+ }
+}
\ No newline at end of file
diff --git a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/IObservable.kt b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/IObservable.kt
deleted file mode 100644
index e896d55cf2..0000000000
--- a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/IObservable.kt
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.baeldung.observer
-
-import java.util.ArrayList
-
-interface IObservable {
- val observers: ArrayList
- fun add(observer: IObserver) {
- observers.add(observer)
- }
-
- fun remove(observer: IObserver) {
- observers.remove(observer)
- }
-
- fun sendUpdateEvent() {
- observers.forEach { it.update() }
- }
-}
\ No newline at end of file
diff --git a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/IObserver.kt b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/IObserver.kt
deleted file mode 100644
index e2187a9fcb..0000000000
--- a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/IObserver.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.baeldung.observer
-
-interface IObserver {
- fun update()
-}
\ No newline at end of file
diff --git a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/delegates/BaeldungNewsletter.kt b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/delegates/BaeldungNewsletter.kt
deleted file mode 100644
index 748c1064ff..0000000000
--- a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/delegates/BaeldungNewsletter.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.baeldung.observer.delegates
-
-import kotlin.properties.Delegates
-
-class BaeldungNewsletter {
- val newestArticleObservers = mutableListOf<(String) -> Unit>()
- var newestArticleUrl: String by Delegates.observable("") { _, _, newValue ->
- newestArticleObservers.forEach { it(newValue) }
- }
-}
\ No newline at end of file
diff --git a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/delegates/BaeldungReader.kt b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/delegates/BaeldungReader.kt
deleted file mode 100644
index f275648549..0000000000
--- a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/delegates/BaeldungReader.kt
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.baeldung.observer.delegates
-
-fun main() {
- val newsletter = BaeldungNewsletter()
- newsletter.newestArticleObservers.add { newestArticleUrl ->
- println("New Baeldung article: ${newestArticleUrl}")
- }
-}
\ No newline at end of file
diff --git a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/standard/BaeldungNewsletter.kt b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/standard/BaeldungNewsletter.kt
deleted file mode 100644
index 0ec4796edb..0000000000
--- a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/standard/BaeldungNewsletter.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.baeldung.observer.standard
-
-import com.baeldung.observer.IObservable
-import com.baeldung.observer.IObserver
-import java.util.ArrayList
-
-class BaeldungNewsletter : IObservable {
- override val observers: ArrayList = ArrayList()
- var newestArticleUrl = ""
- set(value) {
- field = value
- sendUpdateEvent()
- }
-}
\ No newline at end of file
diff --git a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/standard/BaeldungReader.kt b/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/standard/BaeldungReader.kt
deleted file mode 100644
index 14e686f2f8..0000000000
--- a/patterns/design-patterns-behavioral-2/src/main/java/com/baeldung/observer/standard/BaeldungReader.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.baeldung.observer.standard
-
-import com.baeldung.observer.IObserver
-
-class BaeldungReader(private var newsletter: BaeldungNewsletter) : IObserver {
- override fun update() {
- println("New Baeldung article: ${newsletter.newestArticleUrl}")
- }
-}
\ No newline at end of file
diff --git a/persistence-modules/r2dbc/pom.xml b/persistence-modules/r2dbc/pom.xml
index b1de88e9ea..d0f53ba37c 100644
--- a/persistence-modules/r2dbc/pom.xml
+++ b/persistence-modules/r2dbc/pom.xml
@@ -10,11 +10,11 @@
Sample R2DBC Project
- org.springframework.boot
- spring-boot-starter-parent
- 2.1.6.RELEASE
-
-
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../../parent-boot-2
+
diff --git a/persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationTests.java b/persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationIntegrationTest.java
similarity index 98%
rename from persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationTests.java
rename to persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationIntegrationTest.java
index 3fb9e24a8e..7c3badc976 100644
--- a/persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationTests.java
+++ b/persistence-modules/r2dbc/src/test/java/com/baeldung/examples/r2dbc/R2dbcExampleApplicationIntegrationTest.java
@@ -19,7 +19,7 @@ import reactor.core.publisher.Flux;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
-public class R2dbcExampleApplicationTests {
+public class R2dbcExampleApplicationIntegrationTest {
@Autowired
diff --git a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/factory/YamlPropertySourceFactory.java b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/factory/YamlPropertySourceFactory.java
deleted file mode 100644
index e46f7c9cba..0000000000
--- a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/factory/YamlPropertySourceFactory.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.baeldung.properties.yamlmap.factory;
-
-import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
-import org.springframework.core.env.PropertiesPropertySource;
-import org.springframework.core.env.PropertySource;
-import org.springframework.core.io.support.EncodedResource;
-import org.springframework.core.io.support.PropertySourceFactory;
-
-import java.io.IOException;
-import java.util.Properties;
-
-public class YamlPropertySourceFactory implements PropertySourceFactory {
-
- @Override
- public PropertySource> createPropertySource(String name, EncodedResource encodedResource) throws IOException {
- YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
- factory.setResources(encodedResource.getResource());
-
- Properties properties = factory.getObject();
-
- return new PropertiesPropertySource(encodedResource.getResource()
- .getFilename(), properties);
- }
-
-}
diff --git a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/pojo/ServerProperties.java b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/pojo/ServerProperties.java
index 38b44fddc7..9d54daf070 100644
--- a/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/pojo/ServerProperties.java
+++ b/spring-boot-modules/spring-boot-properties-2/src/main/java/com/baeldung/properties/yamlmap/pojo/ServerProperties.java
@@ -4,13 +4,9 @@ import java.util.List;
import java.util.Map;
import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
-import com.baeldung.properties.yamlmap.factory.YamlPropertySourceFactory;
-
@Component
-@PropertySource(value = "classpath:server.yml", factory = YamlPropertySourceFactory.class)
@ConfigurationProperties(prefix = "server")
public class ServerProperties {
diff --git a/spring-boot-modules/spring-boot-properties-2/src/main/resources/server.yml b/spring-boot-modules/spring-boot-properties-2/src/main/resources/application.yml
similarity index 100%
rename from spring-boot-modules/spring-boot-properties-2/src/main/resources/server.yml
rename to spring-boot-modules/spring-boot-properties-2/src/main/resources/application.yml
diff --git a/spring-cloud/spring-cloud-circuit-breaker/pom.xml b/spring-cloud/spring-cloud-circuit-breaker/pom.xml
index a179f3c831..ae44fa8199 100644
--- a/spring-cloud/spring-cloud-circuit-breaker/pom.xml
+++ b/spring-cloud/spring-cloud-circuit-breaker/pom.xml
@@ -16,14 +16,14 @@
- spring-snapshots
- Spring Snapshots
- https://repo.spring.io/libs-snapshot
+ spring-release
+ Spring Release
+ https://repo.spring.io/release
- true
+ false
- false
+ true
diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml
index 3a4cf6c56e..669499efb7 100644
--- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml
+++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kafka/pom.xml
@@ -8,9 +8,10 @@
Simple Spring Cloud Stream
- org.springframework.boot
- spring-boot-starter-parent
- 2.1.5.RELEASE
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../../../parent-boot-2
diff --git a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml
index 3817f2747a..bb515fcb36 100644
--- a/spring-cloud/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml
+++ b/spring-cloud/spring-cloud-stream/spring-cloud-stream-kinesis/pom.xml
@@ -7,10 +7,10 @@
spring-cloud-stream-kinesis
- org.springframework.boot
- spring-boot-starter-parent
- 2.1.8.RELEASE
-
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../../../parent-boot-2
diff --git a/structurizr/pom.xml b/structurizr/pom.xml
index f1b4355dcf..b8efba0937 100644
--- a/structurizr/pom.xml
+++ b/structurizr/pom.xml
@@ -42,7 +42,7 @@
1.8
1.8
- 1.0.0-RC5
+ 1.0.0
\ No newline at end of file
diff --git a/structurizr/src/main/java/com/baeldung/structurizr/StructurizrSimple.java b/structurizr/src/main/java/com/baeldung/structurizr/StructurizrSimple.java
index b33a1d9a77..3f52ea657f 100644
--- a/structurizr/src/main/java/com/baeldung/structurizr/StructurizrSimple.java
+++ b/structurizr/src/main/java/com/baeldung/structurizr/StructurizrSimple.java
@@ -2,6 +2,8 @@ package com.baeldung.structurizr;
import java.io.File;
import java.io.StringWriter;
+import java.util.HashSet;
+import java.util.Set;
import com.structurizr.Workspace;
import com.structurizr.analysis.ComponentFinder;
@@ -40,15 +42,31 @@ public class StructurizrSimple {
addContainers(workspace);
addComponents(workspace);
addSpringComponents(workspace);
- exportToPlantUml(workspace.getViews().getViewWithKey(SOFTWARE_SYSTEM_VIEW));
- exportToPlantUml(workspace.getViews().getViewWithKey(CONTAINER_VIEW));
- exportToPlantUml(workspace.getViews().getViewWithKey(COMPONENT_VIEW));
+ exportToPlantUml(findViewWithKey(workspace.getViews(), SOFTWARE_SYSTEM_VIEW));
+ exportToPlantUml(findViewWithKey(workspace.getViews(), CONTAINER_VIEW));
+ exportToPlantUml(findViewWithKey(workspace.getViews(), COMPONENT_VIEW));
- exportToPlantUml(workspace.getViews().getViewWithKey(JVM2_COMPONENT_VIEW));
+ exportToPlantUml(findViewWithKey(workspace.getViews(), JVM2_COMPONENT_VIEW));
addStyles(workspace.getViews());
//uploadToExternal(workspace);
}
+
+ private static View findViewWithKey(ViewSet viewSet, String key) {
+ if (key == null) {
+ throw new IllegalArgumentException("A key must be specified.");
+ }
+
+ Set views = new HashSet<>();
+ views.addAll(viewSet.getSystemLandscapeViews());
+ views.addAll(viewSet.getSystemContextViews());
+ views.addAll(viewSet.getContainerViews());
+ views.addAll(viewSet.getComponentViews());
+ views.addAll(viewSet.getDynamicViews());
+ views.addAll(viewSet.getDeploymentViews());
+
+ return views.stream().filter(v -> key.equals(v.getKey())).findFirst().orElse(null);
+ }
private static void addSpringComponents(Workspace workspace) throws Exception {
Container jvm2 = workspace.getModel().getSoftwareSystemWithName(PAYMENT_TERMINAL).getContainerWithName("JVM-2");
diff --git a/testing-modules/selenium-junit-testng/pom.xml b/testing-modules/selenium-junit-testng/pom.xml
index 3734bf72c9..8d661997f8 100644
--- a/testing-modules/selenium-junit-testng/pom.xml
+++ b/testing-modules/selenium-junit-testng/pom.xml
@@ -1,6 +1,7 @@
-
+
4.0.0
selenium-junit-testng
0.0.1-SNAPSHOT
@@ -40,35 +41,30 @@
hamcrest-all
${hamcrest-all.version}
+
+ ru.yandex.qatools.ashot
+ ashot
+ ${ashot.version}
+
- src
+
+
+ src/main/resources
+ true
+
+
+ src/test/resources
+ true
+
+
-
-
- live
-
-
-
- org.apache.maven.plugins
- maven-surefire-plugin
- ${maven-surefire-plugin.version}
-
-
- **/*LiveTest.java
-
-
-
-
-
-
-
-
6.10
3.4.0
+ 1.5.4
diff --git a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java
index c5ad5182ff..b32e51d250 100644
--- a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java
+++ b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java
@@ -1,14 +1,12 @@
-package main.java.com.baeldung.selenium;
-
-import main.java.com.baeldung.selenium.config.SeleniumConfig;
-import org.openqa.selenium.By;
-import org.openqa.selenium.WebDriver;
-import org.openqa.selenium.WebElement;
-import org.openqa.selenium.firefox.FirefoxDriver;
-import org.openqa.selenium.interactions.Actions;
+package com.baeldung.selenium;
import java.util.List;
-import java.util.concurrent.TimeUnit;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.interactions.Actions;
+
+import com.baeldung.selenium.config.SeleniumConfig;
public class SeleniumExample {
@@ -17,15 +15,18 @@ public class SeleniumExample {
public SeleniumExample() {
config = new SeleniumConfig();
- config.getDriver().get(url);
+ config.getDriver()
+ .get(url);
}
public void closeWindow() {
- this.config.getDriver().close();
+ this.config.getDriver()
+ .close();
}
public String getTitle() {
- return this.config.getDriver().getTitle();
+ return this.config.getDriver()
+ .getTitle();
}
public void getAboutBaeldungPage() {
@@ -35,29 +36,35 @@ public class SeleniumExample {
}
private void closeOverlay() {
- List webElementList = this.config.getDriver().findElements(By.tagName("a"));
+ List webElementList = this.config.getDriver()
+ .findElements(By.tagName("a"));
if (webElementList != null) {
webElementList.stream()
- .filter(webElement -> "Close".equalsIgnoreCase(webElement.getAttribute("title")))
- .filter(WebElement::isDisplayed)
- .findAny()
- .ifPresent(WebElement::click);
+ .filter(webElement -> "Close".equalsIgnoreCase(webElement.getAttribute("title")))
+ .filter(WebElement::isDisplayed)
+ .findAny()
+ .ifPresent(WebElement::click);
}
}
private void clickAboutLink() {
- this.config.getDriver().findElement(By.partialLinkText("About")).click();
+ Actions actions = new Actions(config.getDriver());
+ WebElement aboutElement = this.config.getDriver()
+ .findElement(By.id("menu-item-6138"));
+
+ actions.moveToElement(aboutElement).perform();
}
private void clickAboutUsLink() {
- Actions builder = new Actions(config.getDriver());
- WebElement element = this.config.getDriver().findElement(By.partialLinkText("About Baeldung."));
- builder.moveToElement(element).build().perform();
+ WebElement element = this.config.getDriver()
+ .findElement(By.partialLinkText("About Baeldung."));
+ element.click();
}
public boolean isAuthorInformationAvailable() {
return this.config.getDriver()
- .findElement(By.cssSelector("article > .row > div"))
- .isDisplayed();
+ .getPageSource()
+ .contains("Hey ! I'm Eugen");
}
+
}
diff --git a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/config/SeleniumConfig.java b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/config/SeleniumConfig.java
index c84283b76b..b1b7754648 100644
--- a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/config/SeleniumConfig.java
+++ b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/config/SeleniumConfig.java
@@ -1,17 +1,14 @@
-package main.java.com.baeldung.selenium.config;
+package com.baeldung.selenium.config;
+
+import java.io.File;
+import java.util.concurrent.TimeUnit;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
-import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
-import java.io.File;
-import java.util.concurrent.TimeUnit;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
public class SeleniumConfig {
private WebDriver driver;
@@ -19,15 +16,17 @@ public class SeleniumConfig {
public SeleniumConfig() {
Capabilities capabilities = DesiredCapabilities.firefox();
driver = new FirefoxDriver(capabilities);
- driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
+ driver.manage()
+ .timeouts()
+ .implicitlyWait(5, TimeUnit.SECONDS);
}
static {
System.setProperty("webdriver.gecko.driver", findFile("geckodriver.mac"));
}
- static private String findFile(String filename) {
- String paths[] = {"", "bin/", "target/classes"}; // if you have chromedriver somewhere else on the path, then put it here.
+ private static String findFile(String filename) {
+ String[] paths = { "", "bin/", "target/classes" }; // if you have chromedriver somewhere else on the path, then put it here.
for (String path : paths) {
if (new File(path + filename).exists())
return path + filename;
@@ -40,7 +39,8 @@ public class SeleniumConfig {
}
public void navigateTo(String url) {
- driver.navigate().to(url);
+ driver.navigate()
+ .to(url);
}
public void clickElement(WebElement element) {
diff --git a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/models/BaeldungAbout.java b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/models/BaeldungAbout.java
index 838beb5326..580cbd1f2b 100644
--- a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/models/BaeldungAbout.java
+++ b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/models/BaeldungAbout.java
@@ -1,7 +1,7 @@
-package main.java.com.baeldung.selenium.models;
+package com.baeldung.selenium.models;
-import main.java.com.baeldung.selenium.config.SeleniumConfig;
-import main.java.com.baeldung.selenium.pages.BaeldungAboutPage;
+import com.baeldung.selenium.config.SeleniumConfig;
+import com.baeldung.selenium.pages.BaeldungAboutPage;
import org.openqa.selenium.support.PageFactory;
public class BaeldungAbout {
diff --git a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungAboutPage.java b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungAboutPage.java
index d33cb76398..064462fc10 100644
--- a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungAboutPage.java
+++ b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungAboutPage.java
@@ -1,4 +1,4 @@
-package main.java.com.baeldung.selenium.pages;
+package com.baeldung.selenium.pages;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
diff --git a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungHomePage.java b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungHomePage.java
index 55a8044375..d901bf3c34 100644
--- a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungHomePage.java
+++ b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/BaeldungHomePage.java
@@ -1,6 +1,6 @@
-package main.java.com.baeldung.selenium.pages;
+package com.baeldung.selenium.pages;
-import main.java.com.baeldung.selenium.config.SeleniumConfig;
+import com.baeldung.selenium.config.SeleniumConfig;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
@@ -8,7 +8,7 @@ import org.openqa.selenium.support.PageFactory;
public class BaeldungHomePage {
private SeleniumConfig config;
- @FindBy(css=".header--menu > a")
+ @FindBy(css = ".nav--logo_mobile")
private WebElement title;
@FindBy(css = ".menu-start-here > a")
private WebElement startHere;
diff --git a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/StartHerePage.java b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/StartHerePage.java
index 4f0ee9edcd..ccc166c351 100644
--- a/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/StartHerePage.java
+++ b/testing-modules/selenium-junit-testng/src/main/java/com/baeldung/selenium/pages/StartHerePage.java
@@ -1,6 +1,6 @@
-package main.java.com.baeldung.selenium.pages;
+package com.baeldung.selenium.pages;
-import main.java.com.baeldung.selenium.config.SeleniumConfig;
+import com.baeldung.selenium.config.SeleniumConfig;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/clickusingjavascript/SeleniumJavaScriptClickTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/clickusingjavascript/SeleniumJavaScriptClickLiveTest.java
similarity index 74%
rename from testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/clickusingjavascript/SeleniumJavaScriptClickTest.java
rename to testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/clickusingjavascript/SeleniumJavaScriptClickLiveTest.java
index 6d2ab8ef1f..de519a44fc 100644
--- a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/clickusingjavascript/SeleniumJavaScriptClickTest.java
+++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/clickusingjavascript/SeleniumJavaScriptClickLiveTest.java
@@ -1,4 +1,4 @@
-package java.com.baeldung.selenium.clickusingjavascript;
+package com.baeldung.selenium.clickusingjavascript;
import org.junit.After;
import org.junit.Before;
@@ -14,16 +14,18 @@ import org.openqa.selenium.support.ui.WebDriverWait;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
-public class SeleniumJavaScriptClickTest {
+import java.io.File;
+
+public class SeleniumJavaScriptClickLiveTest {
private WebDriver driver;
private WebDriverWait wait;
@Before
public void setUp() {
- System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
+ System.setProperty("webdriver.chrome.driver", new File("src/main/resources/chromedriver.mac").getAbsolutePath());
driver = new ChromeDriver();
- wait = new WebDriverWait(driver, 5000);
+ wait = new WebDriverWait(driver, 20);
}
@After
@@ -37,19 +39,21 @@ public class SeleniumJavaScriptClickTest {
String title = driver.getTitle();
assertEquals("Baeldung | Java, Spring and Web Development tutorials", title);
- wait.until(ExpectedConditions.elementToBeClickable(By.className("menu-search")));
- WebElement searchButton = driver.findElement(By.className("menu-search"));
+ wait.until(ExpectedConditions.elementToBeClickable(By.className("nav--menu_item_anchor")));
+ WebElement searchButton = driver.findElement(By.className("nav--menu_item_anchor"));
clickElement(searchButton);
wait.until(ExpectedConditions.elementToBeClickable(By.id("search")));
WebElement searchInput = driver.findElement(By.id("search"));
searchInput.sendKeys("Selenium");
- wait.until(ExpectedConditions.elementToBeClickable(By.className("btn-search")));
- WebElement seeSearchResultsButton = driver.findElement(By.className("btn-search"));
+ wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(".btn-search")));
+ WebElement seeSearchResultsButton = driver.findElement(By.cssSelector(".btn-search"));
clickElement(seeSearchResultsButton);
- int seleniumPostsCount = driver.findElements(By.className("post")).size();
+ wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.className("post")));
+ int seleniumPostsCount = driver.findElements(By.className("post"))
+ .size();
assertTrue(seleniumPostsCount > 0);
}
diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumCookiesJUnitLiveTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/cookies/SeleniumCookiesJUnitLiveTest.java
similarity index 80%
rename from testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumCookiesJUnitLiveTest.java
rename to testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/cookies/SeleniumCookiesJUnitLiveTest.java
index 0cbbf52454..337e3b85fb 100644
--- a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumCookiesJUnitLiveTest.java
+++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/cookies/SeleniumCookiesJUnitLiveTest.java
@@ -1,4 +1,16 @@
-package test.java.com.baeldung.selenium.junit;
+package com.baeldung.selenium.cookies;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.empty;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.not;
+import static org.hamcrest.Matchers.nullValue;
+
+import java.io.File;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
@@ -9,12 +21,6 @@ import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.*;
-
public class SeleniumCookiesJUnitLiveTest {
private WebDriver driver;
@@ -22,11 +28,21 @@ public class SeleniumCookiesJUnitLiveTest {
@Before
public void setUp() {
+ System.setProperty("webdriver.gecko.driver", findFile("geckodriver.mac"));
+
Capabilities capabilities = DesiredCapabilities.firefox();
driver = new FirefoxDriver(capabilities);
navUrl = "https://baeldung.com";
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
- System.setProperty("webdriver.gecko.driver", "geckodriver.exe");
+ }
+
+ private static String findFile(String filename) {
+ String[] paths = { "", "bin/", "target/classes" }; // if you have chromedriver somewhere else on the path, then put it here.
+ for (String path : paths) {
+ if (new File(path + filename).exists())
+ return path + filename;
+ }
+ return "";
}
@After
diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumWithJUnitLiveTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumWithJUnitLiveTest.java
index b1a4149358..1b1035cc6c 100644
--- a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumWithJUnitLiveTest.java
+++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumWithJUnitLiveTest.java
@@ -1,16 +1,21 @@
-package test.java.com.baeldung.selenium.junit;
+package com.baeldung.selenium.junit;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
-import main.java.com.baeldung.selenium.SeleniumExample;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
-import static org.testng.Assert.*;
+import com.baeldung.selenium.SeleniumExample;
public class SeleniumWithJUnitLiveTest {
private static SeleniumExample seleniumExample;
- private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials";
+ private String expectedTitle = "About Baeldung | Baeldung";
@BeforeClass
public static void setUp() {
@@ -18,17 +23,17 @@ public class SeleniumWithJUnitLiveTest {
}
@AfterClass
- public static void tearDown() {
+ public static void tearDown() throws IOException {
seleniumExample.closeWindow();
}
@Test
public void whenAboutBaeldungIsLoaded_thenAboutEugenIsMentionedOnPage() {
- seleniumExample.getAboutBaeldungPage();
- String actualTitle = seleniumExample.getTitle();
- assertNotNull(actualTitle);
- assertEquals(expectedTitle, actualTitle);
- assertTrue(seleniumExample.isAuthorInformationAvailable());
+ seleniumExample.getAboutBaeldungPage();
+ String actualTitle = seleniumExample.getTitle();
+ assertNotNull(actualTitle);
+ assertEquals(expectedTitle, actualTitle);
+ assertTrue(seleniumExample.isAuthorInformationAvailable());
}
}
diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumPageObjectLiveTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/pages/SeleniumPageObjectLiveTest.java
similarity index 79%
rename from testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumPageObjectLiveTest.java
rename to testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/pages/SeleniumPageObjectLiveTest.java
index 8493122414..96772821a9 100644
--- a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumPageObjectLiveTest.java
+++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/pages/SeleniumPageObjectLiveTest.java
@@ -1,9 +1,9 @@
-package test.java.com.baeldung.selenium.junit;
+package com.baeldung.selenium.pages;
-import main.java.com.baeldung.selenium.config.SeleniumConfig;
-import main.java.com.baeldung.selenium.models.BaeldungAbout;
-import main.java.com.baeldung.selenium.pages.BaeldungHomePage;
-import main.java.com.baeldung.selenium.pages.StartHerePage;
+import com.baeldung.selenium.config.SeleniumConfig;
+import com.baeldung.selenium.models.BaeldungAbout;
+import com.baeldung.selenium.pages.BaeldungHomePage;
+import com.baeldung.selenium.pages.StartHerePage;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/screenshot/TakeScreenShotSeleniumLiveTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/screenshot/TakeScreenShotSeleniumLiveTest.java
new file mode 100644
index 0000000000..cf705bb81f
--- /dev/null
+++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/screenshot/TakeScreenShotSeleniumLiveTest.java
@@ -0,0 +1,85 @@
+package com.baeldung.selenium.screenshot;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+import javax.imageio.ImageIO;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.Capabilities;
+import org.openqa.selenium.OutputType;
+import org.openqa.selenium.TakesScreenshot;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.chrome.ChromeDriver;
+import org.openqa.selenium.remote.DesiredCapabilities;
+
+import ru.yandex.qatools.ashot.AShot;
+import ru.yandex.qatools.ashot.Screenshot;
+import ru.yandex.qatools.ashot.coordinates.WebDriverCoordsProvider;
+import ru.yandex.qatools.ashot.shooting.ShootingStrategies;
+
+public class TakeScreenShotSeleniumLiveTest {
+
+ private static ChromeDriver driver;
+
+ @BeforeClass
+ public static void setUp() {
+ System.setProperty("webdriver.chrome.driver", resolveResourcePath("chromedriver.mac"));
+
+ Capabilities capabilities = DesiredCapabilities.chrome();
+ driver = new ChromeDriver(capabilities);
+ driver.manage()
+ .timeouts()
+ .implicitlyWait(5, TimeUnit.SECONDS);
+
+ driver.get("http://www.google.com/");
+ }
+
+ @AfterClass
+ public static void tearDown() throws IOException {
+ driver.close();
+
+ System.clearProperty("webdriver.chrome.driver");
+ }
+
+ @Test
+ public void whenGoogleIsLoaded_thenCaptureScreenshot() throws IOException {
+ takeScreenshot(resolveTestResourcePath("google-home.png"));
+
+ assertTrue(new File(resolveTestResourcePath("google-home.png")).exists());
+ }
+
+ @Test
+ public void whenGoogleIsLoaded_thenCaptureLogo() throws IOException {
+ WebElement logo = driver.findElement(By.id("hplogo"));
+
+ Screenshot screenshot = new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000))
+ .coordsProvider(new WebDriverCoordsProvider())
+ .takeScreenshot(driver, logo);
+
+ ImageIO.write(screenshot.getImage(), "jpg", new File(resolveTestResourcePath("google-logo.png")));
+ assertTrue(new File(resolveTestResourcePath("google-logo.png")).exists());
+ }
+
+ public void takeScreenshot(String pathname) throws IOException {
+ File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
+ FileUtils.copyFile(src, new File(pathname));
+ }
+
+ private static String resolveResourcePath(String filename) {
+ File file = new File("src/main/resources/" + filename);
+ return file.getAbsolutePath();
+ }
+
+ private static String resolveTestResourcePath(String filename) {
+ File file = new File("src/test/resources/" + filename);
+ return file.getAbsolutePath();
+ }
+}
diff --git a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/SeleniumWithTestNGLiveTest.java b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/SeleniumWithTestNGLiveTest.java
index 94426edc6d..85fa00c0ab 100644
--- a/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/SeleniumWithTestNGLiveTest.java
+++ b/testing-modules/selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/SeleniumWithTestNGLiveTest.java
@@ -1,16 +1,19 @@
-package test.java.com.baeldung.selenium.testng;
+package com.baeldung.selenium.testng;
+
+import com.baeldung.selenium.SeleniumExample;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
-import main.java.com.baeldung.selenium.SeleniumExample;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
-import static org.testng.Assert.*;
-
public class SeleniumWithTestNGLiveTest {
private SeleniumExample seleniumExample;
- private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials";
+ private String expectedTitle = "About Baeldung | Baeldung";
@BeforeSuite
public void setUp() {