mirror of
https://github.com/mapstruct/mapstruct.git
synced 2025-07-12 00:00:08 +08:00
#3524 Provide tests with Lombok style super builders
This commit is contained in:
parent
2c12e75bfc
commit
e815e3cb1e
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public abstract class AbstractVehicle {
|
||||
|
||||
private final int amountOfTires;
|
||||
private final Passenger passenger;
|
||||
|
||||
protected AbstractVehicle(AbstractVehicleBuilder<?, ?> b) {
|
||||
this.amountOfTires = b.amountOfTires;
|
||||
this.passenger = b.passenger;
|
||||
}
|
||||
|
||||
public int getAmountOfTires() {
|
||||
return this.amountOfTires;
|
||||
}
|
||||
|
||||
public Passenger getPassenger() {
|
||||
return this.passenger;
|
||||
}
|
||||
|
||||
public abstract static class AbstractVehicleBuilder<C extends AbstractVehicle,
|
||||
B extends AbstractVehicleBuilder<C, B>> {
|
||||
|
||||
private int amountOfTires;
|
||||
private Passenger passenger;
|
||||
|
||||
public B amountOfTires(int amountOfTires) {
|
||||
this.amountOfTires = amountOfTires;
|
||||
return self();
|
||||
}
|
||||
|
||||
public B passenger(Passenger passenger) {
|
||||
this.passenger = passenger;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected abstract B self();
|
||||
|
||||
public abstract C build();
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public abstract class AbstractVehicleDto {
|
||||
|
||||
private final int amountOfTires;
|
||||
|
||||
public AbstractVehicleDto(int amountOfTires) {
|
||||
this.amountOfTires = amountOfTires;
|
||||
}
|
||||
|
||||
public int getAmountOfTires() {
|
||||
return amountOfTires;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public class Car extends Vehicle {
|
||||
|
||||
private final String manufacturer;
|
||||
private final Passenger passenger;
|
||||
|
||||
protected Car(CarBuilder<?, ?> b) {
|
||||
super( b );
|
||||
this.manufacturer = b.manufacturer;
|
||||
this.passenger = b.passenger;
|
||||
}
|
||||
|
||||
public static CarBuilder<?, ?> builder() {
|
||||
return new CarBuilderImpl();
|
||||
}
|
||||
|
||||
public String getManufacturer() {
|
||||
return this.manufacturer;
|
||||
}
|
||||
|
||||
public Passenger getPassenger() {
|
||||
return this.passenger;
|
||||
}
|
||||
|
||||
public abstract static class CarBuilder<C extends Car, B extends CarBuilder<C, B>> extends VehicleBuilder<C, B> {
|
||||
|
||||
private String manufacturer;
|
||||
private Passenger passenger;
|
||||
|
||||
public B manufacturer(String manufacturer) {
|
||||
this.manufacturer = manufacturer;
|
||||
return self();
|
||||
}
|
||||
|
||||
public B passenger(Passenger passenger) {
|
||||
this.passenger = passenger;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected abstract B self();
|
||||
|
||||
public abstract C build();
|
||||
}
|
||||
|
||||
private static final class CarBuilderImpl extends CarBuilder<Car, CarBuilderImpl> {
|
||||
private CarBuilderImpl() {
|
||||
}
|
||||
|
||||
protected CarBuilderImpl self() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Car build() {
|
||||
return new Car( this );
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public class CarDto extends VehicleDto {
|
||||
|
||||
private final String manufacturer;
|
||||
|
||||
public CarDto(int amountOfTires, String manufacturer, PassengerDto passenger) {
|
||||
super( amountOfTires, passenger );
|
||||
this.manufacturer = manufacturer;
|
||||
}
|
||||
|
||||
public String getManufacturer() {
|
||||
return manufacturer;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
import org.mapstruct.InheritInverseConfiguration;
|
||||
import org.mapstruct.Mapper;
|
||||
import org.mapstruct.Mapping;
|
||||
import org.mapstruct.factory.Mappers;
|
||||
|
||||
@Mapper
|
||||
public interface CarMapper {
|
||||
|
||||
CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
|
||||
|
||||
@Mapping(target = "amountOfTires", source = "tireCount")
|
||||
Car carDtoToCar(CarDto source);
|
||||
|
||||
@InheritInverseConfiguration(name = "carDtoToCar")
|
||||
CarDto carToCarDto(Car source);
|
||||
|
||||
@Mapping(target = "amountOfTires", source = "tireCount")
|
||||
ChainedAccessorsCar carDtoToChainedAccessorsCar(CarDto source);
|
||||
|
||||
@InheritInverseConfiguration(name = "carDtoToChainedAccessorsCar")
|
||||
CarDto chainedAccessorsCarToCarDto(ChainedAccessorsCar source);
|
||||
|
||||
@Mapping(target = "amountOfTires", source = "tireCount")
|
||||
InheritedAbstractCar carDtoToInheritedAbstractCar(CarDto source);
|
||||
|
||||
@InheritInverseConfiguration(name = "carDtoToInheritedAbstractCar")
|
||||
CarDto inheritedAbstractCarToCarDto(InheritedAbstractCar source);
|
||||
|
||||
@Mapping(target = "amountOfTires", source = "tireCount")
|
||||
@Mapping(target = "horsePower", constant = "140.5f")
|
||||
MuscleCar carDtoToMuscleCar(CarDto source);
|
||||
|
||||
@InheritInverseConfiguration(name = "carDtoToMuscleCar")
|
||||
CarDto muscleCarToCarDto(MuscleCar source);
|
||||
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public class ChainedAccessorsCar extends ChainedAccessorsVehicle {
|
||||
|
||||
private String manufacturer;
|
||||
|
||||
protected ChainedAccessorsCar(ChainedAccessorsCarBuilder<?, ?> b) {
|
||||
super( b );
|
||||
this.manufacturer = b.manufacturer;
|
||||
}
|
||||
|
||||
public static ChainedAccessorsCarBuilder<?, ?> builder() {
|
||||
return new ChainedAccessorsCarBuilderImpl();
|
||||
}
|
||||
|
||||
public String getManufacturer() {
|
||||
return this.manufacturer;
|
||||
}
|
||||
|
||||
public ChainedAccessorsCar setManufacturer(String manufacturer) {
|
||||
this.manufacturer = manufacturer;
|
||||
return this;
|
||||
}
|
||||
|
||||
public abstract static class ChainedAccessorsCarBuilder<C extends ChainedAccessorsCar,
|
||||
B extends ChainedAccessorsCarBuilder<C, B>> extends ChainedAccessorsVehicleBuilder<C, B> {
|
||||
|
||||
private String manufacturer;
|
||||
|
||||
public B manufacturer(String manufacturer) {
|
||||
this.manufacturer = manufacturer;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected abstract B self();
|
||||
|
||||
public abstract C build();
|
||||
}
|
||||
|
||||
private static final class ChainedAccessorsCarBuilderImpl
|
||||
extends ChainedAccessorsCarBuilder<ChainedAccessorsCar, ChainedAccessorsCarBuilderImpl> {
|
||||
private ChainedAccessorsCarBuilderImpl() {
|
||||
}
|
||||
|
||||
protected ChainedAccessorsCarBuilderImpl self() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public ChainedAccessorsCar build() {
|
||||
return new ChainedAccessorsCar( this );
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public class ChainedAccessorsVehicle {
|
||||
private int amountOfTires;
|
||||
private Passenger passenger;
|
||||
|
||||
protected ChainedAccessorsVehicle(ChainedAccessorsVehicleBuilder<?, ?> b) {
|
||||
this.amountOfTires = b.amountOfTires;
|
||||
this.passenger = b.passenger;
|
||||
}
|
||||
|
||||
public static ChainedAccessorsVehicleBuilder<?, ?> builder() {
|
||||
return new ChainedAccessorsVehicleBuilderImpl();
|
||||
}
|
||||
|
||||
public int getAmountOfTires() {
|
||||
return this.amountOfTires;
|
||||
}
|
||||
|
||||
public Passenger getPassenger() {
|
||||
return this.passenger;
|
||||
}
|
||||
|
||||
public ChainedAccessorsVehicle setAmountOfTires(int amountOfTires) {
|
||||
this.amountOfTires = amountOfTires;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ChainedAccessorsVehicle setPassenger(Passenger passenger) {
|
||||
this.passenger = passenger;
|
||||
return this;
|
||||
}
|
||||
|
||||
public abstract static class ChainedAccessorsVehicleBuilder<C extends ChainedAccessorsVehicle,
|
||||
B extends ChainedAccessorsVehicleBuilder<C, B>> {
|
||||
private int amountOfTires;
|
||||
private Passenger passenger;
|
||||
|
||||
public B amountOfTires(int amountOfTires) {
|
||||
this.amountOfTires = amountOfTires;
|
||||
return self();
|
||||
}
|
||||
|
||||
public B passenger(Passenger passenger) {
|
||||
this.passenger = passenger;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected abstract B self();
|
||||
|
||||
public abstract C build();
|
||||
}
|
||||
|
||||
private static final class ChainedAccessorsVehicleBuilderImpl
|
||||
extends ChainedAccessorsVehicleBuilder<ChainedAccessorsVehicle, ChainedAccessorsVehicleBuilderImpl> {
|
||||
private ChainedAccessorsVehicleBuilderImpl() {
|
||||
}
|
||||
|
||||
protected ChainedAccessorsVehicleBuilderImpl self() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public ChainedAccessorsVehicle build() {
|
||||
return new ChainedAccessorsVehicle( this );
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public class InheritedAbstractCar extends AbstractVehicle {
|
||||
|
||||
private final String manufacturer;
|
||||
|
||||
protected InheritedAbstractCar(InheritedAbstractCarBuilder<?, ?> b) {
|
||||
super( b );
|
||||
this.manufacturer = b.manufacturer;
|
||||
}
|
||||
|
||||
public static InheritedAbstractCarBuilder<?, ?> builder() {
|
||||
return new InheritedAbstractCarBuilderImpl();
|
||||
}
|
||||
|
||||
public String getManufacturer() {
|
||||
return this.manufacturer;
|
||||
}
|
||||
|
||||
public abstract static class InheritedAbstractCarBuilder<C extends InheritedAbstractCar,
|
||||
B extends InheritedAbstractCarBuilder<C, B>>
|
||||
|
||||
extends AbstractVehicleBuilder<C, B> {
|
||||
private String manufacturer;
|
||||
|
||||
public B manufacturer(String manufacturer) {
|
||||
this.manufacturer = manufacturer;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected abstract B self();
|
||||
|
||||
public abstract C build();
|
||||
}
|
||||
|
||||
private static final class InheritedAbstractCarBuilderImpl
|
||||
extends InheritedAbstractCarBuilder<InheritedAbstractCar, InheritedAbstractCarBuilderImpl> {
|
||||
private InheritedAbstractCarBuilderImpl() {
|
||||
}
|
||||
|
||||
protected InheritedAbstractCarBuilderImpl self() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public InheritedAbstractCar build() {
|
||||
return new InheritedAbstractCar( this );
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public class InheritedAbstractCarDto extends AbstractVehicleDto {
|
||||
|
||||
private final String manufacturer;
|
||||
|
||||
public InheritedAbstractCarDto(int amountOfTires, String manufacturer) {
|
||||
super( amountOfTires );
|
||||
this.manufacturer = manufacturer;
|
||||
}
|
||||
|
||||
public String getManufacturer() {
|
||||
return manufacturer;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public class MuscleCar extends Car {
|
||||
|
||||
private final float horsePower;
|
||||
|
||||
protected MuscleCar(MuscleCarBuilder<?, ?> b) {
|
||||
super( b );
|
||||
this.horsePower = b.horsePower;
|
||||
}
|
||||
|
||||
public static MuscleCarBuilder<?, ?> builder() {
|
||||
return new MuscleCarBuilderImpl();
|
||||
}
|
||||
|
||||
public float getHorsePower() {
|
||||
return this.horsePower;
|
||||
}
|
||||
|
||||
public abstract static class MuscleCarBuilder<C extends MuscleCar, B extends MuscleCarBuilder<C, B>>
|
||||
extends CarBuilder<C, B> {
|
||||
|
||||
private float horsePower;
|
||||
|
||||
public B horsePower(float horsePower) {
|
||||
this.horsePower = horsePower;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected abstract B self();
|
||||
|
||||
public abstract C build();
|
||||
}
|
||||
|
||||
private static final class MuscleCarBuilderImpl extends MuscleCarBuilder<MuscleCar, MuscleCarBuilderImpl> {
|
||||
private MuscleCarBuilderImpl() {
|
||||
}
|
||||
|
||||
protected MuscleCarBuilderImpl self() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public MuscleCar build() {
|
||||
return new MuscleCar( this );
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public class MuscleCarDto extends CarDto {
|
||||
|
||||
private final float horsePower;
|
||||
|
||||
public MuscleCarDto(int amountOfTires, String manufacturer, PassengerDto passenger, float horsePower) {
|
||||
super( amountOfTires, manufacturer, passenger );
|
||||
this.horsePower = horsePower;
|
||||
}
|
||||
|
||||
public float getHorsePower() {
|
||||
return horsePower;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public class Passenger {
|
||||
|
||||
private final String name;
|
||||
|
||||
protected Passenger(PassengerBuilder<?, ?> b) {
|
||||
this.name = b.name;
|
||||
}
|
||||
|
||||
public static PassengerBuilder<?, ?> builder() {
|
||||
return new PassengerBuilderImpl();
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public abstract static class PassengerBuilder<C extends Passenger, B extends PassengerBuilder<C, B>> {
|
||||
|
||||
private String name;
|
||||
|
||||
public B name(String name) {
|
||||
this.name = name;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected abstract B self();
|
||||
|
||||
public abstract C build();
|
||||
}
|
||||
|
||||
private static final class PassengerBuilderImpl extends PassengerBuilder<Passenger, PassengerBuilderImpl> {
|
||||
private PassengerBuilderImpl() {
|
||||
}
|
||||
|
||||
protected PassengerBuilderImpl self() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Passenger build() {
|
||||
return new Passenger( this );
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public class PassengerDto {
|
||||
|
||||
private final String name;
|
||||
|
||||
public PassengerDto(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,160 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
import org.mapstruct.ap.testutil.IssueKey;
|
||||
import org.mapstruct.ap.testutil.ProcessorTest;
|
||||
import org.mapstruct.ap.testutil.WithClasses;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests the mapping of models annotated with @SuperBuilder as source and target.
|
||||
*
|
||||
* @author Oliver Erhart
|
||||
*/
|
||||
@WithClasses({
|
||||
AbstractVehicleDto.class,
|
||||
CarDto.class,
|
||||
InheritedAbstractCarDto.class,
|
||||
MuscleCarDto.class,
|
||||
PassengerDto.class,
|
||||
VehicleDto.class,
|
||||
AbstractVehicle.class,
|
||||
Car.class,
|
||||
ChainedAccessorsCar.class,
|
||||
ChainedAccessorsVehicle.class,
|
||||
InheritedAbstractCar.class,
|
||||
MuscleCar.class,
|
||||
Passenger.class,
|
||||
Vehicle.class,
|
||||
CarMapper.class
|
||||
})
|
||||
@IssueKey("3524")
|
||||
public class SuperBuilderTest {
|
||||
|
||||
@ProcessorTest
|
||||
public void simpleMapping() {
|
||||
|
||||
PassengerDto passenger = new PassengerDto( "Tom" );
|
||||
CarDto carDto = new CarDto( 4, "BMW", passenger );
|
||||
|
||||
Car car = CarMapper.INSTANCE.carDtoToCar( carDto );
|
||||
|
||||
assertThat( car.getManufacturer() ).isEqualTo( "BMW" );
|
||||
assertThat( car.getAmountOfTires() ).isEqualTo( 4 );
|
||||
assertThat( car.getPassenger().getName() ).isEqualTo( "Tom" );
|
||||
}
|
||||
|
||||
@ProcessorTest
|
||||
public void simpleMappingInverse() {
|
||||
|
||||
Passenger passenger = Passenger.builder().name( "Tom" ).build();
|
||||
Car car = Car.builder()
|
||||
.manufacturer( "BMW" )
|
||||
.amountOfTires( 4 )
|
||||
.passenger( passenger )
|
||||
.build();
|
||||
|
||||
CarDto carDto = CarMapper.INSTANCE.carToCarDto( car );
|
||||
|
||||
assertThat( carDto.getManufacturer() ).isEqualTo( "BMW" );
|
||||
assertThat( carDto.getTireCount() ).isEqualTo( 4 );
|
||||
assertThat( carDto.getPassenger().getName() ).isEqualTo( "Tom" );
|
||||
}
|
||||
|
||||
@ProcessorTest
|
||||
public void chainedMapping() {
|
||||
|
||||
PassengerDto passenger = new PassengerDto( "Tom" );
|
||||
CarDto carDto = new CarDto( 4, "BMW", passenger );
|
||||
|
||||
ChainedAccessorsCar car = CarMapper.INSTANCE.carDtoToChainedAccessorsCar( carDto );
|
||||
|
||||
assertThat( car.getManufacturer() ).isEqualTo( "BMW" );
|
||||
assertThat( car.getAmountOfTires() ).isEqualTo( 4 );
|
||||
assertThat( car.getPassenger().getName() ).isEqualTo( "Tom" );
|
||||
}
|
||||
|
||||
@ProcessorTest
|
||||
public void chainedMappingInverse() {
|
||||
|
||||
Passenger passenger = Passenger.builder().name( "Tom" ).build();
|
||||
ChainedAccessorsCar chainedAccessorsCar = ChainedAccessorsCar.builder()
|
||||
.manufacturer( "BMW" )
|
||||
.amountOfTires( 4 )
|
||||
.passenger( passenger )
|
||||
.build();
|
||||
|
||||
CarDto carDto = CarMapper.INSTANCE.chainedAccessorsCarToCarDto( chainedAccessorsCar );
|
||||
|
||||
assertThat( carDto.getManufacturer() ).isEqualTo( "BMW" );
|
||||
assertThat( carDto.getTireCount() ).isEqualTo( 4 );
|
||||
assertThat( carDto.getPassenger().getName() ).isEqualTo( "Tom" );
|
||||
}
|
||||
|
||||
@ProcessorTest
|
||||
public void inheritedAbstractMapping() {
|
||||
|
||||
PassengerDto passenger = new PassengerDto( "Tom" );
|
||||
CarDto carDto = new CarDto( 4, "BMW", passenger );
|
||||
|
||||
InheritedAbstractCar car = CarMapper.INSTANCE.carDtoToInheritedAbstractCar( carDto );
|
||||
|
||||
assertThat( car.getManufacturer() ).isEqualTo( "BMW" );
|
||||
assertThat( car.getAmountOfTires() ).isEqualTo( 4 );
|
||||
assertThat( car.getPassenger().getName() ).isEqualTo( "Tom" );
|
||||
}
|
||||
|
||||
@ProcessorTest
|
||||
public void inheritedAbstractMappingInverse() {
|
||||
|
||||
Passenger passenger = Passenger.builder().name( "Tom" ).build();
|
||||
InheritedAbstractCar inheritedAbstractCar = InheritedAbstractCar.builder()
|
||||
.manufacturer( "BMW" )
|
||||
.amountOfTires( 4 )
|
||||
.passenger( passenger )
|
||||
.build();
|
||||
|
||||
CarDto carDto = CarMapper.INSTANCE.inheritedAbstractCarToCarDto( inheritedAbstractCar );
|
||||
|
||||
assertThat( carDto.getManufacturer() ).isEqualTo( "BMW" );
|
||||
assertThat( carDto.getTireCount() ).isEqualTo( 4 );
|
||||
assertThat( carDto.getPassenger().getName() ).isEqualTo( "Tom" );
|
||||
}
|
||||
|
||||
@ProcessorTest
|
||||
public void secondLevelMapping() {
|
||||
|
||||
PassengerDto passenger = new PassengerDto( "Tom" );
|
||||
CarDto carDto = new CarDto( 4, "BMW", passenger );
|
||||
|
||||
MuscleCar car = CarMapper.INSTANCE.carDtoToMuscleCar( carDto );
|
||||
|
||||
assertThat( car.getManufacturer() ).isEqualTo( "BMW" );
|
||||
assertThat( car.getAmountOfTires() ).isEqualTo( 4 );
|
||||
assertThat( car.getHorsePower() ).isEqualTo( 140.5f );
|
||||
assertThat( car.getPassenger().getName() ).isEqualTo( "Tom" );
|
||||
}
|
||||
|
||||
@ProcessorTest
|
||||
public void secondLevelMappingInverse() {
|
||||
|
||||
Passenger passenger = Passenger.builder().name( "Tom" ).build();
|
||||
MuscleCar muscleCar = MuscleCar.builder()
|
||||
.manufacturer( "BMW" )
|
||||
.amountOfTires( 4 )
|
||||
.passenger( passenger )
|
||||
.build();
|
||||
|
||||
CarDto carDto = CarMapper.INSTANCE.muscleCarToCarDto( muscleCar );
|
||||
|
||||
assertThat( carDto.getManufacturer() ).isEqualTo( "BMW" );
|
||||
assertThat( carDto.getTireCount() ).isEqualTo( 4 );
|
||||
assertThat( carDto.getPassenger().getName() ).isEqualTo( "Tom" );
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public class Vehicle {
|
||||
|
||||
private final int amountOfTires;
|
||||
|
||||
protected Vehicle(VehicleBuilder<?, ?> b) {
|
||||
this.amountOfTires = b.amountOfTires;
|
||||
}
|
||||
|
||||
public static VehicleBuilder<?, ?> builder() {
|
||||
return new VehicleBuilderImpl();
|
||||
}
|
||||
|
||||
public int getAmountOfTires() {
|
||||
return this.amountOfTires;
|
||||
}
|
||||
|
||||
public abstract static class VehicleBuilder<C extends Vehicle, B extends VehicleBuilder<C, B>> {
|
||||
|
||||
private int amountOfTires;
|
||||
|
||||
public B amountOfTires(int amountOfTires) {
|
||||
this.amountOfTires = amountOfTires;
|
||||
return self();
|
||||
}
|
||||
|
||||
protected abstract B self();
|
||||
|
||||
public abstract C build();
|
||||
}
|
||||
|
||||
private static final class VehicleBuilderImpl extends VehicleBuilder<Vehicle, VehicleBuilderImpl> {
|
||||
private VehicleBuilderImpl() {
|
||||
}
|
||||
|
||||
protected VehicleBuilderImpl self() {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Vehicle build() {
|
||||
return new Vehicle( this );
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright MapStruct Authors.
|
||||
*
|
||||
* Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
|
||||
*/
|
||||
package org.mapstruct.ap.test.superbuilder;
|
||||
|
||||
public class VehicleDto {
|
||||
|
||||
private final int tireCount;
|
||||
private final PassengerDto passenger;
|
||||
|
||||
public VehicleDto(int tireCount, PassengerDto passenger) {
|
||||
this.tireCount = tireCount;
|
||||
this.passenger = passenger;
|
||||
}
|
||||
|
||||
public int getTireCount() {
|
||||
return tireCount;
|
||||
}
|
||||
|
||||
public PassengerDto getPassenger() {
|
||||
return passenger;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user