Package org.locationtech.udig.issues.test

Source Code of org.locationtech.udig.issues.test.IssuesViewTest$TestIssue

/*
*    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.awt.Dimension;
import java.util.concurrent.atomic.AtomicBoolean;

import org.locationtech.udig.AbstractProjectUITestCase;
import org.locationtech.udig.catalog.IGeoResource;
import org.locationtech.udig.core.enums.Priority;
import org.locationtech.udig.core.enums.Resolution;
import org.locationtech.udig.issues.AbstractIssue;
import org.locationtech.udig.issues.FeatureIssue;
import org.locationtech.udig.issues.IIssue;
import org.locationtech.udig.issues.IIssuesContentProvider;
import org.locationtech.udig.issues.IIssuesList;
import org.locationtech.udig.issues.IIssuesManager;
import org.locationtech.udig.issues.IRemoteIssuesList;
import org.locationtech.udig.issues.IssueConfiguration;
import org.locationtech.udig.issues.IssueConstants;
import org.locationtech.udig.issues.IssuesList;
import org.locationtech.udig.issues.internal.ImageConstants;
import org.locationtech.udig.issues.internal.IssuesActivator;
import org.locationtech.udig.issues.internal.IssuesManager;
import org.locationtech.udig.issues.internal.PreferenceConstants;
import org.locationtech.udig.issues.internal.view.IssueExpansionProvider;
import org.locationtech.udig.issues.internal.view.IssuesContentProvider;
import org.locationtech.udig.issues.internal.view.IssuesLabelProvider;
import org.locationtech.udig.issues.internal.view.IssuesSorter;
import org.locationtech.udig.issues.internal.view.IssuesView;
import org.locationtech.udig.issues.internal.view.StrategizedSorter;
import org.locationtech.udig.issues.listeners.IIssuesListListener;
import org.locationtech.udig.issues.listeners.IssuesListEvent;
import org.locationtech.udig.issues.listeners.IssuesListEventType;
import org.locationtech.udig.project.internal.Map;
import org.locationtech.udig.project.tests.support.MapTests;
import org.locationtech.udig.project.tests.ui.ViewPart1;
import org.locationtech.udig.project.ui.ApplicationGIS;
import org.locationtech.udig.project.ui.internal.MapEditorWithPalette;
import org.locationtech.udig.ui.tests.support.UDIGTestUtil;

import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IMemento;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.PlatformUI;
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.SimpleFeature;

public class IssuesViewTest extends AbstractProjectUITestCase {
    private IIssuesList list;
    private TreeViewer viewer;
    private IssuesView view;

    @Before
    public void setUp() throws Exception {
        FeatureIssue.setTesting(true);
        ((IssuesList)IIssuesManager.defaultInstance.getIssuesList()).listeners.clear();
        IIssuesManager.defaultInstance.getIssuesList().clear();
        view=(IssuesView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(IssueConstants.VIEW_ID);
        view.forTestingShowResolvedssues(false);
        view.forTestingGetResolvedIssues().clear();
        viewer = view.forTestingGetViewer();
        view.forTestingSetTesting();
        view.testingAddListeners();
       
        IPreferenceStore preferenceStore = IssuesActivator.getDefault().getPreferenceStore();
        preferenceStore.setValue(PreferenceConstants.KEY_VIEW_CONTENT_PROVIDER, ""); //$NON-NLS-1$
        preferenceStore.setValue(PreferenceConstants.KEY_VIEW_SORTER, ""); //$NON-NLS-1$
        preferenceStore.setValue(PreferenceConstants.KEY_VIEW_EXPANSION_PROVIDER, ""); //$NON-NLS-1$
        view.initViewerProviders();
       
        list = IIssuesManager.defaultInstance.getIssuesList();
        list.add(new TestIssue(Priority.CRITICAL, Resolution.UNRESOLVED));
        list.add(new TestIssue(Priority.HIGH, Resolution.IN_PROGRESS));
        list.add(new TestIssue(Priority.LOW, Resolution.RESOLVED));
        list.add(new TestIssue(Priority.TRIVIAL, Resolution.UNKNOWN));
        list.add(new TestIssue(Priority.WARNING, null));
       
        // allow viewer to update.
        viewer.refresh(true);

        assertEquals(5, ((Tree)viewer.getControl()).getItemCount());
    }
   
    @After
    public void tearDown() throws Exception {
      PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().hideView(view);
        FeatureIssue.setTesting(false);
    }
   
    @Test
    public void testIconsAndText() throws Exception {

        Display.getDefault().syncExec(new Runnable(){
            public void run() {
                // test labels and text

                IssuesLabelProvider p = new IssuesLabelProvider();
                // priority image
                assertNotNull(p.getColumnImage(list.get(0), IssuesView.PRIORITY_COLUMN));
                assertNotNull(p.getColumnImage(list.get(1), IssuesView.PRIORITY_COLUMN));
                assertNotNull(p.getColumnImage(list.get(2), IssuesView.PRIORITY_COLUMN));
                assertNotNull(p.getColumnImage(list.get(3), IssuesView.PRIORITY_COLUMN));
                assertNotNull(p.getColumnImage(list.get(4), IssuesView.PRIORITY_COLUMN));

                assertEquals(p.getColumnImage(list.get(0), IssuesView.PRIORITY_COLUMN), IssuesActivator
                    .getDefault().getImage(ImageConstants.PRIORITY_CRITICAL));
                assertEquals(p.getColumnImage(list.get(1), IssuesView.PRIORITY_COLUMN), IssuesActivator
                    .getDefault().getImage(ImageConstants.PRIORITY_HIGH));
                assertEquals(p.getColumnImage(list.get(2), IssuesView.PRIORITY_COLUMN), IssuesActivator
                    .getDefault().getImage(ImageConstants.PRIORITY_LOW));
                assertEquals(p.getColumnImage(list.get(3), IssuesView.PRIORITY_COLUMN), IssuesActivator
                    .getDefault().getImage(ImageConstants.PRIORITY_TRIVIAL));
                assertEquals(p.getColumnImage(list.get(4), IssuesView.PRIORITY_COLUMN), IssuesActivator
                    .getDefault().getImage(ImageConstants.PRIORITY_WARNING));

                // resolution image
                assertNotNull(p.getColumnImage(list.get(0), IssuesView.RESOLUTION_COLUMN));
                assertNotNull(p.getColumnImage(list.get(1), IssuesView.RESOLUTION_COLUMN));
                assertNotNull(p.getColumnImage(list.get(2), IssuesView.RESOLUTION_COLUMN));
                assertNotNull(p.getColumnImage(list.get(3), IssuesView.RESOLUTION_COLUMN));
                assertNotNull(p.getColumnImage(list.get(4), IssuesView.RESOLUTION_COLUMN));

                assertEquals(p.getColumnImage(list.get(0), IssuesView.RESOLUTION_COLUMN), IssuesActivator
                    .getDefault().getImage(ImageConstants.RESOLUTION_UNRESOLVED));
                assertEquals(p.getColumnImage(list.get(1), IssuesView.RESOLUTION_COLUMN), IssuesActivator
                    .getDefault().getImage(ImageConstants.RESOLUTION_VIEWED));
                assertEquals(p.getColumnImage(list.get(2), IssuesView.RESOLUTION_COLUMN), IssuesActivator
                    .getDefault().getImage(ImageConstants.RESOLUTION_RESOLVED));
                assertEquals(p.getColumnImage(list.get(3), IssuesView.RESOLUTION_COLUMN), IssuesActivator
                    .getDefault().getImage(ImageConstants.RESOLUTION_UNKNOWN));
                assertEquals(p.getColumnImage(list.get(4), IssuesView.RESOLUTION_COLUMN), IssuesActivator
                    .getDefault().getImage(ImageConstants.RESOLUTION_UNRESOLVED));

                // name image
                assertNull(p.getColumnImage(list.get(0), IssuesView.OBJECT_COLUMN));
                assertNull(p.getColumnImage(list.get(1), IssuesView.OBJECT_COLUMN));
                assertNull(p.getColumnImage(list.get(2), IssuesView.OBJECT_COLUMN));
                assertNull(p.getColumnImage(list.get(3), IssuesView.OBJECT_COLUMN));
                assertNull(p.getColumnImage(list.get(4), IssuesView.OBJECT_COLUMN));
                // desc image
                assertNull(p.getColumnImage(list.get(0), IssuesView.DESC_COLUMN));
                assertNull(p.getColumnImage(list.get(1), IssuesView.DESC_COLUMN));
                assertNull(p.getColumnImage(list.get(2), IssuesView.DESC_COLUMN));
                assertNull(p.getColumnImage(list.get(3), IssuesView.DESC_COLUMN));
                assertNull(p.getColumnImage(list.get(4), IssuesView.DESC_COLUMN));

                // priority text
                assertNull(p.getColumnText(list.get(0), IssuesView.PRIORITY_COLUMN));
                assertNull(p.getColumnText(list.get(1), IssuesView.PRIORITY_COLUMN));
                assertNull(p.getColumnText(list.get(2), IssuesView.PRIORITY_COLUMN));
                assertNull(p.getColumnText(list.get(3), IssuesView.PRIORITY_COLUMN));
                assertNull(p.getColumnText(list.get(4), IssuesView.PRIORITY_COLUMN));

                // Resolution text
                assertNull(p.getColumnText(list.get(0), IssuesView.RESOLUTION_COLUMN));
                assertNull(p.getColumnText(list.get(1), IssuesView.RESOLUTION_COLUMN));
                assertNull(p.getColumnText(list.get(2), IssuesView.RESOLUTION_COLUMN));
                assertNull(p.getColumnText(list.get(3), IssuesView.RESOLUTION_COLUMN));
                assertNull(p.getColumnText(list.get(4), IssuesView.RESOLUTION_COLUMN));
                // name text
                assertEquals(
                        "problem" + Priority.CRITICAL, p.getColumnText(list.get(0), IssuesView.OBJECT_COLUMN)); //$NON-NLS-1$
                assertEquals(
                        "problem" + Priority.HIGH, p.getColumnText(list.get(1), IssuesView.OBJECT_COLUMN)); //$NON-NLS-1$
                assertEquals(
                        "problem" + Priority.LOW, p.getColumnText(list.get(2), IssuesView.OBJECT_COLUMN)); //$NON-NLS-1$
                assertEquals(
                        "problem" + Priority.TRIVIAL, p.getColumnText(list.get(3), IssuesView.OBJECT_COLUMN)); //$NON-NLS-1$
                assertEquals(
                        "problem" + Priority.WARNING, p.getColumnText(list.get(4), IssuesView.OBJECT_COLUMN)); //$NON-NLS-1$
                // desc text
                assertEquals(
                        "desc" + Priority.CRITICAL, p.getColumnText(list.get(0), IssuesView.DESC_COLUMN)); //$NON-NLS-1$
                assertEquals(
                        "desc" + Priority.HIGH, p.getColumnText(list.get(1), IssuesView.DESC_COLUMN)); //$NON-NLS-1$
                assertEquals(
                        "desc" + Priority.LOW, p.getColumnText(list.get(2), IssuesView.DESC_COLUMN)); //$NON-NLS-1$
                assertEquals(
                        "desc" + Priority.TRIVIAL, p.getColumnText(list.get(3), IssuesView.DESC_COLUMN)); //$NON-NLS-1$
                assertEquals(
                        "desc" + Priority.WARNING, p.getColumnText(list.get(4), IssuesView.DESC_COLUMN)); //$NON-NLS-1$
            }
        });

    }

    @Test
    public void testSetFocus() throws Exception {
        assertEquals(5, list.size());
       
        for ( int i=0; i<15; i++ )
            view.forTestingGetResolvedIssues().add(new TestIssue(null, Resolution.RESOLVED));
        assertEquals(15, view.forTestingGetResolvedIssues().size());

        view.setFocus();
        assertEquals(4, list.size());
        assertEquals(10, view.forTestingGetResolvedIssues().size());

    }

    @Test
    public void testSorterChange() throws Exception {
        Display.getDefault().syncExec(new Runnable(){
            public void run() {

                // test resolution sorting
                viewer.getTree().getColumn(IssuesView.RESOLUTION_COLUMN).notifyListeners(SWT.Selection, new Event());
                ordering(viewer, 0, 2);
                viewer.getTree().getColumn(IssuesView.RESOLUTION_COLUMN).notifyListeners(SWT.Selection, new Event());
                ordering(viewer, 3, 2);

                // test resolution sorting
                viewer.getTree().getColumn(IssuesView.PRIORITY_COLUMN).notifyListeners(SWT.Selection, new Event());
                ordering(viewer, 0, 1);
                viewer.getTree().getColumn(IssuesView.PRIORITY_COLUMN).notifyListeners(SWT.Selection, new Event());
                ordering(viewer, 4, 3);

// test name sorting
                viewer.getTree().getColumn(IssuesView.OBJECT_COLUMN).notifyListeners(SWT.Selection, new Event());
                ordering(viewer, 0, 1);
                viewer.getTree().getColumn(IssuesView.OBJECT_COLUMN).notifyListeners(SWT.Selection, new Event());
                ordering(viewer, 4, 3);
               
// test desc sorting
                viewer.getTree().getColumn(IssuesView.DESC_COLUMN).notifyListeners(SWT.Selection, new Event());
                ordering(viewer, 0, 1);
                viewer.getTree().getColumn(IssuesView.DESC_COLUMN).notifyListeners(SWT.Selection, new Event());
                ordering(viewer, 4, 3);
               
            }
        });
    }

    @Ignore
    @Test
    public void testFixIssue() throws Exception {
        list.clear();
       
        list.add(new TestIssue(Priority.CRITICAL, Resolution.UNRESOLVED){
            @Override
            public void fixIssue( IViewPart arg0, IEditorPart arg1 ) {
                setResolution(Resolution.RESOLVED);
            }
        });
       
        view.fixIssue(list.get(0));
       
        assertEquals(Resolution.RESOLVED, list.get(0).getResolution());
       
        list.clear();
       
        list.add(new TestIssue(Priority.CRITICAL, Resolution.UNKNOWN){
            @Override
            public void fixIssue( IViewPart arg0, IEditorPart arg1 ) {
                //do nothing
            }
        });
       
        view.fixIssue(list.get(0));
       
        assertEquals(Resolution.UNKNOWN, list.get(0).getResolution());
       
        list.get(0).setResolution(Resolution.RESOLVED);
        view.fixIssue(list.get(0));       
        assertEquals(Resolution.RESOLVED, list.get(0).getResolution());

        list.get(0).setResolution(Resolution.UNRESOLVED);
        view.fixIssue(list.get(0));       
        assertEquals(Resolution.IN_PROGRESS, list.get(0).getResolution());
       
        list.get(0).setResolution(Resolution.IN_PROGRESS);
        view.fixIssue(list.get(0));       
        assertEquals(Resolution.IN_PROGRESS, list.get(0).getResolution());
       
        list.clear();
       
        SimpleFeature[] features = UDIGTestUtil.createDefaultTestFeatures("test", 4); //$NON-NLS-1$
        IGeoResource resource = MapTests.createGeoResource(features, false);
        final Map map = MapTests.createNonDynamicMapAndRenderer(resource, new Dimension(512,512));
        class FixIssue extends TestIssue{
            public IViewPart view;
            public IEditorPart editor;
            FixIssue(){
            super(Priority.CRITICAL, Resolution.UNRESOLVED);
            }
                @Override
                public String getEditorID() {
                    return MapEditorWithPalette.ID;
             
                }
               
                @Override
                public IEditorInput getEditorInput() {
                    return ApplicationGIS.getInput(map);
                }
                @Override
                public String getViewPartId() {
                    return ViewPart1.ID;
                }
                @Override
                public void fixIssue( IViewPart arg0, IEditorPart arg1 ) {
                    view=arg0;
                    editor=arg1;
                }
            }
        FixIssue fixIssue = new FixIssue();
        list.add(fixIssue );
       
        view.fixIssue(list.get(0));
        while( Display.getCurrent().readAndDispatch());
        assertEquals(Resolution.IN_PROGRESS, list.get(0).getResolution());     
        assertNotNull( fixIssue.editor);
        assertNotNull( fixIssue.view);
    }
   
//    public void testDoubleClick() throws Exception {
//        list.clear();
//       
//        list.add(new TestIssue(Priority.CRITICAL, Resolution.UNRESOLVED){
//            @Override
//            public void fixIssue( IViewPart arg0, IEditorPart arg1 ) {
//                setResolution(Resolution.RESOLVED);
//            }
//        });
//       
//        viewer.getTable().getItem(0).notifyListeners(SWT.MouseDoubleClick, new Event());
//       
//        while (Display.getCurrent().readAndDispatch() );
//       
//        assertEquals(Resolution.RESOLVED, list.get(0).getResolution());
//    }
   
    @Test
    public void testResolutionChange() throws Exception {
        Display.getDefault().syncExec(new Runnable(){
            public void run()  {
                assertEquals(Resolution.RESOLVED, list.get(2).getResolution());
                viewer.editElement(list.get(2),IssuesView.RESOLUTION_COLUMN);
                assertEquals(Resolution.UNKNOWN, list.get(2).getResolution());
                viewer.editElement(list.get(2),IssuesView.RESOLUTION_COLUMN);
                assertEquals(Resolution.UNRESOLVED, list.get(2).getResolution());
                viewer.editElement(list.get(2),IssuesView.RESOLUTION_COLUMN);
                assertEquals(Resolution.IN_PROGRESS, list.get(2).getResolution());
                viewer.editElement(list.get(2),IssuesView.RESOLUTION_COLUMN);
                assertEquals(Resolution.RESOLVED, list.get(2).getResolution());
                view.setFocus();
                assertEquals(4, list.size());
            }
        });
    }

    @Test
    public void testPriorityChange() throws Exception {
        assertEquals(Priority.CRITICAL, list.get(0).getPriority());
        viewer.editElement(list.get(0),IssuesView.PRIORITY_COLUMN);
        assertEquals(Priority.TRIVIAL, list.get(0).getPriority());
        viewer.editElement(list.get(0),IssuesView.PRIORITY_COLUMN);
        assertEquals(Priority.LOW, list.get(0).getPriority());
        viewer.editElement(list.get(0),IssuesView.PRIORITY_COLUMN);
        assertEquals(Priority.WARNING, list.get(0).getPriority());
        viewer.editElement(list.get(0),IssuesView.PRIORITY_COLUMN);
        assertEquals(Priority.HIGH, list.get(0).getPriority());
        viewer.editElement(list.get(0),IssuesView.PRIORITY_COLUMN);
        assertEquals(Priority.CRITICAL, list.get(0).getPriority());
    }
   
    @Test
    public void testShowFixedIssues() throws Exception {
        list.clear();
        for ( int i=0; i<15; i++ )
            list.add(new TestIssue(null, Resolution.RESOLVED));

        assertEquals( 15, ((Tree)viewer.getControl()).getItemCount());
        assertEquals( 15, list.size());
        view.setFocus();
        assertEquals( 0, list.size());
        assertEquals( 10, view.forTestingGetResolvedIssues().size());
       
        view.forTestingShowResolvedssues(true);
       
        assertEquals( 10, ((Tree)viewer.getControl()).getItemCount());
        assertEquals( view.forTestingGetResolvedIssues().get(0), ((Tree)viewer.getControl()).getItem(0).getData());
       

        view.forTestingGetResolvedIssues().clear();
        assertEquals( 0, ((Tree)viewer.getControl()).getItemCount());
        assertEquals( 0, view.forTestingGetResolvedIssues().size());
       
        for ( int i=0; i<4; i++ )
            list.add(new TestIssue(null, Resolution.RESOLVED));       
        for ( int i=0; i<4; i++ )
            list.add(new TestIssue(null, Resolution.UNKNOWN));

        view.setFocus();
        assertEquals( 4, ((Tree)viewer.getControl()).getItemCount());
       
        list.clear();
        assertEquals( 4, ((Tree)viewer.getControl()).getItemCount());
       
        viewer.editElement(view.forTestingGetResolvedIssues().get(0),IssuesView.RESOLUTION_COLUMN);
        assertEquals(Resolution.UNKNOWN, view.forTestingGetResolvedIssues().get(0).getResolution());
       
        view.setFocus();
        assertEquals( 3, ((Tree)viewer.getControl()).getItemCount());
        assertEquals( 1, list.size());
       
        view.forTestingShowResolvedssues(false);
        assertEquals( 1, ((Tree)viewer.getControl()).getItemCount());
        assertEquals( list.get(0), ((Tree)viewer.getControl()).getItem(0).getData());

    }
   
    @Test
    public void testCloseView() throws Exception {
        IIssuesList old = IIssuesManager.defaultInstance.getIssuesList();
        try{
        IIssuesManager.defaultInstance.setIssuesList(IssuesListTestHelper.createInMemoryDatastoreIssuesList(null, null));
        FeatureIssue createFeatureIssue = IssuesListTestHelper.createFeatureIssue("issue"); //$NON-NLS-1$
        IssuesManager.defaultInstance.getIssuesList().add(createFeatureIssue);
        createFeatureIssue.setPriority(Priority.TRIVIAL);
        final AtomicBoolean saved=new AtomicBoolean(false);
        IssuesManager.defaultInstance.getIssuesList().addListener(new IIssuesListListener(){

            public void notifyChange( IssuesListEvent event ) {
                if(event.getType()==IssuesListEventType.SAVE)
                    saved.set(true);
            }
           
        });
        view.getSite().getPage().hideView(view);
        assertTrue(saved.get());
        }finally{
            IIssuesManager.defaultInstance.setIssuesList(old);
        }
       
    }
   
    @Test
    public void testDispose() throws Exception {
        view.disposeListeners();
        viewer.getControl().getMenu().setVisible(true);
        viewer.getControl().getMenu().setVisible(false);
        assertEquals(0, ((IssuesList)list).listeners.size());
        view.restoreListeners();
    }

    @Test
    public void testDelete() throws Exception {
    IIssue issue = list.get(0);
    viewer.setSelection(new StructuredSelection(issue));
    view.forTestingGetDeleteAction().runWithEvent(new Event());
    assertEquals("only 1 item should have been deleted", 4,list.size()); //$NON-NLS-1$
    IIssue[] issues=new IIssue[3];
    issues[0]=list.get(0);
    issues[1]=list.get(1);
    issues[2]=list.get(2);
    StructuredSelection selection = new StructuredSelection(issues);
    viewer.setSelection(selection);
    view.forTestingGetDeleteAction().runWithEvent(new Event());
    assertEquals("All items should have been deleted except 1", 1,list.size()); //$NON-NLS-1$
  }

    @Test
    public void testDeleteResolvedIssues() throws Exception {
      for (IIssue issue : list) {
      issue.setResolution(Resolution.RESOLVED);
    }
      view.setFocus();
      view.forTestingShowResolvedssues(true);
        IIssuesList list=view.forTestingGetResolvedIssues();
      IIssue issue = list.get(0);
    viewer.setSelection(new StructuredSelection(issue));
    view.forTestingGetDeleteAction().runWithEvent(new Event());
    assertEquals("only 1 item should have been deleted", 4,list.size()); //$NON-NLS-1$
    IIssue[] issues=new IIssue[3];
    issues[0]=list.get(0);
    issues[1]=list.get(1);
    issues[2]=list.get(2);
    StructuredSelection selection = new StructuredSelection(issues);
    viewer.setSelection(selection);
    view.forTestingGetDeleteAction().runWithEvent(new Event());
    assertEquals("All items should have been deleted except 1", 1,list.size()); //$NON-NLS-1$
  }

    @Test
    public void testGroupDelete() throws Exception {
    IIssue issue = list.get(0);
    viewer.setSelection(new StructuredSelection(issue));
    Event event = new Event();
    event.display=Display.getCurrent();
    view.forTestingGetDeleteGroupAction().runWithEvent(event);
    assertEquals("All items should be deleted", 0,list.size()); //$NON-NLS-1$
   
  }

    @Test
    public void testGroupDeleteResolvedIssues() throws Exception {
      for (IIssue issue : list) {
      issue.setResolution(Resolution.RESOLVED);
    }
      view.setFocus();
      view.forTestingShowResolvedssues(true);
        IIssuesList list=view.forTestingGetResolvedIssues();
      IIssue issue = list.get(0);
    viewer.setSelection(new StructuredSelection(issue));
    Event event = new Event();
    event.display=Display.getCurrent();
    view.forTestingGetDeleteGroupAction().runWithEvent(event);
    assertEquals("all items should have been deleted", 0,list.size()); //$NON-NLS-1$
   
  }
   
    @Test
    public void testButtonEnablement() {
      viewer.setSelection(new StructuredSelection());
      assertFalse(view.forTestingGetDeleteAction().isEnabled());
      assertFalse(view.forTestingGetDeleteGroupAction().isEnabled());
      assertFalse(view.forTestingGetFixAction().isEnabled());
     
      viewer.setSelection(new StructuredSelection(list.get(0)));
      assertTrue(view.forTestingGetDeleteAction().isEnabled());
      assertTrue(view.forTestingGetDeleteGroupAction().isEnabled());
      assertTrue(view.forTestingGetFixAction().isEnabled());
    }
   
    @Test
    public void testRefreshSaveButtonEnablement() throws Exception {
        IIssuesList old = IIssuesManager.defaultInstance.getIssuesList();
        try{
            assertFalse(view.forTestingGetRefreshButton().isEnabled());
            assertFalse(view.forTestingGetSaveButton().isEnabled());
   
            IIssuesManager.defaultInstance.setIssuesList(IssuesListTestHelper.createInMemoryDatastoreIssuesList(null, null));
            IIssuesManager.defaultInstance.getIssuesList().addAll(list);
            IIssuesList list=IIssuesManager.defaultInstance.getIssuesList();
           
            assertTrue(view.forTestingGetRefreshButton().isEnabled());
            assertFalse(view.forTestingGetSaveButton().isEnabled());
           
            list.get(0).setDescription("New Description"); //$NON-NLS-1$

            assertTrue(view.forTestingGetRefreshButton().isEnabled());
            assertTrue(view.forTestingGetSaveButton().isEnabled());
           
            IIssuesManager.defaultInstance.save(new NullProgressMonitor());
           
            assertTrue(view.forTestingGetRefreshButton().isEnabled());
            assertFalse(view.forTestingGetSaveButton().isEnabled());
           
            IIssuesManager.defaultInstance.setIssuesList(new IssuesList());
            assertFalse(view.forTestingGetRefreshButton().isEnabled());
            assertFalse(view.forTestingGetSaveButton().isEnabled());
        }finally{
            IIssuesManager.defaultInstance.setIssuesList(old);
        }
    }
   
    @Test
    public void testRefreshAction() throws Exception {
        IIssuesList old = IIssuesManager.defaultInstance.getIssuesList();
        try{
            IIssuesManager.defaultInstance.setIssuesList(IssuesListTestHelper.createInMemoryDatastoreIssuesList(null, null));
            IRemoteIssuesList list=(IRemoteIssuesList) IIssuesManager.defaultInstance.getIssuesList();
           
            final IssuesListEvent[] change=new IssuesListEvent[1];
            list.addListener(new IIssuesListListener(){

                public void notifyChange( IssuesListEvent event ) {
                    change[0]=event;
                }
               
            });
           
            view.forTestingGetRefreshButton().runWithEvent(new Event());
           
            assertEquals(IssuesListEventType.REFRESH, change[0].getType());
        }finally{
            IIssuesManager.defaultInstance.setIssuesList(old);
        }
    }
   
    @Test
    public void testSaveAction() throws Exception {
        IIssuesList old = IIssuesManager.defaultInstance.getIssuesList();
        try{
            IIssuesManager.defaultInstance.setIssuesList(IssuesListTestHelper.createInMemoryDatastoreIssuesList(null, null));
            IRemoteIssuesList list=(IRemoteIssuesList) IIssuesManager.defaultInstance.getIssuesList();
            list.add(IssuesListTestHelper.createFeatureIssue("id")); //$NON-NLS-1$
           
            list.get(0).setDescription("new Description YEAH!"); //$NON-NLS-1$
           
            final IssuesListEvent[] change=new IssuesListEvent[1];
            list.addListener(new IIssuesListListener(){

                public void notifyChange( IssuesListEvent event ) {
                    change[0]=event;
                }
               
            });
           
            view.forTestingGetSaveButton().runWithEvent(new Event());
           
            assertEquals(IssuesListEventType.SAVE, change[0].getType());
        }finally{
            IIssuesManager.defaultInstance.setIssuesList(old);
        }
    }

    @Test
    public void testSetContentProvider() throws Exception {
        view.setContentProvider(new TestContentProvider.Provider1());
        assertEquals(TestContentProvider.Provider1.CHILD,viewer.getTree().getTopItem().getData());
       
        view.setContentProvider(new TestContentProvider.Provider2());
        assertEquals(TestContentProvider.Provider2.CHILD,viewer.getTree().getTopItem().getData());
       
        IssueConfiguration.get().setContentProvider(new TestContentProvider.Provider1());
        assertEquals(TestContentProvider.Provider1.CHILD,viewer.getTree().getTopItem().getData());
    }

    @Test
    public void testSetLabelProvider() throws Exception {
        view.setLabelProvider(new TestLabelProvider.Provider1());

        assertEquals(TestLabelProvider.Provider1.ROWTEXT,viewer.getTree().getItem(0).getText());
        assertEquals(TestLabelProvider.Provider1.HEADERTEXT, view.forTestingGetProblemObjectColumnHeader().getText());

        view.setLabelProvider(new TestLabelProvider.Provider2());

        assertEquals(TestLabelProvider.Provider2.ROWTEXT,viewer.getTree().getItem(0).getText());
        assertEquals(TestLabelProvider.Provider2.HEADERTEXT, view.forTestingGetProblemObjectColumnHeader().getText());
       

        view.setLabelProvider(new TestLabelProvider.Provider1());

        assertEquals(TestLabelProvider.Provider1.ROWTEXT,viewer.getTree().getItem(0).getText());
        assertEquals(TestLabelProvider.Provider1.HEADERTEXT, view.forTestingGetProblemObjectColumnHeader().getText());
       
    }

    @Ignore
    @Test
    public void testSetExpansionProvider() throws Exception {
        viewer.setSelection(new StructuredSelection());
        view.setContentProvider(new IIssuesContentProvider(){
            String parent= "parent";//$NON-NLS-1$
            private Object input;

            public String getExtensionID() {
                return null;
            }

            public Object[] getChildren( Object parentElement ) {
                if( parentElement instanceof IIssuesList) {
                    return new String[]{parent};
                }
                if( parentElement instanceof String )
                    return new Integer[]{2};
                return null;
            }

            public Object getParent( Object element ) {
                if( element instanceof Integer) {
                    return parent;
                }
                if( element instanceof String )
                    return input;
                return null;
            }

            public boolean hasChildren( Object parentElement ) {
                if( parentElement instanceof IIssuesList)
                    return true;
                if( parentElement instanceof String )
                    return true;
                return false;
            }

            public Object[] getElements( Object inputElement ) {
                return getChildren(inputElement);
            }

            public void dispose() {
            }

            public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) {
                this.input=newInput;
            }
           
        });
       

        assertTrue(viewer.getTree().getTopItem().getExpanded());
       
        view.setExpansionProvider(new TestExpansionProvider.Provider1());
        assertTrue(viewer.getTree().getTopItem().getExpanded());
       
        view.setExpansionProvider(new TestExpansionProvider.Provider2());
        assertFalse(viewer.getTree().getTopItem().getExpanded());
       
        view.setExpansionProvider(new TestExpansionProvider.Provider1());
        assertTrue(viewer.getTree().getTopItem().getExpanded());
    }
   
    @Ignore
    @Test
    public void testInit() throws Exception {
        IPreferenceStore preferenceStore = IssuesActivator.getDefault().getPreferenceStore();
        preferenceStore.setValue(PreferenceConstants.KEY_VIEW_CONTENT_PROVIDER, "org.locationtech.udig.issues.test.TestContentProvider"); //$NON-NLS-1$
        preferenceStore.setValue(PreferenceConstants.KEY_VIEW_SORTER, "org.locationtech.udig.issues.test.TestSorter"); //$NON-NLS-1$
        preferenceStore.setValue(PreferenceConstants.KEY_VIEW_EXPANSION_PROVIDER, "org.locationtech.udig.issues.test.TestContentProvider"); //$NON-NLS-1$
        preferenceStore.setValue(PreferenceConstants.KEY_VIEW_LABEL_PROVIDER, "org.locationtech.udig.issues.test.TestLabelProvider"); //$NON-NLS-1$
       
        view.initViewerProviders();
       
        assertTrue( viewer.getContentProvider() instanceof TestContentProvider.Provider1 );
        assertTrue( ((StrategizedSorter)viewer.getSorter()).getStrategy() instanceof TestSorter.Sorter1 );
        assertTrue( view.getExpansionProvider() instanceof TestExpansionProvider.Provider1 );
        assertTrue( viewer.getLabelProvider() instanceof TestLabelProvider.Provider1 );
       
        preferenceStore.setValue(PreferenceConstants.KEY_VIEW_CONTENT_PROVIDER, "randomNonsense value"); //$NON-NLS-1$
        preferenceStore.setValue(PreferenceConstants.KEY_VIEW_LABEL_PROVIDER, "randomNonsense value"); //$NON-NLS-1$
        preferenceStore.setValue(PreferenceConstants.KEY_VIEW_EXPANSION_PROVIDER, "randomNonsense value"); //$NON-NLS-1$
        preferenceStore.setValue(PreferenceConstants.KEY_VIEW_SORTER, "randomNonsense value"); //$NON-NLS-1$

        view.initViewerProviders();
       
        assertTrue( viewer.getContentProvider() instanceof IssuesContentProvider );
        assertTrue( ((StrategizedSorter)viewer.getSorter()).getStrategy() instanceof IssuesSorter );
        assertTrue( view.getExpansionProvider() instanceof IssueExpansionProvider );
        assertTrue( viewer.getLabelProvider() instanceof IssuesLabelProvider );
    }

   
   
    /**
     * @param view
     * @param criticalPriorityRow
     * @param expected2nd
     */
    void ordering( final TreeViewer viewer, int criticalPriorityRow, int highPriorityRow ) {
        IIssue issue=(IIssue) viewer.getTree().getItem(criticalPriorityRow).getData();
        assertEquals(0, issue.getPriority().ordinal());
        issue=(IIssue) viewer.getTree().getItem(highPriorityRow).getData();
        assertEquals(1, issue.getPriority().ordinal());
    }

    class TestIssue extends AbstractIssue {


        TestIssue( Priority p2, Resolution r ) {
            Priority p=p2;
            setResolution(r);
            if( p==null )
                p=Priority.WARNING;
            setPriority(p);
        }
        public TestIssue() {
        }
        public String getProblemObject() {
            return "problem"+getPriority(); //$NON-NLS-1$
        }

        public String getDescription() {
            return "desc"+getPriority(); //$NON-NLS-1$
        }

        public void fixIssue( IViewPart part, IEditorPart editor ) {
            // nada
        }
       
        @Override
        public String toString() {
            return getResolution()+" "+getPriority(); //$NON-NLS-1$
        }
    public String getExtensionID() {
      return null;
    }
        public ReferencedEnvelope getBounds() {
            return null;
        }
        public void init( IMemento memento, IMemento viewMemento, String issueId, String groupId, ReferencedEnvelope bounds ) {
        }
        public void save( IMemento memento ) {
        }
    }
}
TOP

Related Classes of org.locationtech.udig.issues.test.IssuesViewTest$TestIssue

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.