Package mmrnmhrm.ui.editor.ref

Source Code of mmrnmhrm.ui.editor.ref.ContentAssist_InteractionTest$CompletionWatcher

package mmrnmhrm.ui.editor.ref;

import static melnorme.utilbox.core.Assert.AssertNamespace.assertTrue;
import melnorme.util.swt.SWTTestUtils;
import mmrnmhrm.tests.ITestResourcesConstants;
import mmrnmhrm.tests.SampleMainProject;

import org.eclipse.jface.text.contentassist.ContentAssistEvent;
import org.eclipse.jface.text.contentassist.ContentAssistant;
import org.eclipse.jface.text.contentassist.ICompletionListener;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Event;
import org.junit.After;
import org.junit.Test;

import dtool.resolver.CompareDefUnits;

// TODO: this test needs some cleanup
public class ContentAssist_InteractionTest extends ContentAssistUI_CommonTest {
 
  public ContentAssist_InteractionTest() {
    super(SampleMainProject.getFile(ITestResourcesConstants.TR_CA + "/testCodeCompletion.d"));
  }
 
  public static final String[] EXPECTED_IN_TEST_f = array(
    "fParam", "func(int a, List!(Foo) a)", "foobarvar",
    "foovar", "foox",
    "func(char b, List!(Foo) b)", "func()",
    /*"FooBar",*/  "foo_t", "fooalias", "fooOfModule", "frak" /*,"Foo",*/
  );
 
  public static final String[] EXPECTED_IN_TEST_fo = array(
      "foobarvar",
      "foovar", "foox", "foo_t", "fooalias", "fooOfModule"
  );
 
  @After
  public void editorCleanup() {
    editor.close(false);
  }
 
  protected void simulateCursorLeft() {
    simulateCharacterPress((char)0, SWT.ARROW_LEFT);
  }
 
  protected void simulateCharacterPress(char character, int keycode) {
    // TODO: we should use SWTbot instead
    Event event = new Event();
    event.character = character;
    event.keyCode = keycode;
    event.type = SWT.KeyDown;
    editor.getViewer().getTextWidget().notifyListeners(SWT.KeyDown, event);
    event.type = SWT.KeyUp;
    editor.getViewer().getTextWidget().notifyListeners(SWT.KeyUp, event);
  }
 
  @Test
  public void testMoveCursorBeforeStartOffset() throws Exception { testMoveCursorBeforeStartOffset$(); }
  public void testMoveCursorBeforeStartOffset$() throws Exception {
    if(TRUE())
      return; // This test is disable because this functionality was removed, not even JDT has it
   
    ISourceViewer viewer = editor.getViewer();
   
    int ccOffset = getMarkerStartPos("/+@CC.I+/");
    viewer.setSelectedRange(ccOffset, 0);
    assertTrue(viewer.getSelectedRange().x == ccOffset);
   
    CompletionWatcher caWatcher = setupAndActivateContentAssist(viewer, ccOffset);
   
    simulateCursorLeft(); // at start of defunit
    SWTTestUtils.________________flushUIEventQueue________________();
    assertTrue(viewer.getSelectedRange().x == ccOffset - 1);
    assertTrue(caWatcher.active == true);
   
   
    simulateCursorLeft(); // before defunit
    SWTTestUtils.________________flushUIEventQueue________________();
    assertTrue(viewer.getSelectedRange().x == ccOffset - 2);
   
    assertTrue(caWatcher.active == false); // Assert content Assist closed
  }
 
  protected CompletionWatcher setupAndActivateContentAssist(ISourceViewer viewer, int ccOffset) {
    ContentAssistant ca = getContentAssistant(editor);
    CompletionWatcher caWatcher = new CompletionWatcher();
    ca.addCompletionListener(caWatcher);
   
    viewer.revealRange(ccOffset, 10);
    invokeContentAssist(editor, ccOffset);
    assertTrue(caWatcher.active == true);
    return caWatcher;
  }
 
  protected class CompletionWatcher implements ICompletionListener {
    protected boolean active = false;
    protected ContentAssistEvent lastEvent;
    @Override
    public void selectionChanged(ICompletionProposal proposal, boolean smartToggle) {
    }
   
    @Override
    public void assistSessionStarted(ContentAssistEvent event) {
      active = true;
      lastEvent = event;
    }
   
    @Override
    public void assistSessionEnded(ContentAssistEvent event) {
      active = false;
    }
  }
 
  @Test
  public void testFilteringProposals() throws Exception { testFilteringProposals$(); }
  public void testFilteringProposals$() throws Exception {
    ISourceViewer viewer = editor.getViewer();
   
    int ccOffset = getMarkerStartPos("/+@CC.I+/");
    viewer.setSelectedRange(ccOffset, 0);
   
    ContentAssistant ca = getContentAssistant(editor);
    CompletionWatcher caWatcher = setupAndActivateContentAssist(viewer, ccOffset);
   
    ICompletionProposal[] proposals;
    proposals = getProposals(ca);
    CompareDefUnits.checkResults(/*1,*/
      proposalsToDefUnitResults(proposals),
      EXPECTED_IN_TEST_f);
   
    simulateCharacterPress('o', 'o'); // at start of defunit
    SWTTestUtils.________________flushUIEventQueue________________();
    assertTrue(viewer.getSelectedRange().x == ccOffset + 1);
    assertTrue(caWatcher.active == true && isProposalPopupActive(ca) == true);
   
    proposals = getProposals(ca);
    CompareDefUnits.checkResults(/*2,*/
      proposalsToDefUnitResults(proposals),
      EXPECTED_IN_TEST_fo);
   
    simulateCharacterPress('z', 'z'); // before defunit
    SWTTestUtils.________________flushUIEventQueue________________();
    assertTrue(viewer.getSelectedRange().x == ccOffset + 2);
   
    proposals = getProposals(ca);
    assertTrue(proposals == null);
   
    assertTrue(caWatcher.active == false && isProposalPopupActive(ca) == false);
  }
 
}
TOP

Related Classes of mmrnmhrm.ui.editor.ref.ContentAssist_InteractionTest$CompletionWatcher

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.