FileDocCategorySizeDatePackage
FragmentFileSetTest.javaAPI Docmp4parser 1.0-RC-173082Wed Dec 19 20:10:19 GMT 2012com.googlecode.mp4parser.tools.smoothstreamingfragmenter

FragmentFileSetTest.java

package com.googlecode.mp4parser.tools.smoothstreamingfragmenter;


import org.apache.commons.io.DirectoryWalker;
import org.apache.commons.io.IOUtils;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.Test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Collection;

public class FragmentFileSetTest {

    private File createTmpDir() {
        try {
            File tmpDir = File.createTempFile("FragmentFileSetTest", "testCommandLine");
            Assume.assumeTrue(tmpDir.delete());
            Assume.assumeTrue(tmpDir.mkdir());
            return tmpDir;
        } catch (IOException e) {
            e.printStackTrace();
            Assert.fail(e.getMessage());
        }
        return null;
    }

    private void copyResource(String resource, File targetDir) {
        InputStream is = FragmentFileSetTest.class.getResourceAsStream(resource);
        Assume.assumeNotNull(is);
        int i = resource.lastIndexOf("/");
        String filename;
        if (i == -1) {
            filename = resource;
        } else {
            filename = resource.substring(i + 1);
        }
        try {
            FileOutputStream fos = new FileOutputStream(new File(targetDir, filename));
            IOUtils.copy(is, fos);
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
            Assert.fail(e.getMessage());
        }

    }

    @Test
    public void testCommandLine() throws IOException {
        File tmpDir = createTmpDir();
        File outputDir = createTmpDir();
        copyResource("/smoothstreaming/audio-96000.mp4", tmpDir);
        copyResource("/smoothstreaming/video-128h-75kbps.mp4", tmpDir);
        copyResource("/smoothstreaming/video-192h-155kbps.mp4", tmpDir);
        copyResource("/smoothstreaming/video-240h-231kbps.mp4", tmpDir);
        copyResource("/smoothstreaming/video-320h-388kbps.mp4", tmpDir);

        FragmentFileSet fragmentFileSet = new FragmentFileSet();
        File inputs[] = tmpDir.listFiles();
        Assert.assertNotNull(inputs);
        fragmentFileSet.inputFiles = Arrays.asList(inputs);
        fragmentFileSet.outputDir = outputDir;
        fragmentFileSet.run();
        System.err.println(outputDir);

        Assert.assertTrue(new File(outputDir, "Manifest").exists());
        Assert.assertTrue(new File(outputDir, "video").exists());
        Assert.assertTrue(new File(outputDir, "audio").exists());
        // todo This is merely a smoke test. I should have a better test.
        // but how does this better test look like? Get some samples?
        // search first and last sample of each file for a start?




    }

    class SizeDirectoryWalker extends DirectoryWalker<Long> {
        @Override
        protected void handleFile(File file, int depth, Collection<Long> results) throws IOException {
            super.handleFile(file, depth, results);
            results.add(file.length());
        }
    }
}