package com.mopub.mobileads.util.vast; import com.mopub.common.test.support.SdkTestRunner; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.xml.sax.SAXException; import java.io.IOException; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import static org.fest.assertions.api.Assertions.assertThat; @RunWith(SdkTestRunner.class) public class VastXmlManagerTest { private static final String XML_HEADER_TAG = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; private static final String TEST_VAST_XML_STRING = "<VAST xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" version=\"2.0\" xsi:noNamespaceSchemaLocation=\"vast.xsd\">" + " <Ad id=\"223626102\">" + " <InLine>" + " <AdSystem version=\"2.0\">DART_DFA</AdSystem>" + " <AdTitle>In-Stream Video</AdTitle>" + " <Description>A test creative with a description.</Description>" + " <Survey/>" + " <Impression id=\"DART\">" + " <![CDATA[" + " http://ad.doubleclick.net/imp;v7;x;223626102;0-0;0;47414672;0/0;30477563/30495440/1;;~aopt=0/0/ff/0;~cs=j%3fhttp://s0.2mdn.net/dot.gif" + " ]]>" + " </Impression>" + " <Impression id=\"ThirdParty\">" + " <![CDATA[" + " http://ad.doubleclick.net/ad/N270.Process_Other/B3473145;sz=1x1;ord=2922389?" + " ]]>" + " </Impression>" + " <VASTAdTagURI><![CDATA[ http://0.dsp.dev1.mopub.com/xml ]]></VASTAdTagURI>" + " <Creatives>" + " <Creative sequence=\"1\" AdID=\"\">" + " <Linear>" + " <Duration>00:00:58</Duration>" + " <TrackingEvents>" + " <Tracking event=\"start\">" + " <![CDATA[" + " http://ad.doubleclick.net/activity;src=2215309;met=1;v=1;pid=47414672;aid=223626102;ko=0;cid=30477563;rid=30495440;rv=1;timestamp=2922389;eid1=11;ecn1=1;etm1=0;" + " ]]>" + " </Tracking>" + " <Tracking event=\"midpoint\">" + " <![CDATA[" + " http://ad.doubleclick.net/activity;src=2215309;met=1;v=1;pid=47414672;aid=223626102;ko=0;cid=30477563;rid=30495440;rv=1;timestamp=2922389;eid1=18;ecn1=1;etm1=0;" + " ]]>" + " </Tracking>" + " <Tracking event=\"midpoint\">" + " <![CDATA[" + " http://ad.doubleclick.net/ad/N270.Process_Other/B3473145.3;sz=1x1;ord=2922389?" + " ]]>" + " </Tracking>" + " <Tracking event=\"firstQuartile\">" + " <![CDATA[" + " http://ad.doubleclick.net/activity;src=2215309;met=1;v=1;pid=47414672;aid=223626102;ko=0;cid=30477563;rid=30495440;rv=1;timestamp=2922389;eid1=26;ecn1=1;etm1=0;" + " ]]>" + " </Tracking>" + " <Tracking event=\"firstQuartile\">" + " <![CDATA[" + " http://ad.doubleclick.net/ad/N270.Process_Other/B3473145.2;sz=1x1;ord=2922389?" + " ]]>" + " </Tracking>" + " <Tracking event=\"thirdQuartile\">" + " <![CDATA[" + " http://ad.doubleclick.net/activity;src=2215309;met=1;v=1;pid=47414672;aid=223626102;ko=0;cid=30477563;rid=30495440;rv=1;timestamp=2922389;eid1=27;ecn1=1;etm1=0;" + " ]]>" + " </Tracking>" + " <Tracking event=\"thirdQuartile\">" + " <![CDATA[" + " http://ad.doubleclick.net/ad/N270.Process_Other/B3473145.4;sz=1x1;ord=2922389?" + " ]]>" + " </Tracking>" + " <Tracking event=\"complete\">" + " <![CDATA[" + " http://ad.doubleclick.net/activity;src=2215309;met=1;v=1;pid=47414672;aid=223626102;ko=0;cid=30477563;rid=30495440;rv=1;timestamp=2922389;eid1=13;ecn1=1;etm1=0;" + " ]]>" + " </Tracking>" + " <Tracking event=\"complete\">" + " <![CDATA[" + " http://ad.doubleclick.net/ad/N270.Process_Other/B3473145.5;sz=1x1;ord=2922389?" + " ]]>" + " </Tracking>" + " <Tracking event=\"mute\">" + " <![CDATA[" + " http://ad.doubleclick.net/activity;src=2215309;met=1;v=1;pid=47414672;aid=223626102;ko=0;cid=30477563;rid=30495440;rv=1;timestamp=2922389;eid1=16;ecn1=1;etm1=0;" + " ]]>" + " </Tracking>" + " <Tracking event=\"pause\">" + " <![CDATA[" + " http://ad.doubleclick.net/activity;src=2215309;met=1;v=1;pid=47414672;aid=223626102;ko=0;cid=30477563;rid=30495440;rv=1;timestamp=2922389;eid1=15;ecn1=1;etm1=0;" + " ]]>" + " </Tracking>" + " <Tracking event=\"fullscreen\">" + " <![CDATA[" + " http://ad.doubleclick.net/activity;src=2215309;met=1;v=1;pid=47414672;aid=223626102;ko=0;cid=30477563;rid=30495440;rv=1;timestamp=2922389;eid1=19;ecn1=1;etm1=0;" + " ]]>" + " </Tracking>" + " <Tracking event=\"fullscreen\">" + " <![CDATA[" + " http://ad.doubleclick.net/ad/N270.Process_Other/B3473145.6;sz=1x1;ord=2922389?" + " ]]>" + " </Tracking>" + " </TrackingEvents>" + " <AdParameters/>" + " <VideoClicks>" + " <ClickThrough>" + " <![CDATA[ http://www.google.com/support/richmedia ]]>" + " </ClickThrough>" + " <ClickTracking id=\"DART\">" + " <![CDATA[" + " http://ad.doubleclick.net/click%3Bh%3Dv8/3e1b/3/0/%2a/z%3B223626102%3B0-0%3B0%3B47414672%3B255-0/0%3B30477563/30495440/1%3B%3B%7Eaopt%3D0/0/ff/0%3B%7Esscs%3D%3fhttp://s0.2mdn.net/dot.gif" + " ]]>" + " </ClickTracking>" + " <ClickTracking id=\"ThirdParty\">" + " <![CDATA[" + " http://ad.doubleclick.net/clk;212442087;33815766;i?http://www.google.com/support/richmedia" + " ]]>" + " </ClickTracking>" + " </VideoClicks>" + " <MediaFiles>" + " <MediaFile id=\"1\" delivery=\"progressive\" type=\"video/quicktime\" bitrate=\"457\"" + " width=\"300\" height=\"225\">" + " <![CDATA[" + " http://s3.amazonaws.com/uploads.hipchat.com/10627/429509/t8hqeqf98nvtir7/big_buck_bunny.mp4" + " ]]>" + " </MediaFile>" + " </MediaFiles>" + " </Linear>" + " </Creative>" + " <Creative AdID=\"601364-Companion\">" + " <CompanionAds>" + " <Companion height=\"90\" width=\"728\">" + " <StaticResource creativeType=\"image/jpeg\">http://demo.tremormedia.com/proddev/vast/728x90_banner1.jpg</StaticResource>" + " <CompanionClickThrough>http://www.tremormedia.com</CompanionClickThrough>" + " <BADTrackingEvents>" + " <Tracking event=\"creativeView\">http://myTrackingURL/firstCompanionCreativeView</Tracking>" + " <Tracking event=\"creativeView\">http://myTrackingURL/secondCompanionCreativeView</Tracking>" + " </BADTrackingEvents>" + " </Companion>" + " <Companion id=\"valid\" height=\"250\" width=\"300\">" + " <StaticResource creativeType=\"image/png\">http://demo.tremormedia.com/proddev/vast/Blistex1.png</StaticResource>" + " <TrackingEvents>" + " <Tracking event=\"creativeView\">http://myTrackingURL/firstCompanionCreativeView</Tracking>" + " <Tracking event=\"creativeView\">http://myTrackingURL/secondCompanionCreativeView</Tracking>" + " </TrackingEvents>" + " <CompanionClickThrough>http://www.tremormedia.com</CompanionClickThrough>" + " </Companion>" + " <Companion height=\"789\" width=\"456\">" + " <StaticResource creativeType=\"image/bmp\">" + " <![CDATA[" + " http://cdn.liverail.com/adasset/229/7969/300x250.bmp" + " ]]>" + " </StaticResource>" + " <TrackingEvents>" + " <Tracking event=\"creativeView\">" + " <![CDATA[" + " http://trackingUrl1.com/" + " ]]>" + " </Tracking>" + " </TrackingEvents>" + " <CompanionClickThrough>" + " <![CDATA[" + " http://clickThroughUrl1.com/" + " ]]>" + " </CompanionClickThrough>" + " </Companion>" + " <Companion height=\"789\" width=\"1011\">" + " <StaticResource creativeType=\"image/gif\">" + " <![CDATA[" + " http://cdn.liverail.com/adasset/229/7969/300x250.gif" + " ]]>" + " </StaticResource>" + " <CompanionClickThrough>" + " <![CDATA[" + " http://clickThroughUrl2.com/" + " ]]>" + " </CompanionClickThrough>" + " </Companion>" + " <Companion width=\"300\" height=\"60\">" + " <StaticResource creativeType=\"application/x-shockwave-flash\">" + " <![CDATA[" + " http://cdn.liverail.com/adasset4/1331/229/7969/5122396e510b80db6b5ef4013ddabe90.swf" + " ]]>" + " </StaticResource>" + " <TrackingEvents>" + " <Tracking event=\"creativeView\">" + " <![CDATA[" + " http://trackingUrl2.com/" + " ]]>" + " </Tracking>" + " </TrackingEvents>" + " <CompanionClickThrough>" + " <![CDATA[" + " http://clickThroughUrl3.com/" + " ]]>" + " </CompanionClickThrough>" + " </Companion>" + " <Companion id=\"valid\" height=\"249\" width=\"299\">" + " <BADStaticResource creativeType=\"image/jpeg\">http://demo.tremormedia.com/proddev/vast/Blistex1.jpg</BADStaticResource>" + " <TrackingEvents>" + " <Tracking event=\"creativeView\">http://myTrackingURL/firstCompanionCreativeView</Tracking>" + " <Tracking event=\"creativeView\">http://myTrackingURL/secondCompanionCreativeView</Tracking>" + " <BADTracking event=\"creativeView\">http://myTrackingURL/thirdCompanionCreativeView</BADTracking>" + " <Tracking BADevent=\"creativeView\">http://myTrackingURL/fourthCompanionCreativeView</Tracking>" + " <Tracking event=\"BADcreativeView\">http://myTrackingURL/fifthCompanionCreativeView</Tracking>" + " </TrackingEvents>" + " <BADCompanionClickThrough>http://www.tremormedia.com</BADCompanionClickThrough>" + " </Companion>" + " <Companion width=\"9000\">" + " <TrackingEvents>" + " <ThisWillNotBeFound>" + " <Tracking event=\"creativeView\">http://myTrackingURL/firstCompanionCreativeView</Tracking>" + " <Tracking event=\"creativeView\">http://myTrackingURL/secondCompanionCreativeView</Tracking>" + " </ThisWillNotBeFound>" + " </TrackingEvents>" + " </Companion>" + " <BADCompanion>" + " </BADCompanion>" + " </CompanionAds>" + " </Creative>" + " </Creatives>" + " <Extensions>" + " <Extension type=\"DART\">" + " <AdServingData>" + " <DeliveryData>" + " <GeoData>" + " <![CDATA[" + " ct=US&st=CA&ac=415&zp=94103&bw=4&dma=197&city=13358" + " ]]>" + " </GeoData>" + " </DeliveryData>" + " </AdServingData>" + " </Extension>" + " </Extensions>" + " </InLine>" + " </Ad>" + " </VAST>" + "<MP_TRACKING_URLS>" + " <MP_TRACKING_URL>http://www.mopub.com/imp1</MP_TRACKING_URL>" + " <MP_TRACKING_URL>http://www.mopub.com/imp2</MP_TRACKING_URL>" + "</MP_TRACKING_URLS>"; private VastXmlManager mXmlManager; private boolean mExceptionRaised; @Before public void setup() { mXmlManager = new VastXmlManager(); mExceptionRaised = false; try { mXmlManager.parseVastXml(TEST_VAST_XML_STRING); } catch (ParserConfigurationException e) { e.printStackTrace(); mExceptionRaised = true; } catch (IOException e) { e.printStackTrace(); mExceptionRaised = true; } catch (SAXException e) { e.printStackTrace(); mExceptionRaised = true; } } @Test public void parseVastXml_shouldNotRaiseAnExceptionProcessingValidXml() { assertThat(mExceptionRaised).isEqualTo(false); } @Test public void parseVastXml_shouldNotRaiseAnExceptionProcessingXmlWithXmlHeaderTag() throws ParserConfigurationException, IOException, SAXException { String xmlString = XML_HEADER_TAG + TEST_VAST_XML_STRING; mXmlManager = new VastXmlManager(); mXmlManager.parseVastXml(xmlString); } @Test public void getImpressionTrackers_shouldReturnTheCorrectValue() { List<String> trackers = mXmlManager.getImpressionTrackers(); assertThat(trackers.size()).isEqualTo(4); String tracker1 = trackers.get(0); String tracker2 = trackers.get(1); String tracker3 = trackers.get(2); String tracker4 = trackers.get(3); assertThat(tracker1).isEqualTo("http://ad.doubleclick.net/imp;v7;x;223626102;0-0;0;47414672;0/0;30477563/30495440/1;;~aopt=0/0/ff/0;~cs=j%3fhttp://s0.2mdn.net/dot.gif"); assertThat(tracker2).isEqualTo("http://ad.doubleclick.net/ad/N270.Process_Other/B3473145;sz=1x1;ord=2922389?"); assertThat(tracker3).isEqualTo("http://www.mopub.com/imp1"); assertThat(tracker4).isEqualTo("http://www.mopub.com/imp2"); } @Test public void getVideoStartTrackers_shouldReturnTheCorrectValue() { List<String> trackers = mXmlManager.getVideoStartTrackers(); assertThat(trackers.size()).isEqualTo(1); String tracker1 = trackers.get(0); assertThat(tracker1).isEqualTo("http://ad.doubleclick.net/activity;src=2215309;met=1;v=1;pid=47414672;aid=223626102;ko=0;cid=30477563;rid=30495440;rv=1;timestamp=2922389;eid1=11;ecn1=1;etm1=0;"); } @Test public void getVideoFirstQuartileTrackers_shouldReturnTheCorrectValue() { List<String> trackers = mXmlManager.getVideoFirstQuartileTrackers(); assertThat(trackers.size()).isEqualTo(2); String tracker1 = trackers.get(0); String tracker2 = trackers.get(1); assertThat(tracker1).isEqualTo("http://ad.doubleclick.net/activity;src=2215309;met=1;v=1;pid=47414672;aid=223626102;ko=0;cid=30477563;rid=30495440;rv=1;timestamp=2922389;eid1=26;ecn1=1;etm1=0;"); assertThat(tracker2).isEqualTo("http://ad.doubleclick.net/ad/N270.Process_Other/B3473145.2;sz=1x1;ord=2922389?"); } @Test public void getVideoMidpointTrackers_shouldReturnTheCorrectValue() { List<String> trackers = mXmlManager.getVideoMidpointTrackers(); assertThat(trackers.size()).isEqualTo(2); String tracker1 = trackers.get(0); String tracker2 = trackers.get(1); assertThat(tracker1).isEqualTo("http://ad.doubleclick.net/activity;src=2215309;met=1;v=1;pid=47414672;aid=223626102;ko=0;cid=30477563;rid=30495440;rv=1;timestamp=2922389;eid1=18;ecn1=1;etm1=0;"); assertThat(tracker2).isEqualTo("http://ad.doubleclick.net/ad/N270.Process_Other/B3473145.3;sz=1x1;ord=2922389?"); } @Test public void getVideoThirdQuartileTrackers_shouldReturnTheCorrectValue() { List<String> trackers = mXmlManager.getVideoThirdQuartileTrackers(); assertThat(trackers.size()).isEqualTo(2); String tracker1 = trackers.get(0); String tracker2 = trackers.get(1); assertThat(tracker1).isEqualTo("http://ad.doubleclick.net/activity;src=2215309;met=1;v=1;pid=47414672;aid=223626102;ko=0;cid=30477563;rid=30495440;rv=1;timestamp=2922389;eid1=27;ecn1=1;etm1=0;"); assertThat(tracker2).isEqualTo("http://ad.doubleclick.net/ad/N270.Process_Other/B3473145.4;sz=1x1;ord=2922389?"); } @Test public void getVideoCompleteTrackers_shouldReturnTheCorrectValue() { List<String> trackers = mXmlManager.getVideoCompleteTrackers(); assertThat(trackers.size()).isEqualTo(2); String tracker1 = trackers.get(0); String tracker2 = trackers.get(1); assertThat(tracker1).isEqualTo("http://ad.doubleclick.net/activity;src=2215309;met=1;v=1;pid=47414672;aid=223626102;ko=0;cid=30477563;rid=30495440;rv=1;timestamp=2922389;eid1=13;ecn1=1;etm1=0;"); assertThat(tracker2).isEqualTo("http://ad.doubleclick.net/ad/N270.Process_Other/B3473145.5;sz=1x1;ord=2922389?"); } @Test public void getClickThroughUrl_shouldReturnTheCorrectValue() { String url = mXmlManager.getClickThroughUrl(); assertThat(url).isEqualTo("http://www.google.com/support/richmedia"); } @Test public void getClickTrackers_shouldReturnTheCorrectValue() { List<String> trackers = mXmlManager.getClickTrackers(); assertThat(trackers.size()).isEqualTo(2); String tracker1 = trackers.get(0); String tracker2 = trackers.get(1); assertThat(tracker1).isEqualTo("http://ad.doubleclick.net/click%3Bh%3Dv8/3e1b/3/0/%2a/z%3B223626102%3B0-0%3B0%3B47414672%3B255-0/0%3B30477563/30495440/1%3B%3B%7Eaopt%3D0/0/ff/0%3B%7Esscs%3D%3fhttp://s0.2mdn.net/dot.gif"); assertThat(tracker2).isEqualTo("http://ad.doubleclick.net/clk;212442087;33815766;i?http://www.google.com/support/richmedia"); } @Test public void getCompanionAdXmlManagers_shouldReturnListOfPopulatedCompanionAdXmlManagers() throws Exception { List<VastXmlManager.ImageCompanionAdXmlManager> imageCompanionAdXmlManagers = mXmlManager.getCompanionAdXmlManagers(); assertThat(imageCompanionAdXmlManagers.size()).isEqualTo(7); assertThat(imageCompanionAdXmlManagers.get(0).getWidth()).isEqualTo(728); assertThat(imageCompanionAdXmlManagers.get(0).getHeight()).isEqualTo(90); assertThat(imageCompanionAdXmlManagers.get(0).getType()).isEqualTo("image/jpeg"); assertThat(imageCompanionAdXmlManagers.get(0).getImageUrl()).isEqualTo("http://demo.tremormedia.com/proddev/vast/728x90_banner1.jpg"); assertThat(imageCompanionAdXmlManagers.get(0).getClickThroughUrl()).isEqualTo("http://www.tremormedia.com"); assertThat(imageCompanionAdXmlManagers.get(0).getClickTrackers()).isEmpty(); assertThat(imageCompanionAdXmlManagers.get(1).getWidth()).isEqualTo(300); assertThat(imageCompanionAdXmlManagers.get(1).getHeight()).isEqualTo(250); assertThat(imageCompanionAdXmlManagers.get(1).getType()).isEqualTo("image/png"); assertThat(imageCompanionAdXmlManagers.get(1).getImageUrl()).isEqualTo("http://demo.tremormedia.com/proddev/vast/Blistex1.png"); assertThat(imageCompanionAdXmlManagers.get(1).getClickThroughUrl()).isEqualTo("http://www.tremormedia.com"); assertThat(imageCompanionAdXmlManagers.get(1).getClickTrackers()) .containsOnly("http://myTrackingURL/firstCompanionCreativeView", "http://myTrackingURL/secondCompanionCreativeView"); assertThat(imageCompanionAdXmlManagers.get(2).getWidth()).isEqualTo(456); assertThat(imageCompanionAdXmlManagers.get(2).getHeight()).isEqualTo(789); assertThat(imageCompanionAdXmlManagers.get(2).getType()).isEqualTo("image/bmp"); assertThat(imageCompanionAdXmlManagers.get(2).getImageUrl()).isEqualTo("http://cdn.liverail.com/adasset/229/7969/300x250.bmp"); assertThat(imageCompanionAdXmlManagers.get(2).getClickThroughUrl()).isEqualTo("http://clickThroughUrl1.com/"); assertThat(imageCompanionAdXmlManagers.get(2).getClickTrackers()).containsOnly("http://trackingUrl1.com/"); assertThat(imageCompanionAdXmlManagers.get(3).getWidth()).isEqualTo(1011); assertThat(imageCompanionAdXmlManagers.get(3).getHeight()).isEqualTo(789); assertThat(imageCompanionAdXmlManagers.get(3).getType()).isEqualTo("image/gif"); assertThat(imageCompanionAdXmlManagers.get(3).getImageUrl()).isEqualTo("http://cdn.liverail.com/adasset/229/7969/300x250.gif"); assertThat(imageCompanionAdXmlManagers.get(3).getClickThroughUrl()).isEqualTo("http://clickThroughUrl2.com/"); assertThat(imageCompanionAdXmlManagers.get(3).getClickTrackers()).isEmpty(); assertThat(imageCompanionAdXmlManagers.get(4).getWidth()).isEqualTo(300); assertThat(imageCompanionAdXmlManagers.get(4).getHeight()).isEqualTo(60); assertThat(imageCompanionAdXmlManagers.get(4).getType()).isEqualTo("application/x-shockwave-flash"); assertThat(imageCompanionAdXmlManagers.get(4).getImageUrl()).isEqualTo("http://cdn.liverail.com/adasset4/1331/229/7969/5122396e510b80db6b5ef4013ddabe90.swf"); assertThat(imageCompanionAdXmlManagers.get(4).getClickThroughUrl()).isEqualTo("http://clickThroughUrl3.com/"); assertThat(imageCompanionAdXmlManagers.get(4).getClickTrackers()).containsOnly("http://trackingUrl2.com/"); assertThat(imageCompanionAdXmlManagers.get(5).getWidth()).isEqualTo(299); assertThat(imageCompanionAdXmlManagers.get(5).getHeight()).isEqualTo(249); assertThat(imageCompanionAdXmlManagers.get(5).getType()).isNull(); assertThat(imageCompanionAdXmlManagers.get(5).getImageUrl()).isNull(); assertThat(imageCompanionAdXmlManagers.get(5).getClickThroughUrl()).isNull(); assertThat(imageCompanionAdXmlManagers.get(5).getClickTrackers()) .containsOnly("http://myTrackingURL/firstCompanionCreativeView", "http://myTrackingURL/secondCompanionCreativeView"); assertThat(imageCompanionAdXmlManagers.get(6).getWidth()).isEqualTo(9000); assertThat(imageCompanionAdXmlManagers.get(6).getHeight()).isNull(); assertThat(imageCompanionAdXmlManagers.get(6).getType()).isNull(); assertThat(imageCompanionAdXmlManagers.get(6).getImageUrl()).isNull(); assertThat(imageCompanionAdXmlManagers.get(6).getClickThroughUrl()).isNull(); assertThat(imageCompanionAdXmlManagers.get(6).getClickTrackers()).isEmpty(); } @Test public void getMediaFileUrl_shouldReturnTheCorrectValue() { String url = mXmlManager.getMediaFileUrl(); assertThat(url).isEqualTo("http://s3.amazonaws.com/uploads.hipchat.com/10627/429509/t8hqeqf98nvtir7/big_buck_bunny.mp4"); } @Test public void getVastAdTagURI_shouldReturnTheCorrectValue() { String url = mXmlManager.getVastAdTagURI(); assertThat(url).isEqualTo("http://0.dsp.dev1.mopub.com/xml"); } @Test public void parsingMalformedXml_shouldNotCauseProblems() { String badXml = "<im>going<<<to||***crash></,>CDATA[]YOUR_FACE"; VastXmlManager badManager = new VastXmlManager(); try { badManager.parseVastXml(badXml); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } assertThat(badManager.getImpressionTrackers().size()).isEqualTo(0); } @Test public void parsingVastWithMalformedNodes_shouldNotCauseProblems() { String badXml = "<VAST><Impression id=\"DART\"></Impression><Tracking event=\"start\"><![CDATA[ good ]]><ExtraNode><![CDATA[ bad ]]></ExtraNode></Tracking></VAST>"; VastXmlManager badManager = new VastXmlManager(); try { badManager.parseVastXml(badXml); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } assertThat(badManager.getMediaFileUrl()).isEqualTo(null); assertThat(badManager.getVideoMidpointTrackers().size()).isEqualTo(0); assertThat(badManager.getImpressionTrackers().size()).isEqualTo(0); List<String> startTrackers = badManager.getVideoStartTrackers(); assertThat(startTrackers.size()).isEqualTo(1); assertThat(startTrackers.get(0)).isEqualTo("good"); } }