com.archimatetool.editor.diagram.DiagramEditorFindReplaceProviderTests.java Source code

Java tutorial

Introduction

Here is the source code for com.archimatetool.editor.diagram.DiagramEditorFindReplaceProviderTests.java

Source

/**
 * This program and the accompanying materials
 * are made available under the terms of the License
 * which accompanies this distribution in the file LICENSE.txt
 */
package com.archimatetool.editor.diagram;

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

import java.io.File;
import java.io.IOException;

import junit.framework.JUnit4TestAdapter;

import org.eclipse.gef.EditPart;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import com.archimatetool.editor.TestSupport;
import com.archimatetool.editor.ui.findreplace.AbstractFindReplaceProvider;
import com.archimatetool.editor.ui.findreplace.AbstractFindReplaceProviderTests;
import com.archimatetool.editor.ui.findreplace.IFindReplaceProvider;
import com.archimatetool.model.IArchimateDiagramModel;
import com.archimatetool.model.IArchimateModel;
import com.archimatetool.model.INameable;
import com.archimatetool.model.util.ArchimateModelUtils;
import com.archimatetool.testingtools.ArchimateTestEditor;
import com.archimatetool.testingtools.ArchimateTestModel;

@SuppressWarnings("nls")
public class DiagramEditorFindReplaceProviderTests extends AbstractFindReplaceProviderTests {

    private static ArchimateTestModel tm;
    private static IArchimateModel model;
    private static IArchimateDiagramModel dm;
    private static ArchimateTestEditor editor;

    private DiagramEditorFindReplaceProvider provider;

    public static junit.framework.Test suite() {
        return new JUnit4TestAdapter(DiagramEditorFindReplaceProviderTests.class);
    }

    @BeforeClass
    public static void runOnceBeforeAllTests() throws IOException {
        tm = new ArchimateTestModel(new File(TestSupport.getTestDataFolder(), "models/testFindReplace.archimate"));
        model = tm.loadModelWithCommandStack();
        dm = (IArchimateDiagramModel) ArchimateModelUtils.getObjectByID(model, "6a346079");

        editor = new ArchimateTestEditor();
        editor.setDiagramModel(dm);
    }

    @Before
    public void runOnceBeforeEachTest() {
        // Deselect all nodes in Viewer
        editor.getGraphicalViewer().setSelection(StructuredSelection.EMPTY);
    }

    @Override
    protected AbstractFindReplaceProvider getProvider() {
        provider = new DiagramEditorFindReplaceProvider(editor.getGraphicalViewer());
        return provider;
    }

    @Test
    public void testFind() {
        provider.setParameter(IFindReplaceProvider.PARAM_FORWARD, true);

        boolean result = provider.find("FindMe");
        assertTrue(result);
        assertEquals(1, ((IStructuredSelection) editor.getGraphicalViewer().getSelection()).size());
    }

    @Test
    public void testFindAll() {
        // Set to Find All
        provider.setParameter(IFindReplaceProvider.PARAM_ALL, true);
        // Relations as well
        provider.setParameter(IFindReplaceProvider.PARAM_INCLUDE_RELATIONS, true);

        // Ignore case
        provider.setParameter(IFindReplaceProvider.PARAM_CASE_SENSITIVE, false);
        assertTrue(provider.find("findme"));
        assertEquals(5, ((IStructuredSelection) editor.getGraphicalViewer().getSelection()).size());

        // Don't ignore case
        provider.setParameter(IFindReplaceProvider.PARAM_CASE_SENSITIVE, true);
        assertFalse(provider.find("findme"));

        // No relations
        provider.setParameter(IFindReplaceProvider.PARAM_INCLUDE_RELATIONS, false);
        assertTrue(provider.find("FindMe"));
        assertEquals(4, ((IStructuredSelection) editor.getGraphicalViewer().getSelection()).size());
    }

    @Test
    public void testFindNextElement_Forward_NotFound() {
        String searchString = "FindMex";
        provider.setParameter(IFindReplaceProvider.PARAM_FORWARD, true);
        provider.setParameter(IFindReplaceProvider.PARAM_CASE_SENSITIVE, false);

        assertNull(provider.findNextEditPart(null, searchString));
    }

    @Test
    public void testFindNextElement_Backward_NotFound() {
        provider.setParameter(IFindReplaceProvider.PARAM_FORWARD, false);
        provider.setParameter(IFindReplaceProvider.PARAM_CASE_SENSITIVE, false);

        // Start from end element
        String searchString = "FindMex";

        // Start from no selection
        assertNull(provider.findNextEditPart(null, searchString));
    }

    @Test
    public void testFindNextElement_Forward_CaseSensitive() {
        provider.setParameter(IFindReplaceProvider.PARAM_FORWARD, true);
        provider.setParameter(IFindReplaceProvider.PARAM_CASE_SENSITIVE, true);
        // Relations as well
        provider.setParameter(IFindReplaceProvider.PARAM_INCLUDE_RELATIONS, true);

        String searchString = "Find";

        EditPart editPart = provider.findNextEditPart(null, searchString);
        assertEquals("FindMe 1", ((INameable) editPart.getModel()).getName());

        editPart = provider.findNextEditPart(editPart, searchString);
        assertEquals("FindMe 9", ((INameable) editPart.getModel()).getName());

        editPart = provider.findNextEditPart(editPart, searchString);
        assertEquals("FindMe 2", ((INameable) editPart.getModel()).getName());

        editPart = provider.findNextEditPart(editPart, searchString);
        assertEquals("FindMe 3", ((INameable) editPart.getModel()).getName());

        editPart = provider.findNextEditPart(editPart, searchString);
        assertEquals("FindMe 4", ((INameable) editPart.getModel()).getName());

        // should cycle back to the beginning
        editPart = provider.findNextEditPart(null, searchString);
        assertEquals("FindMe 1", ((INameable) editPart.getModel()).getName());
    }

    @Test
    public void testFindNextElement_Backward_NotCaseSensitive() {
        provider.setParameter(IFindReplaceProvider.PARAM_FORWARD, false);
        provider.setParameter(IFindReplaceProvider.PARAM_CASE_SENSITIVE, false);
        // Relations as well
        provider.setParameter(IFindReplaceProvider.PARAM_INCLUDE_RELATIONS, true);

        String searchString = "find";

        EditPart editPart = provider.findNextEditPart(null, searchString);
        assertEquals("FindMe 4", ((INameable) editPart.getModel()).getName());

        editPart = provider.findNextEditPart(editPart, searchString);
        assertEquals("FindMe 3", ((INameable) editPart.getModel()).getName());

        editPart = provider.findNextEditPart(editPart, searchString);
        assertEquals("FindMe 2", ((INameable) editPart.getModel()).getName());

        editPart = provider.findNextEditPart(editPart, searchString);
        assertEquals("FindMe 9", ((INameable) editPart.getModel()).getName());

        editPart = provider.findNextEditPart(editPart, searchString);
        assertEquals("FindMe 1", ((INameable) editPart.getModel()).getName());

        // should cycle back to the beginning
        editPart = provider.findNextEditPart(null, searchString);
        assertEquals("FindMe 4", ((INameable) editPart.getModel()).getName());
    }
}