Merge pull request #529 from egimaben/master
added autovalue tutorial project
This commit is contained in:
commit
f32ce200c4
|
@ -0,0 +1,36 @@
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<artifactId>autovalue-tutorial</artifactId>
|
||||||
|
<version>1.0</version>
|
||||||
|
<name>AutoValue</name>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.3</version>
|
||||||
|
<configuration>
|
||||||
|
<source>7</source>
|
||||||
|
<target>7</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.auto.value</groupId>
|
||||||
|
<artifactId>auto-value</artifactId>
|
||||||
|
<version>1.2</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.3</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
|
@ -0,0 +1,15 @@
|
||||||
|
package com.baeldung.autovalue;
|
||||||
|
|
||||||
|
import com.google.auto.value.AutoValue;
|
||||||
|
|
||||||
|
@AutoValue
|
||||||
|
public abstract class AutoValueMoney {
|
||||||
|
public abstract String getCurrency();
|
||||||
|
|
||||||
|
public abstract long getAmount();
|
||||||
|
|
||||||
|
public static AutoValueMoney create(String currency, long amount) {
|
||||||
|
return new AutoValue_AutoValueMoney(currency, amount);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.baeldung.autovalue;
|
||||||
|
|
||||||
|
import com.google.auto.value.AutoValue;
|
||||||
|
|
||||||
|
@AutoValue
|
||||||
|
public abstract class AutoValueMoneyWithBuilder {
|
||||||
|
public abstract String getCurrency();
|
||||||
|
|
||||||
|
public abstract long getAmount();
|
||||||
|
|
||||||
|
static Builder builder() {
|
||||||
|
return new AutoValue_AutoValueMoneyWithBuilder.Builder();
|
||||||
|
}
|
||||||
|
|
||||||
|
@AutoValue.Builder
|
||||||
|
abstract static class Builder {
|
||||||
|
abstract Builder setCurrency(String currency);
|
||||||
|
|
||||||
|
abstract Builder setAmount(long amount);
|
||||||
|
|
||||||
|
abstract AutoValueMoneyWithBuilder build();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,51 @@
|
||||||
|
package com.baeldung.autovalue;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public final class Foo {
|
||||||
|
private final String text;
|
||||||
|
private final int number;
|
||||||
|
|
||||||
|
public Foo(String text, int number) {
|
||||||
|
this.text = text;
|
||||||
|
this.number = number;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNumber() {
|
||||||
|
return number;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(text, number);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Foo [text=" + text + ", number=" + number + "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
Foo other = (Foo) obj;
|
||||||
|
if (number != other.number)
|
||||||
|
return false;
|
||||||
|
if (text == null) {
|
||||||
|
if (other.text != null)
|
||||||
|
return false;
|
||||||
|
} else if (!text.equals(other.text))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,52 @@
|
||||||
|
package com.baeldung.autovalue;
|
||||||
|
public final class ImmutableMoney {
|
||||||
|
private final long amount;
|
||||||
|
private final String currency;
|
||||||
|
public ImmutableMoney(long amount, String currency) {
|
||||||
|
this.amount = amount;
|
||||||
|
this.currency = currency;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
final int prime = 31;
|
||||||
|
int result = 1;
|
||||||
|
result = prime * result + (int) (amount ^ (amount >>> 32));
|
||||||
|
result = prime * result
|
||||||
|
+ ((currency == null) ? 0 : currency.hashCode());
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (this == obj)
|
||||||
|
return true;
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
if (getClass() != obj.getClass())
|
||||||
|
return false;
|
||||||
|
ImmutableMoney other = (ImmutableMoney) obj;
|
||||||
|
if (amount != other.amount)
|
||||||
|
return false;
|
||||||
|
if (currency == null) {
|
||||||
|
if (other.currency != null)
|
||||||
|
return false;
|
||||||
|
} else if (!currency.equals(other.currency))
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getAmount() {
|
||||||
|
return amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrency() {
|
||||||
|
return currency;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "ImmutableMoney [amount=" + amount + ", currency=" + currency
|
||||||
|
+ "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
package com.baeldung.autovalue;
|
||||||
|
|
||||||
|
public class MutableMoney {
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "MutableMoney [amount=" + amount + ", currency=" + currency
|
||||||
|
+ "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getAmount() {
|
||||||
|
return amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAmount(long amount) {
|
||||||
|
this.amount = amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCurrency() {
|
||||||
|
return currency;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrency(String currency) {
|
||||||
|
this.currency = currency;
|
||||||
|
}
|
||||||
|
|
||||||
|
private long amount;
|
||||||
|
private String currency;
|
||||||
|
|
||||||
|
public MutableMoney(long amount, String currency) {
|
||||||
|
super();
|
||||||
|
this.amount = amount;
|
||||||
|
this.currency = currency;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
package com.baeldung.autovalue;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class MoneyTest {
|
||||||
|
@Test
|
||||||
|
public void givenTwoSameValueMoneyObjects_whenEqualityTestFails_thenCorrect() {
|
||||||
|
MutableMoney m1 = new MutableMoney(10000, "USD");
|
||||||
|
MutableMoney m2 = new MutableMoney(10000, "USD");
|
||||||
|
assertFalse(m1.equals(m2));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenTwoSameValueMoneyValueObjects_whenEqualityTestPasses_thenCorrect() {
|
||||||
|
ImmutableMoney m1 = new ImmutableMoney(10000, "USD");
|
||||||
|
ImmutableMoney m2 = new ImmutableMoney(10000, "USD");
|
||||||
|
assertTrue(m1.equals(m2));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenValueTypeWithAutoValue_whenFieldsCorrectlySet_thenCorrect() {
|
||||||
|
AutoValueMoney m = AutoValueMoney.create("USD", 10000);
|
||||||
|
assertEquals(m.getAmount(), 10000);
|
||||||
|
assertEquals(m.getCurrency(), "USD");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void given2EqualValueTypesWithAutoValue_whenEqual_thenCorrect() {
|
||||||
|
AutoValueMoney m1 = AutoValueMoney.create("USD", 5000);
|
||||||
|
AutoValueMoney m2 = AutoValueMoney.create("USD", 5000);
|
||||||
|
assertTrue(m1.equals(m2));
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void given2DifferentValueTypesWithAutoValue_whenNotEqual_thenCorrect() {
|
||||||
|
AutoValueMoney m1 = AutoValueMoney.create("GBP", 5000);
|
||||||
|
AutoValueMoney m2 = AutoValueMoney.create("USD", 5000);
|
||||||
|
assertFalse(m1.equals(m2));
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void given2EqualValueTypesWithBuilder_whenEqual_thenCorrect() {
|
||||||
|
AutoValueMoneyWithBuilder m1 = AutoValueMoneyWithBuilder.builder().setAmount(5000).setCurrency("USD").build();
|
||||||
|
AutoValueMoneyWithBuilder m2 = AutoValueMoneyWithBuilder.builder().setAmount(5000).setCurrency("USD").build();
|
||||||
|
assertTrue(m1.equals(m2));
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void given2DifferentValueTypesBuilder_whenNotEqual_thenCorrect() {
|
||||||
|
AutoValueMoneyWithBuilder m1 = AutoValueMoneyWithBuilder.builder().setAmount(5000).setCurrency("USD").build();
|
||||||
|
AutoValueMoneyWithBuilder m2 = AutoValueMoneyWithBuilder.builder().setAmount(5000).setCurrency("GBP").build();
|
||||||
|
assertFalse(m1.equals(m2));
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
public void givenValueTypeWithBuilder_whenFieldsCorrectlySet_thenCorrect() {
|
||||||
|
AutoValueMoneyWithBuilder m = AutoValueMoneyWithBuilder.builder().setAmount(5000).setCurrency("USD").build();
|
||||||
|
assertEquals(m.getAmount(), 5000);
|
||||||
|
assertEquals(m.getCurrency(), "USD");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue