/* * Created on 25/apr/2010 * * Copyright 2010 by Andrea Vacondio (andrea.vacondio@gmail.com). * * This file is part of the Sejda source code * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.sejda.core.notification; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.sejda.core.TestListenerFactory.newGeneralListener; import static org.sejda.core.TestListenerFactory.newPercentageListener; import static org.sejda.core.TestListenerFactory.newStartListener; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import org.sejda.core.Sejda; import org.sejda.core.TestListenerFactory.TestListenerAny; import org.sejda.core.TestListenerFactory.TestListenerPercentage; import org.sejda.core.TestListenerFactory.TestListenerStart; import org.sejda.core.notification.context.GlobalNotificationContext; import org.sejda.core.notification.context.NotificationContext; import org.sejda.core.notification.context.ThreadLocalNotificationContext; import org.sejda.model.notification.event.PercentageOfWorkDoneChangedEvent; import org.sejda.model.notification.event.TaskExecutionFailedEvent; import org.sejda.model.task.NotifiableTaskMetadata; /** * @author Andrea Vacondio * */ public class NotificationContextTest { private List<NotificationContext> contexts = new ArrayList<NotificationContext>(); @Before public void setUp() { System.setProperty(Sejda.USER_CONFIG_FILE_PROPERTY_NAME, "sejda-test.xml"); contexts.add(GlobalNotificationContext.getContext()); contexts.add(ThreadLocalNotificationContext.getContext()); } @Test public void testAddAndClear() { for (NotificationContext victim : contexts) { victim.clearListeners(); assertEquals(0, victim.size()); testNotificationContextAddListener(victim); testNotificationContextClear(victim); testNotificationContextRemoveListener(victim); } } @Test public void testNotificationContextNotify() { for (NotificationContext victim : contexts) { testNotificationContextNotify(victim); testNotificationContextUndetermined(victim); } } private void testNotificationContextNotify(NotificationContext victim) { TestListenerPercentage listener = newPercentageListener(); TestListenerAny<PercentageOfWorkDoneChangedEvent> secondListener = newGeneralListener(); TestListenerAny<TaskExecutionFailedEvent> thirdListener = newGeneralListener(); victim.addListener(listener); victim.addListener(PercentageOfWorkDoneChangedEvent.class, secondListener); victim.addListener(TaskExecutionFailedEvent.class, thirdListener); BigDecimal value = new BigDecimal("32"); PercentageOfWorkDoneChangedEvent event = new PercentageOfWorkDoneChangedEvent(value, NotifiableTaskMetadata.NULL); assertFalse(event.isUndetermined()); victim.notifyListeners(event); assertEquals(value, listener.getPercentage()); assertFalse(listener.isUndeterminate()); assertTrue(secondListener.hasListened()); assertFalse(thirdListener.hasListened()); } private void testNotificationContextUndetermined(NotificationContext victim) { TestListenerPercentage listener = newPercentageListener(); victim.addListener(listener); PercentageOfWorkDoneChangedEvent event = new PercentageOfWorkDoneChangedEvent( PercentageOfWorkDoneChangedEvent.UNDETERMINED, NotifiableTaskMetadata.NULL); assertTrue(event.isUndetermined()); victim.notifyListeners(event); assertTrue(listener.isUndeterminate()); } private void testNotificationContextAddListener(NotificationContext victim) { victim.addListener(newStartListener()); assertEquals(1, victim.size()); TestListenerAny<PercentageOfWorkDoneChangedEvent> listener = newGeneralListener(); victim.addListener(PercentageOfWorkDoneChangedEvent.class, listener); assertEquals(2, victim.size()); } private void testNotificationContextRemoveListener(NotificationContext victim) { TestListenerStart listener = newStartListener(); victim.addListener(listener); assertEquals(1, victim.size()); victim.removeListener(listener); assertEquals(0, victim.size()); } /** * @param victim */ private void testNotificationContextClear(NotificationContext victim) { assertFalse(0 == victim.size()); victim.clearListeners(); assertEquals(0, victim.size()); } }