mirror of
https://github.com/2006-Scape/apollo.git
synced 2026-07-03 00:38:21 +00:00
Merge pull request #167 from ryleykimmel/issue165
Fix String attribute encoding delimiter
This commit is contained in:
@@ -42,6 +42,17 @@ public final class AttributeDefinition<T> {
|
||||
return new AttributeDefinition<>(defaultValue, persistence, AttributeType.LONG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an AttributeDefinition for a {@code long}.
|
||||
*
|
||||
* @param defaultValue The default value of the definition.
|
||||
* @param persistence The {@link AttributePersistence} of the definition.
|
||||
* @return The AttributeDefinition.
|
||||
*/
|
||||
public static AttributeDefinition<Long> forLong(long defaultValue, AttributePersistence persistence) {
|
||||
return new AttributeDefinition<>(defaultValue, persistence, AttributeType.LONG);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an AttributeDefinition for a String.
|
||||
*
|
||||
|
||||
@@ -113,7 +113,7 @@ public final class AttributeMap {
|
||||
private <T> Attribute<?> createAttribute(T value, AttributeType type) {
|
||||
switch (type) {
|
||||
case LONG:
|
||||
return new NumericalAttribute((Long) value);
|
||||
return new NumericalAttribute(((Number) value).longValue());
|
||||
case DOUBLE:
|
||||
return new NumericalAttribute((Double) value);
|
||||
case STRING:
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.apollo.game.model.entity.attr;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
@@ -31,11 +31,11 @@ public final class StringAttribute extends Attribute<String> {
|
||||
|
||||
@Override
|
||||
public byte[] encode() {
|
||||
byte[] bytes = value.getBytes(Charset.forName("UTF-8"));
|
||||
byte[] bytes = value.getBytes(StandardCharsets.UTF_8);
|
||||
int length = bytes.length;
|
||||
|
||||
bytes = Arrays.copyOf(bytes, length + 1);
|
||||
bytes[length - 1] = 0;
|
||||
bytes[length] = 0;
|
||||
return bytes;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
package org.apollo.game.model.entity.attr;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.google.common.primitives.Longs;
|
||||
|
||||
/**
|
||||
* Tests for different {@link Attribute}s.
|
||||
*/
|
||||
public final class AttributeTests {
|
||||
|
||||
/**
|
||||
* Defines Attributes with their default values before any tests are run.
|
||||
*/
|
||||
@Before
|
||||
public void setup() {
|
||||
AttributeMap.define("string_test", AttributeDefinition.forString("Hello world", AttributePersistence.TRANSIENT));
|
||||
AttributeMap.define("boolean_test", AttributeDefinition.forBoolean(true, AttributePersistence.TRANSIENT));
|
||||
AttributeMap.define("int_test", AttributeDefinition.forInt(Integer.MAX_VALUE, AttributePersistence.TRANSIENT));
|
||||
AttributeMap.define("long_test", AttributeDefinition.forLong(Long.MAX_VALUE, AttributePersistence.TRANSIENT));
|
||||
AttributeMap.define("double_test", AttributeDefinition.forDouble(Double.MAX_VALUE, AttributePersistence.TRANSIENT));
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests Attribute <code>String</code> encoding.
|
||||
*/
|
||||
@Test
|
||||
public void stringEncode() {
|
||||
AttributeMap map = new AttributeMap();
|
||||
byte[] expected = "Hello world\0".getBytes(StandardCharsets.UTF_8);
|
||||
Assert.assertArrayEquals(expected, map.get("string_test").encode());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests Attribute <code>boolean</code> encoding.
|
||||
*/
|
||||
@Test
|
||||
public void booleanEncode() {
|
||||
AttributeMap map = new AttributeMap();
|
||||
byte[] expected = { 1 };
|
||||
Assert.assertArrayEquals(expected, map.get("boolean_test").encode());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests Attribute <code>int</code> encoding.
|
||||
*/
|
||||
@Test
|
||||
public void intEncode() {
|
||||
AttributeMap map = new AttributeMap();
|
||||
byte[] expected = Longs.toByteArray(Integer.MAX_VALUE);
|
||||
Assert.assertArrayEquals(expected, map.get("int_test").encode());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests Attribute <code>long</code> encoding.
|
||||
*/
|
||||
@Test
|
||||
public void longEncode() {
|
||||
AttributeMap map = new AttributeMap();
|
||||
byte[] expected = Longs.toByteArray(Long.MAX_VALUE);
|
||||
Assert.assertArrayEquals(expected, map.get("long_test").encode());
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests Attribute <code>double</code> encoding.
|
||||
*/
|
||||
@Test
|
||||
public void doubleEncode() {
|
||||
AttributeMap map = new AttributeMap();
|
||||
byte[] expected = Longs.toByteArray(Double.doubleToLongBits(Double.MAX_VALUE));
|
||||
Assert.assertArrayEquals(expected, map.get("double_test").encode());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user