// Copyright (c) 2008 by Leif Frenzel - see http://leiffrenzel.de // This code is made available under the terms of the Eclipse Public License, // version 1.0 (EPL). See http://www.eclipse.org/legal/epl-v10.html package net.sf.eclipsefp.haskell.core.internal.project; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import net.sf.eclipsefp.haskell.core.HaskellCorePlugin; import net.sf.eclipsefp.haskell.core.test.TestCaseWithProject; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; public class CabalBuilder_PDETest extends TestCaseWithProject { final static String cabalFile = PROJECT_NAME + ".cabal"; public void testNoCabalFileWarning() throws CoreException { assertTrue( project.exists() ); // a Cabal file was created by default assertTrue( project.getFile( cabalFile ).exists() ); project.getFile( cabalFile ).delete( true, null ); waitForAutoBuild(); // no cabal file -> warning assertMarker( IMarker.SEVERITY_WARNING, "No cabal file" ); // cabal file -> no warning IFile cabalFile = createCabalFile(); waitForAutoBuild(); assertNoMarkerWithMsg( IMarker.SEVERITY_WARNING, "No cabal file" ); // again no cabal file -> warning cabalFile.delete( true, null ); waitForAutoBuild(); assertMarker( IMarker.SEVERITY_WARNING, "No cabal file" ); } private IFile createCabalFile() throws CoreException { IFile result = project.getFile( cabalFile ); InputStream is = new ByteArrayInputStream( "".getBytes() ); result.create( is, true, null ); return result; } // helping functions //////////////////// // there is a marker on the project or one of its resources with the // specified severity and the message snipped is part or the marker message private void assertMarker( final int severity, final String msg ) throws CoreException { List<IMarker> markers = getAllMarkers( severity ); boolean result = false; for( IMarker marker: markers ) { String message = marker.getAttribute( IMarker.MESSAGE, "" ); result |= message.indexOf( msg ) != -1; } assertTrue( "Expecting marker containing: " + msg, result ); } private void assertNoMarkerWithMsg( final int severity, final String msg ) throws CoreException { List<IMarker> markers = getAllMarkers( severity ); boolean result = true; for( IMarker marker: markers ) { String message = marker.getAttribute( IMarker.MESSAGE, "" ); result &= message.indexOf( msg ) == -1; } assertTrue( "Must have no marker containing: " + msg, result ); } private List<IMarker> getAllMarkers( final int severity ) throws CoreException { IMarker[] markers = getAllMarkers(); List<IMarker> result = new ArrayList<>(); for( IMarker marker: markers ) { Object sev = marker.getAttribute( IMarker.SEVERITY ); if( sev instanceof Integer ) { Integer integer = ( Integer )sev; if( integer.intValue() == severity ) { result.add( marker ); } } } return result; } private IMarker[] getAllMarkers() throws CoreException { String id = HaskellCorePlugin.ID_PROJECT_PROBLEM_MARKER; return project.findMarkers( id, true, IResource.DEPTH_INFINITE ); } }