/*******************************************************************************
* Copyright (c) 2005, 2006 Thiago Arrais and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Thiago Arrais
*******************************************************************************/
package net.sf.eclipsefp.haskell.ui.internal.editors.haskell.codeassist;
import net.sf.eclipsefp.haskell.core.internal.util.TestHaskellProject;
import net.sf.eclipsefp.haskell.core.test.TestCaseWithPreferences;
import net.sf.eclipsefp.haskell.ui.internal.editors.haskell.codeassist.doubles.StubViewer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.ITextEditor;
public class WorkbenchHaskellCompletionContext_PDETest extends TestCaseWithPreferences {
private TestHaskellProject fRightHandle;
private TestHaskellProject fWrongHandle;
@Override
protected void setUp() throws Exception {
super.setUp();
fRightHandle = new TestHaskellProject("fibb", getCorePrefs());
fWrongHandle = new TestHaskellProject("qsort", getCorePrefs());
}
@Override
protected void tearDown() throws Exception {
fRightHandle.destroy();
fWrongHandle.destroy();
super.tearDown();
}
public void testFetchesCorrectLanguageModel() throws CoreException {
IFile rightFile = fRightHandle.createSourceFile("Fibonacci.hs", "module Fibonacci where\n\n" +
"fibb 0 = 1\n" +
"fibb 1 = 1\n");
IFile wrongFile = fWrongHandle.createSourceFile("QuickSort.hs", "module QuickSort where\n\n" +
"qsort [] = []");
createViewerFor(wrongFile);
createViewerFor(rightFile);
// final IHaskellModel model = new HaskellLanguageModel();
//
// IHaskellModelManager manager = createMock(IHaskellModelManager.class);
// expect(manager.getModelFor(fRightHandle.getPlatformProject()))
// .andReturn(model);
// replay(manager);
//
// HaskellCompletionContext context = new WorkbenchHaskellCompletionContext(manager, rightViewer, 0);
//
// verify(manager);
//
// assertSame(model, context.getLanguageModel());
}
public void testParsesCurrentSourceCode() throws CoreException {
final String oldText = "module Fibonacci where\n\n" +
"fibb 0 = 1\n" +
"fibb 1 = 1\n";
IFile fibbFile = fRightHandle.createSourceFile("Fibonacci.hs", oldText);
final ITextEditor fibbEditor = createEditorFor(fibbFile);
final IDocument fibbDoc = getDocumentFrom(fibbEditor);
// final ITextViewer fibbViewer = createViewerFor(fibbDoc);
final String currentText = oldText + "fibb n = (fibb (n - 1)) + (fibb (n - 1))\n";
fibbDoc.set(currentText);
// final ICompilationUnit unit = org.easymock.EasyMock.createMock(ICompilationUnit.class);
//
// IHaskellParser parser = createMock(IHaskellParser.class);
// expect(parser.parse(fibbFile, currentText))
// .andReturn(unit);
// replay(parser);
//
// HaskellCompletionContext context = new WorkbenchHaskellCompletionContext(parser, fibbViewer, 0);
//
// fibbEditor.doRevertToSaved();
//
// verify(parser);
//
// assertSame(unit, context.getCompilationUnit());
}
private ITextViewer createViewerFor(final IFile f) throws PartInitException {
IDocument doc = createEditorDocumentFor(f);
return createViewerFor(doc);
}
private ITextViewer createViewerFor(final IDocument doc) {
return new StubViewer(doc);
}
private IDocument createEditorDocumentFor(final IFile file) throws PartInitException {
ITextEditor editor = createEditorFor(file);
return getDocumentFrom(editor);
}
private IDocument getDocumentFrom(final ITextEditor editor) {
final IEditorInput input = editor.getEditorInput();
IDocument doc = editor.getDocumentProvider().getDocument(input);
return doc;
}
private ITextEditor createEditorFor(final IFile file) throws PartInitException {
FileEditorInput input = new FileEditorInput(file);
IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
return (ITextEditor) activePage.openEditor(input, "net.sf.eclipsefp.haskell.ui.internal.editors.haskell.HaskellEditor");
}
}