// Path: op1/src/main/java/com/op1/iff/types/ID.java
// public class ID extends DataType {
// 
//     private final String name;
// 
//     public ID(byte[] bytes) {
//         // TODO: ahem, validation?
//         super(bytes, 4);
//         this.name = new String(bytes);
//     }
// 
//     public static ID valueOf(String s) {
//         return new ID(s.getBytes());
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String toString() {
//         return getName();
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         final ID id = (ID) o;
// 
//         return Arrays.equals(bytes, id.bytes);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         return Arrays.hashCode(bytes);
//     }
// }
// 
// Path: op1/src/main/java/com/op1/iff/types/SignedLong.java
// public class SignedLong extends DataType {
// 
// 
//     public SignedLong(byte[] bytes) {
//         super(bytes, 4);
//     }
// 
//     public int toInt() {
//         return ByteBuffer.wrap(bytes).getInt();
//     }
// 
//     public static SignedLong fromInt(int i) {
//         return new SignedLong(ByteBuffer.allocate(4).putInt(i).array());
//     }
// 
//     @Override
//     public String toString() {
//         return String.valueOf(toInt());
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         final SignedLong that = (SignedLong) o;
// 
//         return Arrays.equals(bytes, that.bytes);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         return Arrays.hashCode(bytes);
//     }
// }


import com.op1.iff.types.ID;
import com.op1.iff.types.SignedLong;
import org.junit.Test;
import static com.op1.aiff.ChunkType.COMMON;
import static com.op1.aiff.ChunkType.SOUND_DATA;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertThat;
package com.op1.aiff;



public class AiffTest {

    @Test
    public void canAddMultipleApplicationChunks() throws Exception {

        // given
        CommonChunk commonChunk = TestChunks.commonChunkOneSampleFrame16BitMono();
        SoundDataChunk soundDataChunk = TestChunks.soundDataChunkOneSampleFrame16BitMono();
        ApplicationChunk applicationChunk1 = TestChunks.applicationChunk();
        ApplicationChunk applicationChunk2 = TestChunks.applicationChunk();

        // when
        Aiff aiff = new Aiff.Builder()
                .withChunkId(new ID("FORM".getBytes()))
// Path: op1/src/main/java/com/op1/iff/types/ID.java
// public class ID extends DataType {
// 
//     private final String name;
// 
//     public ID(byte[] bytes) {
//         // TODO: ahem, validation?
//         super(bytes, 4);
//         this.name = new String(bytes);
//     }
// 
//     public static ID valueOf(String s) {
//         return new ID(s.getBytes());
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String toString() {
//         return getName();
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         final ID id = (ID) o;
// 
//         return Arrays.equals(bytes, id.bytes);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         return Arrays.hashCode(bytes);
//     }
// }
// 
// Path: op1/src/main/java/com/op1/iff/types/SignedLong.java
// public class SignedLong extends DataType {
// 
// 
//     public SignedLong(byte[] bytes) {
//         super(bytes, 4);
//     }
// 
//     public int toInt() {
//         return ByteBuffer.wrap(bytes).getInt();
//     }
// 
//     public static SignedLong fromInt(int i) {
//         return new SignedLong(ByteBuffer.allocate(4).putInt(i).array());
//     }
// 
//     @Override
//     public String toString() {
//         return String.valueOf(toInt());
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
// 
//         final SignedLong that = (SignedLong) o;
// 
//         return Arrays.equals(bytes, that.bytes);
// 
//     }
// 
//     @Override
//     public int hashCode() {
//         return Arrays.hashCode(bytes);
//     }
// }


// Path: op1/src/test/java/com/op1/aiff/AiffTest.java
import com.op1.iff.types.ID;
import com.op1.iff.types.SignedLong;
import org.junit.Test;
import static com.op1.aiff.ChunkType.COMMON;
import static com.op1.aiff.ChunkType.SOUND_DATA;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.junit.Assert.assertThat;

package com.op1.aiff;



public class AiffTest {

    @Test
    public void canAddMultipleApplicationChunks() throws Exception {

        // given
        CommonChunk commonChunk = TestChunks.commonChunkOneSampleFrame16BitMono();
        SoundDataChunk soundDataChunk = TestChunks.soundDataChunkOneSampleFrame16BitMono();
        ApplicationChunk applicationChunk1 = TestChunks.applicationChunk();
        ApplicationChunk applicationChunk2 = TestChunks.applicationChunk();

        // when
        Aiff aiff = new Aiff.Builder()
                .withChunkId(new ID("FORM".getBytes()))
                .withChunkSize(SignedLong.fromInt(42))