Package org.gstreamer

Source Code of org.gstreamer.ExecutorServiceTest$TestExec

/*
* Copyright (c) 2008 Wayne Meissner
*
* This file is part of gstreamer-java.
*
* gstreamer-java is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* gstreamer-java is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with gstreamer-java.  If not, see <http://www.gnu.org/licenses/>.
*/

package org.gstreamer;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;

import org.gstreamer.glib.MainContextExecutorService;
import org.gstreamer.lowlevel.MainLoop;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

/**
*
* @author wayne
*/
public class ExecutorServiceTest {

    public ExecutorServiceTest() {
    }
    private static MainLoop loop;
    @BeforeClass
    public static void setUpClass() throws Exception {
        Gst.init("ExecutorServiceTest", new String[] {});
        (loop = new MainLoop()).startInBackground();
    }
   
    @AfterClass
    public static void tearDownClass() throws Exception {
        loop.quit();
        Gst.deinit();
    }

    @Before
    public void setUp() {
    }

    @After
    public void tearDown() {
    }
    private static class TestExec {
        private final CountDownLatch latch = new CountDownLatch(1);
        final MainContextExecutorService exec = new MainContextExecutorService(Gst.getMainContext());
        final AtomicBoolean fired = new AtomicBoolean(false);
        public TestExec run() {
            // Create a timer to quit out of the test so it does not hang
            try {
                latch.await(250, TimeUnit.MILLISECONDS);
            } catch (Exception ex) {}
            return this;
        }
        public void execute(Runnable run) {
            exec.execute(run);
        }
        public void quit() {
            latch.countDown();
        }
        public void fired() {
            fired.set(true);
            quit();
        }
        public boolean hasFired() {
            return fired.get();
        }
    }
   
    @Test public void execute() {
        final TestExec exec = new TestExec();
        exec.execute(new Runnable() {

            public void run() {
                exec.fired();
            }
        });
        exec.run();
        assertTrue("Runnable not called", exec.hasFired());
    }
    @Test public void submit() throws Exception {
        final TestExec exec = new TestExec();
        final Integer MAGIC = 0xdeadbeef;
        Callable<Integer> callable = new Callable<Integer>() {

            public Integer call() throws Exception {
                exec.fired();
                return MAGIC;
            }
        };
        Future<Integer> f = exec.exec.submit(callable);
        exec.run();
        assertTrue("Callable not called", exec.hasFired());
        assertEquals("Wrong value returned from Callable", MAGIC, f.get());
       
    }
    @Test public void oneShotTimeout() {
        final TestExec exec = new TestExec();
        exec.exec.schedule(new Runnable() {

            public void run() {
                exec.fired();
            }
        }, 100, TimeUnit.MILLISECONDS);
       
        exec.run();
        assertTrue("Runnable not called", exec.hasFired());
    }
    @Test public void timeoutWithReturnValue() throws Exception {
        final TestExec exec = new TestExec();
        final Integer MAGIC = 0xdeadbeef;
        Callable<Integer> callable = new Callable<Integer>() {

            public Integer call() throws Exception {
                exec.fired();
                return MAGIC;
            }
        };
        Future<Integer> f = exec.exec.schedule(callable, 100, TimeUnit.MILLISECONDS);
       
        exec.run();
        assertTrue("Runnable not called", exec.hasFired());
        assertEquals("Wrong value returned from Callable", MAGIC, f.get());
    }
    @Test public void periodicTimeout() {
        final TestExec exec = new TestExec();
        final AtomicBoolean called = new AtomicBoolean(false);
        exec.exec.scheduleAtFixedRate(new Runnable() {

            public void run() {
                if (called.getAndSet(true)) {
                    exec.fired();
                }
            }
        }, 10, 10, TimeUnit.MILLISECONDS);
       
        exec.run();
        assertTrue("Runnable not called", exec.hasFired());
    }
}
TOP

Related Classes of org.gstreamer.ExecutorServiceTest$TestExec

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.