/*
* MediaModuleTest.java
* JUnit based test
*
* Created on March 29, 2006, 11:49 PM
*/
package com.rometools.modules.mediarss;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;
import junit.framework.Test;
import junit.framework.TestSuite;
import com.rometools.modules.AbstractTestCase;
import com.rometools.modules.mediarss.MediaEntryModule;
import com.rometools.modules.mediarss.MediaModule;
import com.rometools.modules.mediarss.types.MediaContent;
import com.rometools.modules.mediarss.types.Rating;
import com.rometools.modules.mediarss.types.Thumbnail;
import com.rometools.rome.feed.synd.SyndEntry;
import com.rometools.rome.feed.synd.SyndFeed;
import com.rometools.rome.io.FeedException;
import com.rometools.rome.io.SyndFeedInput;
import com.rometools.rome.io.SyndFeedOutput;
/**
*
* @author cooper
*/
public class MediaModuleTest extends AbstractTestCase {
/**
* @param testName id of test
*/
public MediaModuleTest(final String testName) {
super(testName);
}
/**
* @return actual test suite
*/
public static Test suite() {
return new TestSuite(MediaModuleTest.class);
}
/**
* @throws Exception if file not found or not accessible
*/
public void testGoogleVideo() throws Exception {
final SyndFeed feed = getSyndFeed(new File(getTestFile("data/YouTube-MostPopular.rss")));
for (final Object element : feed.getEntries()) {
final SyndEntry entry = (SyndEntry) element;
final MediaEntryModule m = (MediaEntryModule) entry.getModule(MediaModule.URI);
assertNotNull(m);
}
}
/**
* @throws Exception if file not found or not accessible
*/
public void testParse() throws Exception {
final File test = new File(super.getTestFile("xml"));
final File[] files = test.listFiles();
for (int j = 0; j < files.length; j++) {
if (!files[j].getName().endsWith(".xml")) {
continue;
}
final SyndFeed feed = getSyndFeed(files[j]);
final List<SyndEntry> entries = feed.getEntries();
final SyndFeedOutput output = new SyndFeedOutput();
output.output(feed, new File("target/" + j + ".xml"));
final SyndFeed feed2 = getSyndFeed(new File("target/" + j + ".xml"));
for (int i = 0; i < entries.size(); i++) {
BufferedWriter b = new BufferedWriter(new FileWriter("target/" + j + "a.txt"));
b.write("" + entries.get(i).getModule(MediaModule.URI));
b.close();
b = new BufferedWriter(new FileWriter("target/" + j + "b.txt"));
b.write("" + feed2.getEntries().get(i).getModule(MediaModule.URI));
b.close();
assertEquals(entries.get(i).getModule(MediaModule.URI), feed2.getEntries().get(i).getModule(MediaModule.URI));
}
}
}
/**
* tests parsing thubnails with empty dimensions
* (https://github.com/rometools/rome-modules/issues/7).
*
* @throws IOException if file not found or not accessible
* @throws FeedException when the feed can't be parsed
*
*/
public void testParseThumbnailWithEmptyDimensions() throws FeedException, IOException {
final SyndFeed feed = getSyndFeed("org/rometools/feed/module/mediarss/issue-07.xml");
final SyndEntry entry = feed.getEntries().get(0);
final MediaEntryModule module = (MediaEntryModule) entry.getModule(MediaModule.URI);
final Thumbnail[] thumbnails = module.getMetadata().getThumbnail();
assertThat(thumbnails, is(notNullValue()));
}
/**
* tests parsing a decimal duration (https://github.com/rometools/rome-modules/issues/8).
*
* @throws IOException if file not found or not accessible
* @throws FeedException when the feed can't be parsed
*
*/
public void testParseDecimalDuration() throws FeedException, IOException {
final SyndFeed feed = getSyndFeed("org/rometools/feed/module/mediarss/issue-08.xml");
final SyndEntry entry = feed.getEntries().get(0);
final MediaEntryModule module = (MediaEntryModule) entry.getModule(MediaModule.URI);
final Thumbnail[] thumbnails = module.getMetadata().getThumbnail();
assertThat(thumbnails, is(notNullValue()));
}
/**
* tests parsing rating without scheme (https://github.com/rometools/rome-modules/issues/12).
*
* @throws IOException if file not found or not accessible
* @throws FeedException when the feed can't be parsed
*
*/
public void testParseRatingWithoutScheme() throws FeedException, IOException {
final SyndFeed feed = getSyndFeed("org/rometools/feed/module/mediarss/issue-12.xml");
final SyndEntry entry = feed.getEntries().get(0);
final MediaEntryModule module = (MediaEntryModule) entry.getModule(MediaModule.URI);
final Rating[] ratings = module.getMetadata().getRatings();
assertThat(ratings, is(notNullValue()));
}
/**
* test url with whitespace in media element
* (https://github.com/rometools/rome-modules/issues/20).
*
* @throws Exception if file not found or not accessible
*/
public void testParseMediaContentContainingURLWithSpaces() throws Exception {
final SyndFeed feed = getSyndFeed("org/rometools/feed/module/mediarss/issue-20.xml");
final SyndEntry entry = feed.getEntries().get(0);
final MediaEntryModule m = (MediaEntryModule) entry.getModule(MediaModule.URI);
assertNotNull("missing media entry module", m);
final MediaContent[] mcs = m.getMediaContents();
assertNotNull("missing media:content", mcs);
assertEquals("wrong count of media:content", 1, mcs.length);
final MediaContent mc = mcs[0];
assertEquals("http://www.foo.com/path/containing+spaces/trailer.mov", mc.getReference().toString());
}
private SyndFeed getSyndFeed(final File file) throws IOException, FeedException {
return new SyndFeedInput().build(file);
}
private SyndFeed getSyndFeed(final String filePath) throws IOException, FeedException {
final String fullPath = getTestFile(filePath);
final File file = new File(fullPath);
return new SyndFeedInput().build(file);
}
}