package com.github.sarxos.webcam.ds.vlcj; import java.awt.Dimension; import java.awt.image.BufferedImage; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; import org.easymock.EasyMock; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.easymock.PowerMock; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import uk.co.caprica.vlcj.medialist.MediaList; import uk.co.caprica.vlcj.medialist.MediaListItem; import uk.co.caprica.vlcj.player.MediaPlayerFactory; import uk.co.caprica.vlcj.player.discoverer.MediaDiscoverer; import com.github.sarxos.webcam.WebcamDevice; import com.github.sarxos.webcam.WebcamResolution; @RunWith(PowerMockRunner.class) @PrepareForTest({ MediaList.class, MediaDiscoverer.class, // }) public class VlcjDeviceTest { private static class DummyDevice implements WebcamDevice { private static final AtomicInteger N = new AtomicInteger(); private final int number; public DummyDevice() { this.number = N.incrementAndGet(); } @Override public String getName() { return "Dummy device " + number; } @Override public Dimension[] getResolutions() { return new Dimension[] { WebcamResolution.VGA.getSize() }; } @Override public Dimension getResolution() { return WebcamResolution.VGA.getSize(); } @Override public void setResolution(Dimension size) { throw new IllegalStateException("Not supported"); } @Override public BufferedImage getImage() { return EasyMock.createMock(BufferedImage.class); } @Override public void open() { // ignore } @Override public void close() { // ignore } @Override public void dispose() { // ignore } @Override public boolean isOpen() { return true; } } private VlcjDriver getDriverMock() { List<MediaListItem> items = new ArrayList<MediaListItem>(); items.add(EasyMock.createMock(MediaListItem.class)); items.add(EasyMock.createMock(MediaListItem.class)); items.add(EasyMock.createMock(MediaListItem.class)); items.add(EasyMock.createMock(MediaListItem.class)); for (MediaListItem item : items) { EasyMock.replay(item); } MediaList list = PowerMock.createNiceMock(MediaList.class); EasyMock.expect(list.items()).andReturn(items).anyTimes(); EasyMock.replay(list); MediaDiscoverer discoverer = PowerMock.createNiceMock(MediaDiscoverer.class); EasyMock.expect(discoverer.getMediaList()).andReturn(list).anyTimes(); EasyMock.replay(discoverer); MediaPlayerFactory factory = EasyMock.createNiceMock(MediaPlayerFactory.class); EasyMock.expect(factory.newVideoMediaDiscoverer()).andReturn(discoverer).anyTimes(); EasyMock.replay(factory); VlcjDriver driver = EasyMock.createMockBuilder(VlcjDriver.class) .addMockedMethod("createMediaPlayerFactory") .addMockedMethod("mediaListItemToDevice") .createMock(); EasyMock.expect(driver.createMediaPlayerFactory()).andReturn(factory).anyTimes(); for (MediaListItem item : items) { EasyMock.expect(driver.mediaListItemToDevice(item)).andReturn(new DummyDevice()).anyTimes(); } EasyMock.replay(driver); return driver; } @Test public void test_getDevices() { VlcjDriver driver = getDriverMock(); List<WebcamDevice> devices = driver.getDevices(); Assert.assertNotNull(devices); Assert.assertEquals(4, devices.size()); } @Test public void test_isThreadSafe() { VlcjDriver driver = getDriverMock(); Assert.assertFalse(driver.isThreadSafe()); } @Test public void test_isScanPossible() { VlcjDriver driver = getDriverMock(); Assert.assertTrue(driver.isScanPossible()); } @Test public void test_getSetScanInterval() { VlcjDriver driver = getDriverMock(); Assert.assertEquals(VlcjDriver.DEFAULT_SCAN_INTERVAL, driver.getScanInterval()); driver.setScanInterval(12345); Assert.assertEquals(12345, driver.getScanInterval()); } @Test public void test_toString() { VlcjDriver driver = getDriverMock(); Assert.assertNotNull(driver.toString()); } }