Package org.locationtech.udig.issues.test

Source Code of org.locationtech.udig.issues.test.IssuesManagerTest

/*
*    uDig - User Friendly Desktop Internet GIS client
*    http://udig.refractions.net
*    (C) 2012, Refractions Research Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* (http://www.eclipse.org/legal/epl-v10.html), and the Refractions BSD
* License v1.0 (http://udig.refractions.net/files/bsd3-v10.html).
*/
package org.locationtech.udig.issues.test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import java.util.Collection;
import java.util.concurrent.atomic.AtomicBoolean;

import org.locationtech.udig.AbstractProjectUITestCase;
import org.locationtech.udig.core.enums.Priority;
import org.locationtech.udig.issues.AbstractIssue;
import org.locationtech.udig.issues.FeatureIssue;
import org.locationtech.udig.issues.IIssue;
import org.locationtech.udig.issues.IIssuesList;
import org.locationtech.udig.issues.IIssuesManager;
import org.locationtech.udig.issues.IssuesList;
import org.locationtech.udig.issues.internal.IssuesManager;
import org.locationtech.udig.issues.listeners.IIssueListener;
import org.locationtech.udig.issues.listeners.IIssuesListListener;
import org.locationtech.udig.issues.listeners.IIssuesManagerListener;
import org.locationtech.udig.issues.listeners.IssuesListEvent;
import org.locationtech.udig.issues.listeners.IssuesListEventType;
import org.locationtech.udig.issues.listeners.IssuesManagerEvent;
import org.locationtech.udig.issues.listeners.IssuesManagerEventType;
import org.locationtech.udig.ui.WaitCondition;
import org.locationtech.udig.ui.tests.support.UDIGTestUtil;

import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IViewPart;
import org.geotools.data.DataStore;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.opengis.feature.simple.SimpleFeatureType;

public class IssuesManagerTest extends AbstractProjectUITestCase {

    @Before
    public void setUp() throws Exception {
        FeatureIssue.setTesting(true);
    }
   
    @After
    public void tearDown() throws Exception {
        FeatureIssue.setTesting(false);
    }

    /*
     * Test method for 'org.locationtech.udig.project.ui.internal.IssuesManager.removeIssues(String)'
     */
    @Test
    public void testRemoveIssues() {
        IssuesManager m = new IssuesManager();
        IIssuesList issueslist = m.getIssuesList();
        for( int i = 0; i < 10; i++ ) {
            issueslist.add(new DummyIssue(i, i < 6 ? "toRemove" : "g" + i)); //$NON-NLS-1$ //$NON-NLS-2$
        }
        DummyListener l = new DummyListener();
        m.addIssuesListListener(l);

        assertEquals(10, issueslist.size());
        m.removeIssues("toRemove"); //$NON-NLS-1$
        assertEquals("All the issues with groupId \"toRemove\"" + //$NON-NLS-1$
                " should be gone leaving 4 items", 4, issueslist.size()); //$NON-NLS-1$
        for( IIssue issue : issueslist ) {
            assertFalse("Item has groupId \"toRemove\"", issue.getGroupId().equals("toRemove")); //$NON-NLS-1$ //$NON-NLS-2$
        }
        assertEquals(6, l.changes);
        assertEquals(1, l.timesCalled);
        l.changes = 0;
        l.timesCalled = 0;
        m.removeIssues("hello"); //$NON-NLS-1$
        assertEquals(0, l.changes);
        assertEquals(0, l.timesCalled);
        assertEquals(4, issueslist.size());
    }

    @Test
    public void testSetIssuesList() throws Exception {
        IssuesManager m = new IssuesManager();
        IIssuesList issuesList = new IssuesList();
        m.setIssuesList(issuesList);

        final AtomicBoolean addedListener = new AtomicBoolean(false);
        final AtomicBoolean removedListener = new AtomicBoolean(false);
        DummyIssue dummyIssue = new DummyIssue(3){
            @Override
            public void addIssueListener( IIssueListener listener ) {
                addedListener.set(true);
            }

            @Override
            public void removeIssueListener( IIssueListener listener ) {
                removedListener.set(true);
            }
        };
        issuesList.add(dummyIssue);
        assertTrue(addedListener.get());
        assertFalse(removedListener.get());

        addedListener.set(false);

        m.setIssuesList(new IssuesList());

        assertFalse(addedListener.get());
        assertTrue(removedListener.get());

        removedListener.set(false);

        m.setIssuesList(issuesList);

        assertTrue(addedListener.get());
        assertFalse(removedListener.get());
    }

    @Test
    public void testListeners() throws Exception {

        IssuesManager m = new IssuesManager();
        final IssuesListEvent[] listEvent = new IssuesListEvent[1];
        m.addIssuesListListener(new IIssuesListListener(){

            public void notifyChange( IssuesListEvent event ) {
                listEvent[0] = event;
            }

        });

        final IssuesManagerEvent[] managerEvent = new IssuesManagerEvent[1];

        m.addListener(new IIssuesManagerListener(){

            public void notifyChange( IssuesManagerEvent event ) {
                managerEvent[0] = event;
            }

        });

        m.getIssuesList().add(new DummyIssue(0));

        assertNotNull(listEvent[0]);
        assertNull(managerEvent[0]);

        listEvent[0] = null;

        m.setIssuesList(new IssuesList());

        assertEquals(IssuesManagerEventType.ISSUES_LIST_CHANGE, managerEvent[0].getType());
        assertNull(listEvent[0]);

        managerEvent[0] = null;

        m.getIssuesList().add(new DummyIssue(0));

        assertNotNull(listEvent[0]);
        assertNull(managerEvent[0]);

    }

    @Test
    public void testDirtyEvents() throws Exception {
            IssuesManager m = new IssuesManager();
            m.setIssuesList(IssuesListTestHelper.createInMemoryDatastoreIssuesList(null, null));

            FeatureIssue createFeatureIssue = IssuesListTestHelper.createFeatureIssue("newFeature"); //$NON-NLS-1$
            m.getIssuesList().add(createFeatureIssue);

            final IssuesManagerEvent[] managerEvent = new IssuesManagerEvent[1];

            m.addListener(new IIssuesManagerListener(){

                public void notifyChange( IssuesManagerEvent event ) {
                    managerEvent[0] = event;
                }

            });

            createFeatureIssue.setPriority(Priority.CRITICAL);

            assertEquals(IssuesManagerEventType.DIRTY_ISSUE, managerEvent[0].getType());
            assertEquals(Boolean.TRUE, managerEvent[0].getNewValue());
            managerEvent[0] = null;

            m.save(new NullProgressMonitor());

            assertEquals(IssuesManagerEventType.SAVE, managerEvent[0].getType());
            assertNull(managerEvent[0].getNewValue());
            assertEquals(createFeatureIssue, ((Collection) managerEvent[0].getOldValue())
                    .iterator().next());
    }

    @Test
    public void testSaveIssuesList() throws Exception {
        IssuesManager m = new IssuesManager();
        IIssuesList issuesList = new IssuesList();
        m.setIssuesList(issuesList);
        issuesList.add(IssuesListTestHelper.createFeatureIssue("1")); //$NON-NLS-1$

        // no exception happens, and nothing else.
        assertFalse(m.save(new NullProgressMonitor()));

        DataStore[] store = new DataStore[1];
        SimpleFeatureType[] featureType = new SimpleFeatureType[1];
        issuesList = IssuesListTestHelper.createInMemoryDatastoreIssuesList(store, featureType);
        m.setIssuesList(issuesList);

        FeatureIssue createIssue = IssuesListTestHelper.createFeatureIssue("2"); //$NON-NLS-1$
        issuesList.add(createIssue);
        issuesList.add(IssuesListTestHelper.createFeatureIssue("3")); //$NON-NLS-1$
        assertFalse(m.save(new NullProgressMonitor()));

        createIssue.setPriority(Priority.TRIVIAL);

        class Listener implements IIssuesListListener {

            private Collection< ? extends IIssue> saved;

            public void notifyChange( IssuesListEvent event ) {

                if (event.getType() == IssuesListEventType.SAVE)
                    saved = event.getChanged();
            }

        };

        Listener listener = new Listener();
        issuesList.addListener(listener);

        assertTrue(m.save(new NullProgressMonitor()));
        assertEquals(1, listener.saved.size());
        assertEquals(createIssue.getId(), listener.saved.iterator().next().getId());
    }

    @Ignore("fails in tycho")
    @Test
    public void testLoadedIssueThrowsException() throws Exception {
        final IIssuesList list = IIssuesManager.defaultInstance.getIssuesList();
        list.clear();
        list.add(new AbstractIssue(){

            public void fixIssue( IViewPart part, IEditorPart editor ) {
            }

            public String getExtensionID() {
                return null;
            }

            public String getProblemObject() {
                throw new RuntimeException();
            }

            public void init( IMemento memento, IMemento viewMemento, String issueId, String groupId, ReferencedEnvelope bounds ) {
            }

            public void save( IMemento memento ) {
            }
           
        });
       
        UDIGTestUtil.inDisplayThreadWait(5000, new WaitCondition(){

            public boolean isTrue()  {
                return list.isEmpty();
            }
           
        }, true);

        assertTrue(list.isEmpty());
       
    }
   
}
TOP

Related Classes of org.locationtech.udig.issues.test.IssuesManagerTest

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.