/**
* Copyright 2012-2017 Gunnar Morling (http://www.gunnarmorling.de/)
* and/or other contributors as indicated by the @authors tag. See the
* copyright.txt file in the distribution for a full listing of all
* contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mapstruct.ap.test.conversion.bignumbers;
import static org.assertj.core.api.Assertions.assertThat;
import java.math.BigDecimal;
import java.math.BigInteger;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mapstruct.ap.testutil.IssueKey;
import org.mapstruct.ap.testutil.WithClasses;
import org.mapstruct.ap.testutil.runner.AnnotationProcessorTestRunner;
import org.mapstruct.ap.testutil.runner.GeneratedSource;
/**
* Tests conversions between {@link BigInteger} and numbers as well as String.
*
* @author Gunnar Morling
*/
@RunWith(AnnotationProcessorTestRunner.class)
public class BigNumbersConversionTest {
private final GeneratedSource generatedSource = new GeneratedSource();
@Rule
public GeneratedSource getGeneratedSource() {
return generatedSource;
}
@Test
@IssueKey("21")
@WithClasses({ BigIntegerSource.class, BigIntegerTarget.class, BigIntegerMapper.class })
public void shouldApplyBigIntegerConversions() {
BigIntegerSource source = new BigIntegerSource();
source.setB( new BigInteger( "1" ) );
source.setBb( new BigInteger( "2" ) );
source.setS( new BigInteger( "3" ) );
source.setSs( new BigInteger( "4" ) );
source.setI( new BigInteger( "5" ) );
source.setIi( new BigInteger( "6" ) );
source.setL( new BigInteger( "7" ) );
source.setLl( new BigInteger( "8" ) );
source.setF( new BigInteger( "9" ) );
source.setFf( new BigInteger( "10" ) );
source.setD( new BigInteger( "11" ) );
source.setDd( new BigInteger( "12" ) );
source.setString( new BigInteger( "13" ) );
BigIntegerTarget target = BigIntegerMapper.INSTANCE.sourceToTarget( source );
assertThat( target ).isNotNull();
assertThat( target.getB() ).isEqualTo( (byte) 1 );
assertThat( target.getBb() ).isEqualTo( (byte) 2 );
assertThat( target.getS() ).isEqualTo( (short) 3 );
assertThat( target.getSs() ).isEqualTo( (short) 4 );
assertThat( target.getI() ).isEqualTo( 5 );
assertThat( target.getIi() ).isEqualTo( 6 );
assertThat( target.getL() ).isEqualTo( 7 );
assertThat( target.getLl() ).isEqualTo( 8 );
assertThat( target.getF() ).isEqualTo( 9.0f );
assertThat( target.getFf() ).isEqualTo( 10.0f );
assertThat( target.getD() ).isEqualTo( 11.0d );
assertThat( target.getDd() ).isEqualTo( 12.0d );
assertThat( target.getString() ).isEqualTo( "13" );
}
@Test
@IssueKey("21")
@WithClasses({ BigIntegerSource.class, BigIntegerTarget.class, BigIntegerMapper.class })
public void shouldApplyReverseBigIntegerConversions() {
BigIntegerTarget target = new BigIntegerTarget();
target.setB( (byte) 1 );
target.setBb( (byte) 2 );
target.setS( (short) 3 );
target.setSs( (short) 4 );
target.setI( 5 );
target.setIi( 6 );
target.setL( 7 );
target.setLl( 8L );
target.setF( 9.0f );
target.setFf( 10.0f );
target.setD( 11.0d );
target.setDd( 12.0d );
target.setString( "13" );
BigIntegerSource source = BigIntegerMapper.INSTANCE.targetToSource( target );
assertThat( source ).isNotNull();
assertThat( source.getB() ).isEqualTo( new BigInteger( "1" ) );
assertThat( source.getBb() ).isEqualTo( new BigInteger( "2" ) );
assertThat( source.getS() ).isEqualTo( new BigInteger( "3" ) );
assertThat( source.getSs() ).isEqualTo( new BigInteger( "4" ) );
assertThat( source.getI() ).isEqualTo( new BigInteger( "5" ) );
assertThat( source.getIi() ).isEqualTo( new BigInteger( "6" ) );
assertThat( source.getL() ).isEqualTo( new BigInteger( "7" ) );
assertThat( source.getLl() ).isEqualTo( new BigInteger( "8" ) );
assertThat( source.getF() ).isEqualTo( new BigInteger( "9" ) );
assertThat( source.getFf() ).isEqualTo( new BigInteger( "10" ) );
assertThat( source.getD() ).isEqualTo( new BigInteger( "11" ) );
assertThat( source.getDd() ).isEqualTo( new BigInteger( "12" ) );
assertThat( source.getString() ).isEqualTo( new BigInteger( "13" ) );
}
@Test
@IssueKey("21")
@WithClasses({ BigDecimalSource.class, BigDecimalTarget.class, BigDecimalMapper.class })
public void shouldApplyBigDecimalConversions() {
BigDecimalSource source = new BigDecimalSource();
source.setB( new BigDecimal( "1.45" ) );
source.setBb( new BigDecimal( "2.45" ) );
source.setS( new BigDecimal( "3.45" ) );
source.setSs( new BigDecimal( "4.45" ) );
source.setI( new BigDecimal( "5.45" ) );
source.setIi( new BigDecimal( "6.45" ) );
source.setL( new BigDecimal( "7.45" ) );
source.setLl( new BigDecimal( "8.45" ) );
source.setF( new BigDecimal( "9.45" ) );
source.setFf( new BigDecimal( "10.45" ) );
source.setD( new BigDecimal( "11.45" ) );
source.setDd( new BigDecimal( "12.45" ) );
source.setString( new BigDecimal( "13.45" ) );
source.setBigInteger( new BigDecimal( "14.45" ) );
BigDecimalTarget target = BigDecimalMapper.INSTANCE.sourceToTarget( source );
assertThat( target ).isNotNull();
assertThat( target.getB() ).isEqualTo( (byte) 1 );
assertThat( target.getBb() ).isEqualTo( (byte) 2 );
assertThat( target.getS() ).isEqualTo( (short) 3 );
assertThat( target.getSs() ).isEqualTo( (short) 4 );
assertThat( target.getI() ).isEqualTo( 5 );
assertThat( target.getIi() ).isEqualTo( 6 );
assertThat( target.getL() ).isEqualTo( 7 );
assertThat( target.getLl() ).isEqualTo( 8 );
assertThat( target.getF() ).isEqualTo( 9.45f );
assertThat( target.getFf() ).isEqualTo( 10.45f );
assertThat( target.getD() ).isEqualTo( 11.45d );
assertThat( target.getDd() ).isEqualTo( 12.45d );
assertThat( target.getString() ).isEqualTo( "13.45" );
assertThat( target.getBigInteger() ).isEqualTo( new BigInteger( "14" ) );
}
@Test
@IssueKey("21")
@WithClasses({ BigDecimalSource.class, BigDecimalTarget.class, BigDecimalMapper.class })
public void shouldApplyReverseBigDecimalConversions() {
BigDecimalTarget target = new BigDecimalTarget();
target.setB( (byte) 1 );
target.setBb( (byte) 2 );
target.setS( (short) 3 );
target.setSs( (short) 4 );
target.setI( 5 );
target.setIi( 6 );
target.setL( 7 );
target.setLl( 8L );
target.setF( 9.0f );
target.setFf( 10.0f );
target.setD( 11.0d );
target.setDd( 12.0d );
target.setString( "13.45" );
target.setBigInteger( new BigInteger( "14" ) );
BigDecimalSource source = BigDecimalMapper.INSTANCE.targetToSource( target );
assertThat( source ).isNotNull();
assertThat( source.getB() ).isEqualTo( new BigDecimal( "1" ) );
assertThat( source.getBb() ).isEqualTo( new BigDecimal( "2" ) );
assertThat( source.getS() ).isEqualTo( new BigDecimal( "3" ) );
assertThat( source.getSs() ).isEqualTo( new BigDecimal( "4" ) );
assertThat( source.getI() ).isEqualTo( new BigDecimal( "5" ) );
assertThat( source.getIi() ).isEqualTo( new BigDecimal( "6" ) );
assertThat( source.getL() ).isEqualTo( new BigDecimal( "7" ) );
assertThat( source.getLl() ).isEqualTo( new BigDecimal( "8" ) );
assertThat( source.getF() ).isEqualTo( new BigDecimal( "9.0" ) );
assertThat( source.getFf() ).isEqualTo( new BigDecimal( "10.0" ) );
assertThat( source.getD() ).isEqualTo( new BigDecimal( "11.0" ) );
assertThat( source.getDd() ).isEqualTo( new BigDecimal( "12.0" ) );
assertThat( source.getString() ).isEqualTo( new BigDecimal( "13.45" ) );
assertThat( source.getBigInteger() ).isEqualTo( new BigDecimal( "14" ) );
}
@Test
@IssueKey("1009")
@WithClasses({ BigIntegerSource.class, BigIntegerTarget.class, BigIntegerMapper.class })
public void shouldNotGenerateCreateDecimalFormatMethod() {
getGeneratedSource().forMapper( BigIntegerMapper.class ).content().doesNotContain( "createDecimalFormat" );
}
}