diff --git a/pom.xml b/pom.xml
index dc7c298..ad4af5a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -133,7 +133,7 @@
junit
junit
- 4.7
+ 4.11
test
diff --git a/src/main/java/org/forkalsrud/album/video/FlvMetadata.java b/src/main/java/org/forkalsrud/album/video/FlvMetadata.java
index d68a6cc..b605315 100644
--- a/src/main/java/org/forkalsrud/album/video/FlvMetadata.java
+++ b/src/main/java/org/forkalsrud/album/video/FlvMetadata.java
@@ -32,6 +32,13 @@ public class FlvMetadata {
this.value = value;
}
+ @SuppressWarnings("unchecked")
+ public void merge(Attr> other) {
+ if (other != null && other.getClass() == getClass()) {
+ set((T)other.value);
+ }
+ }
+
public abstract void write(OutputStream out) throws IOException;
public boolean isPresent() {
@@ -249,7 +256,7 @@ public class FlvMetadata {
private LinkedList keyframes = new LinkedList();
- private ArrayList attrs = new ArrayList();
+ private ArrayList> attrs = new ArrayList>();
public FlvMetadata() {
@@ -304,7 +311,7 @@ public class FlvMetadata {
private int length() {
int i = 0;
- for (Attr a : attrs) {
+ for (Attr> a : attrs) {
if (a.isPresent()) {
i++;
}
@@ -355,7 +362,7 @@ public class FlvMetadata {
out.write(2); // string
writeFlvString(out, "onMetaData");
writeFlvEcmaArray(out, length());
- for (Attr a : attrs) {
+ for (Attr> a : attrs) {
if (a.isPresent()) {
if (a.name != null) {
writeFlvString(out, a.name);
@@ -499,10 +506,10 @@ public class FlvMetadata {
public void merge(FlvMetadata other) {
for (int i = 0; i < attrs.size(); i++) {
- Attr their = other.attrs.get(i);
+ Attr> their = other.attrs.get(i);
if (their.isPresent()) {
- Attr our = this.attrs.get(i);
- our.set(their.value);
+ Attr> our = this.attrs.get(i);
+ our.merge(their);
}
}
}
@@ -512,7 +519,7 @@ public class FlvMetadata {
if (prop == null) {
return null;
}
- for (Attr a : attrs) {
+ for (Attr> a : attrs) {
if (prop.equals(a.name) && a.isPresent()) {
return a.value;
}
@@ -637,13 +644,13 @@ public class FlvMetadata {
protected void readProperty(InputStream in) throws FlvFormatException, IOException {
String name = readString(in);
- Attr attr = findAttrByName(name);
+ Attr> attr = findAttrByName(name);
if (attr != null) {
attr.read(in);
} else {
log.warn("Unknown metadata property: " + name);
readUnknownProperty(in, name);
- }
+ }
}
protected void readUnknownProperty(InputStream in, String name) throws IOException, FlvFormatException {
@@ -660,8 +667,8 @@ public class FlvMetadata {
}
}
- private Attr findAttrByName(String name) {
- for (Attr a : this.attrs) {
+ private Attr> findAttrByName(String name) {
+ for (Attr> a : this.attrs) {
if (name.equals(a.name)) {
return a;
}
@@ -716,8 +723,8 @@ public class FlvMetadata {
}
FlvMetadata other = (FlvMetadata)o;
for (int i = 0; i < attrs.size(); i++) {
- Attr their = other.attrs.get(i);
- Attr our = this.attrs.get(i);
+ Attr> their = other.attrs.get(i);
+ Attr> our = this.attrs.get(i);
if (our.isPresent() && their.isPresent()) {
if (!our.value.equals(their.value)) {
return false;
@@ -733,7 +740,7 @@ public class FlvMetadata {
@Override
public int hashCode() {
int x = 0;
- for (Attr a : attrs) {
+ for (Attr> a : attrs) {
x *= 13;
x += a.present ? a.value.hashCode() : 7;
}
diff --git a/src/test/java/org/forkalsrud/album/video/FlvMetadataTest.java b/src/test/java/org/forkalsrud/album/video/FlvMetadataTest.java
index f6da237..9d8a572 100644
--- a/src/test/java/org/forkalsrud/album/video/FlvMetadataTest.java
+++ b/src/test/java/org/forkalsrud/album/video/FlvMetadataTest.java
@@ -5,10 +5,14 @@ import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import org.forkalsrud.album.exif.Dimension;
+import org.junit.Test;
-import junit.framework.TestCase;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+import static org.hamcrest.core.IsEqual.equalTo;
+import static org.hamcrest.core.IsInstanceOf.instanceOf;
-public class FlvMetadataTest extends TestCase {
+public class FlvMetadataTest {
private ByteArrayOutputStream out = new ByteArrayOutputStream();
private ByteArrayInputStream in;
@@ -19,6 +23,7 @@ public class FlvMetadataTest extends TestCase {
out.reset();
}
+ @Test
public void testMerge() throws Exception {
FlvMetadata md1 = new FlvMetadata();
@@ -27,19 +32,20 @@ public class FlvMetadataTest extends TestCase {
FlvMetadata md2 = new FlvMetadata();
md2.merge(md1);
- assertEquals(Double.valueOf("3.14"), md2.get("duration"));
- assertEquals(Double.valueOf("5"), md2.get("width"));
- assertEquals(Double.valueOf("6"), md2.get("height"));
+ assertEquals(3.14d, md2.get("duration"));
+ assertEquals(5d, md2.get("width"));
+ assertEquals(6d, md2.get("height"));
}
+ @Test
public void testReadWriteDouble() throws Exception {
-
double value = 3.14;
md0.writeDouble(out, value);
flip();
- assertEquals(value, md0.readDouble(in));
+ assertThat(md0.readDouble(in), equalTo(value));
}
+ @Test
public void testReadWriteInt() throws Exception {
int value = 45;
// uint16
@@ -63,6 +69,7 @@ public class FlvMetadataTest extends TestCase {
assertEquals(value, md0.readTimestamp(in));
}
+ @Test
public void testReadWriteString() throws Exception {
String value = "awsome";
md0.writeFlvString(out, value);
@@ -70,6 +77,7 @@ public class FlvMetadataTest extends TestCase {
assertEquals(value, md0.readString(in));
}
+ @Test
public void testWriteReadMetadata() throws Exception {
FlvMetadata md1 = new FlvMetadata();
@@ -88,6 +96,7 @@ public class FlvMetadataTest extends TestCase {
}
+ @Test
public void testReadWriteMetadata() throws Exception {
InputStream is = getClass().getResourceAsStream("/VideoAd.flv");
@@ -105,12 +114,13 @@ public class FlvMetadataTest extends TestCase {
assertEquals(md1, md2);
}
+ @Test
public void testSetDuration() {
FlvMetadata m = new FlvMetadata();
m.setDuration("1:02:03");
Object o = m.get("duration");
- assertTrue(o.getClass() == Double.class);
+ assertThat(o, instanceOf(Double.class));
Double durationSeconds = (Double) o;
- assertEquals(3600 + 2*60 + 3, durationSeconds.intValue());
+ assertThat(durationSeconds.intValue(), equalTo(3600 + 2*60 + 3));
}
}