package net.sf.eclipsefp.haskell.core.cabalmodel;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import net.sf.eclipsefp.haskell.util.FileUtil;
import net.sf.eclipsefp.haskell.util.PlatformUtil;
public class CabalModelTest extends TestCase {
public CabalModelTest( final String name ) {
super( name );
}
public static TestSuite suite(){
TestSuite ts=new TestSuite("CabalModelTest");
//ts.addTest( new CabalModelTest( "testJSON" ) );
ts.addTestSuite( CabalModelTest.class );
return ts;
}
@Override
protected void setUp() throws Exception {
super.setUp();
}
public static String getContent(final String fileName){
try (InputStream is=CabalModelTest.class.getResourceAsStream( fileName);
ByteArrayOutputStream baos=new ByteArrayOutputStream()) {
int c=-1;
while ((c=is.read())!=-1){
baos.write(c);
}
return new String(baos.toByteArray(),FileUtil.UTF8);
} catch (Exception e){
e.printStackTrace();
fail(e.getLocalizedMessage());
}
return null;
}
public void testParseExample1(){
String content3=getContent( "Example1.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
assertNotNull(pdss);
assertEquals(2,pdss.size());
assertTrue(pdss.get(0) instanceof PackagePropertiesStanza);
assertEquals(0,pdss.get(0).getIndent());
assertEquals("HUnit",pdss.get(0).getName());
assertEquals(0,pdss.get(0).getStartLine());
assertEquals(9,pdss.get(0).getEndLine());
assertNotNull(pdss.get(0).getProperties());
assertEquals(9,pdss.get(0).getProperties().size());
assertEquals("HUnit",pdss.get(0).getProperties().get( "name"));
assertEquals("HUnit",pdss.get(0).getProperties().get( "Name"));
assertEquals("HUnit",pdss.get(0).getProperties().get( CabalSyntax.FIELD_NAME));
ValuePosition vp=pdss.get(0).getPositions().get(CabalSyntax.FIELD_NAME);
assertEquals(0,vp.getStartLine());
assertEquals(1,vp.getEndLine());
assertEquals(7,vp.getInitialIndent());
assertEquals(13,vp.getSubsequentIndent());
assertEquals("1.1.1",pdss.get(0).getProperties().get( "Version"));
assertEquals(">= 1.2",pdss.get(0).getProperties().get( "Cabal-Version"));
assertEquals("BSD3",pdss.get(0).getProperties().get( "License"));
assertEquals("LICENSE",pdss.get(0).getProperties().get( CabalSyntax.FIELD_LICENSE_FILE));
assertEquals("Dean Herington",pdss.get(0).getProperties().get( "Author"));
assertEquals("A unit testing framework for Haskell",pdss.get(0).getProperties().get( "Synopsis"));
assertEquals("http://hunit.sourceforge.net/",pdss.get(0).getProperties().get( "Homepage"));
assertEquals("Testing",pdss.get(0).getProperties().get( CabalSyntax.FIELD_CATEGORY));
assertEquals(CabalSyntax.SECTION_LIBRARY,pdss.get(1).getType());
assertNull(pdss.get(1).getName());
assertEquals(2,pdss.get(1).getIndent());
assertEquals(10,pdss.get(1).getStartLine());
assertEquals(17,pdss.get(1).getEndLine());
assertNotNull(pdss.get(1).getProperties());
assertEquals(3,pdss.get(1).getProperties().size());
assertEquals("multiset >= 0.1 && < 0.3,"+PlatformUtil.NL+"base",pdss.get(1).getProperties().get( CabalSyntax.FIELD_BUILD_DEPENDS));
vp=pdss.get(1).getPositions().get(CabalSyntax.FIELD_BUILD_DEPENDS);
assertEquals(11,vp.getStartLine());
assertEquals(13,vp.getEndLine());
assertEquals(18,vp.getInitialIndent());
assertEquals(4,vp.getSubsequentIndent());
assertEquals("CPP",pdss.get(1).getProperties().get( "Extensions"));
assertEquals("Test.HUnit.Base, Test.HUnit.Lang, Test.HUnit.Terminal,"+PlatformUtil.NL+"Test.HUnit.Text, Test.HUnit",pdss.get(1).getProperties().get( "Exposed-modules"));
}
public void testModifySmall(){
String content3=getContent( "Small.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
PackageDescriptionStanza pds=pdss.get(0);
assertEquals("HUnit",pds.getProperties().get( CabalSyntax.FIELD_NAME ));
RealValuePosition rvp=pds.update( CabalSyntax.FIELD_NAME, "JP" );
assertEquals("JP"+PlatformUtil.NL,rvp.getRealValue());
assertEquals(0,rvp.getStartLine());
assertEquals(1,rvp.getEndLine());
assertEquals(13,rvp.getInitialIndent());
rvp=pds.update( CabalSyntax.FIELD_NAME, "JP2" );
assertEquals("JP2"+PlatformUtil.NL,rvp.getRealValue());
assertEquals(0,rvp.getStartLine());
assertEquals(1,rvp.getEndLine());
assertEquals(13,rvp.getInitialIndent());
rvp=pds.update( CabalSyntax.FIELD_VERSION, "1.0" );
assertEquals(CabalSyntax.FIELD_VERSION+": 1.0"+PlatformUtil.NL,rvp.getRealValue());
assertEquals(1,rvp.getStartLine());
assertEquals(1,rvp.getEndLine());
assertEquals(0,rvp.getInitialIndent());
rvp=pds.update( CabalSyntax.FIELD_VERSION, "1.1.1" );
assertEquals("1.1.1"+PlatformUtil.NL,rvp.getRealValue());
assertEquals(1,rvp.getStartLine());
assertEquals(2,rvp.getEndLine());
assertEquals(13,rvp.getInitialIndent());
}
public void testModifyExample1(){
String content3=getContent( "Example1.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
PackageDescriptionStanza pds=pdss.get(1);
RealValuePosition rvp=pds.removePrefixFromPropertyList( CabalSyntax.FIELD_BUILD_DEPENDS, "multiset", "," );
assertEquals("base"+PlatformUtil.NL,rvp.getRealValue());
pd=PackageDescriptionLoader.load( content3 );
pdss=pd.getStanzas();
pds=pdss.get(1);
rvp=pds.removePrefixFromPropertyList( CabalSyntax.FIELD_BUILD_DEPENDS, "base", "," );
assertEquals("multiset >= 0.1 && < 0.3"+PlatformUtil.NL,rvp.getRealValue());
}
public void testParseExample3(){
String content3=getContent( "Example3.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
assertNotNull(pdss);
assertEquals(4,pdss.size());
assertTrue(pdss.get(0) instanceof PackagePropertiesStanza);
assertEquals("TestPackage",pdss.get(0).getName());
assertEquals(0,pdss.get(0).getStartLine());
assertEquals(7,pdss.get(0).getEndLine());
assertNotNull(pdss.get(0).getProperties());
assertEquals(7,pdss.get(0).getProperties().size());
assertEquals("TestPackage",pdss.get(0).getProperties().get( "name"));
assertEquals("TestPackage",pdss.get(0).getProperties().get( "Name"));
assertEquals("TestPackage",pdss.get(0).getProperties().get( "NAME"));
assertEquals("TestPackage",pdss.get(0).getProperties().get( CabalSyntax.FIELD_NAME));
assertEquals("0.0",pdss.get(0).getProperties().get( "Version"));
assertEquals(">= 1.2",pdss.get(0).getProperties().get( "Cabal-Version"));
assertEquals("BSD3",pdss.get(0).getProperties().get( "License"));
assertEquals("Angela Author",pdss.get(0).getProperties().get( "Author"));
assertEquals("Package with library and two programs",pdss.get(0).getProperties().get( "Synopsis"));
assertEquals("Simple",pdss.get(0).getProperties().get( "Build-Type"));
assertEquals(CabalSyntax.SECTION_LIBRARY,pdss.get(1).getType());
assertNull(pdss.get(1).getName());
assertEquals(8,pdss.get(1).getStartLine());
assertEquals(11,pdss.get(1).getEndLine());
assertNotNull(pdss.get(1).getProperties());
assertEquals(2,pdss.get(1).getProperties().size());
assertEquals("HUnit",pdss.get(1).getProperties().get( "Build-Depends"));
assertEquals("A, B, C",pdss.get(1).getProperties().get( CabalSyntax.FIELD_EXPOSED_MODULES));
assertEquals(CabalSyntax.SECTION_EXECUTABLE,pdss.get(2).getType());
assertEquals("program1",pdss.get(2).getName());
assertEquals(12,pdss.get(2).getStartLine());
assertEquals(16,pdss.get(2).getEndLine());
assertNotNull(pdss.get(2).getProperties());
assertEquals(3,pdss.get(2).getProperties().size());
assertEquals("Main.hs",pdss.get(2).getProperties().get( "Main-Is"));
assertEquals("prog1",pdss.get(2).getProperties().get( "Hs-Source-Dirs"));
assertEquals("A, B",pdss.get(2).getProperties().get( "Other-Modules"));
assertEquals(CabalSyntax.SECTION_EXECUTABLE,pdss.get(3).getType());
assertEquals("program2",pdss.get(3).getName());
assertEquals(17,pdss.get(3).getStartLine());
assertEquals(21,pdss.get(3).getEndLine());
assertNotNull(pdss.get(3).getProperties());
assertEquals(3,pdss.get(3).getProperties().size());
assertEquals("Main.hs",pdss.get(3).getProperties().get( "Main-Is"));
assertEquals("prog2",pdss.get(3).getProperties().get( "Hs-Source-Dirs"));
assertEquals("A, C, Utils",pdss.get(3).getProperties().get( "Other-Modules"));
}
public void testParseExample3Tab(){
String content3=getContent( "Example3.cabal" );
content3=content3.replace( "Executable program1", "Executable\tprogram1" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
assertNotNull(pdss);
assertEquals(4,pdss.size());
assertTrue(pdss.get(0) instanceof PackagePropertiesStanza);
assertEquals("TestPackage",pdss.get(0).getName());
assertEquals(0,pdss.get(0).getStartLine());
assertEquals(7,pdss.get(0).getEndLine());
assertNotNull(pdss.get(0).getProperties());
assertEquals(7,pdss.get(0).getProperties().size());
assertEquals("TestPackage",pdss.get(0).getProperties().get( "name"));
assertEquals("TestPackage",pdss.get(0).getProperties().get( "Name"));
assertEquals("TestPackage",pdss.get(0).getProperties().get( "NAME"));
assertEquals("TestPackage",pdss.get(0).getProperties().get( CabalSyntax.FIELD_NAME));
assertEquals("0.0",pdss.get(0).getProperties().get( "Version"));
assertEquals(">= 1.2",pdss.get(0).getProperties().get( "Cabal-Version"));
assertEquals("BSD3",pdss.get(0).getProperties().get( "License"));
assertEquals("Angela Author",pdss.get(0).getProperties().get( "Author"));
assertEquals("Package with library and two programs",pdss.get(0).getProperties().get( "Synopsis"));
assertEquals("Simple",pdss.get(0).getProperties().get( "Build-Type"));
assertEquals(CabalSyntax.SECTION_LIBRARY,pdss.get(1).getType());
assertNull(pdss.get(1).getName());
assertEquals(8,pdss.get(1).getStartLine());
assertEquals(11,pdss.get(1).getEndLine());
assertNotNull(pdss.get(1).getProperties());
assertEquals(2,pdss.get(1).getProperties().size());
assertEquals("HUnit",pdss.get(1).getProperties().get( "Build-Depends"));
assertEquals("A, B, C",pdss.get(1).getProperties().get( CabalSyntax.FIELD_EXPOSED_MODULES));
assertEquals(CabalSyntax.SECTION_EXECUTABLE,pdss.get(2).getType());
assertEquals("program1",pdss.get(2).getName());
assertEquals(12,pdss.get(2).getStartLine());
assertEquals(16,pdss.get(2).getEndLine());
assertNotNull(pdss.get(2).getProperties());
assertEquals(3,pdss.get(2).getProperties().size());
assertEquals("Main.hs",pdss.get(2).getProperties().get( "Main-Is"));
assertEquals("prog1",pdss.get(2).getProperties().get( "Hs-Source-Dirs"));
assertEquals("A, B",pdss.get(2).getProperties().get( "Other-Modules"));
assertEquals(CabalSyntax.SECTION_EXECUTABLE,pdss.get(3).getType());
assertEquals("program2",pdss.get(3).getName());
assertEquals(17,pdss.get(3).getStartLine());
assertEquals(21,pdss.get(3).getEndLine());
assertNotNull(pdss.get(3).getProperties());
assertEquals(3,pdss.get(3).getProperties().size());
assertEquals("Main.hs",pdss.get(3).getProperties().get( "Main-Is"));
assertEquals("prog2",pdss.get(3).getProperties().get( "Hs-Source-Dirs"));
assertEquals("A, C, Utils",pdss.get(3).getProperties().get( "Other-Modules"));
}
public void testParseSourceRep(){
String content3=getContent( "SourceRep.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
assertNotNull(pdss);
assertEquals(3,pdss.size());
assertTrue(pdss.get(0) instanceof PackagePropertiesStanza);
assertEquals("HUnit",pdss.get(0).getName());
assertEquals(CabalSyntax.SECTION_SOURCE_REPOSITORY,pdss.get(1).getType());
assertEquals("head",pdss.get(1).getName());
assertEquals("darcs",pdss.get(1).getProperties().get("type"));
assertEquals("http://darcs.haskell.org/cabal/",pdss.get(1).getProperties().get("location"));
assertEquals(CabalSyntax.SECTION_SOURCE_REPOSITORY,pdss.get(2).getType());
assertEquals("this",pdss.get(2).getName());
assertEquals("darcs",pdss.get(2).getProperties().get("type"));
assertEquals("http://darcs.haskell.org/cabal-branches/cabal-1.6/",pdss.get(2).getProperties().get("location"));
assertEquals("1.6.1",pdss.get(2).getProperties().get( "tag" ));
}
public void testParseExample4(){
String content3=getContent( "Example4.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
assertNotNull(pdss);
assertEquals(5,pdss.size());
assertTrue(pdss.get(0) instanceof PackagePropertiesStanza);
assertEquals("Test1",pdss.get(0).getName());
assertEquals(CabalSyntax.SECTION_FLAG,pdss.get(1).getType());
assertEquals("Debug",pdss.get(1).getName());
assertEquals("Enable debug support",pdss.get(1).getProperties().get( CabalSyntax.FIELD_DESCRIPTION ));
assertEquals("False",pdss.get(1).getProperties().get( CabalSyntax.FIELD_DEFAULT ));
assertEquals(CabalSyntax.SECTION_FLAG,pdss.get(2).getType());
assertEquals("WebFrontend",pdss.get(2).getName());
assertEquals(CabalSyntax.SECTION_LIBRARY,pdss.get(3).getType());
assertEquals(17,pdss.get(3).getStartLine());
assertEquals(32,pdss.get(3).getEndLine());
List<PackageDescriptionStanza> libraryChildren=pdss.get( 3 ).getStanzas();
assertEquals(2,libraryChildren.size());
assertEquals(CabalSyntax.SECTION_IF,libraryChildren.get(0).getType());
assertEquals(22,libraryChildren.get(0).getStartLine());
assertEquals(28,libraryChildren.get(0).getEndLine());
assertEquals(4,libraryChildren.get(0).getIndent());
assertEquals(2,libraryChildren.get(0).getStanzas().size());
assertEquals(CabalSyntax.SECTION_IF,libraryChildren.get(0).getStanzas().get(0).getType());
assertEquals(24,libraryChildren.get(0).getStanzas().get(0).getStartLine());
assertEquals(26,libraryChildren.get(0).getStanzas().get(0).getEndLine());
assertEquals(6,libraryChildren.get(0).getStanzas().get(0).getIndent());
assertEquals(CabalSyntax.SECTION_ELSE,libraryChildren.get(0).getStanzas().get(1).getType());
assertEquals(26,libraryChildren.get(0).getStanzas().get(1).getStartLine());
assertEquals(28,libraryChildren.get(0).getStanzas().get(1).getEndLine());
assertEquals(6,libraryChildren.get(0).getStanzas().get(1).getIndent());
assertEquals(CabalSyntax.SECTION_IF,libraryChildren.get(1).getType());
assertEquals(29,libraryChildren.get(1).getStartLine());
assertEquals(32,libraryChildren.get(1).getEndLine());
assertEquals(4,libraryChildren.get(1).getIndent());
//assertEquals(CabalSyntax.SECTION_IF,pdss.get(4).getType());
//assertEquals(CabalSyntax.SECTION_IF,pdss.get(5).getType());
assertEquals(CabalSyntax.SECTION_EXECUTABLE,pdss.get(4).getType());
//assertEquals(CabalSyntax.SECTION_IF,pdss.get(7).getType());
}
public void testParseExample5(){
String content3=getContent( "Example5.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
assertNotNull(pdss);
assertEquals(3,pdss.size());
assertTrue(pdss.get(0) instanceof PackagePropertiesStanza);
assertEquals("Test1",pdss.get(0).getName());
assertEquals(CabalSyntax.SECTION_FLAG,pdss.get(1).getType());
assertEquals("Debug",pdss.get(1).getName());
assertEquals("Enable debug support",pdss.get(1).getProperties().get( CabalSyntax.FIELD_DESCRIPTION ));
assertEquals("False",pdss.get(1).getProperties().get( CabalSyntax.FIELD_DEFAULT ));
assertEquals(CabalSyntax.SECTION_LIBRARY,pdss.get(2).getType());
assertEquals("Testing.Test1",pdss.get(2).getProperties().get( CabalSyntax.FIELD_EXPOSED_MODULES ));
assertEquals(1,pdss.get(2).getStanzas().size());
PackageDescriptionStanza pds1=pdss.get( 2 ).getStanzas().get( 0 );
assertEquals("-DDEBUG",pds1.getProperties().get( CabalSyntax.FIELD_GHC_OPTIONS ));
assertEquals(2,pds1.getStanzas().size());
assertEquals("\"-DDEBUG\"",pds1.getStanzas().get(0).getProperties().get( CabalSyntax.FIELD_CC_OPTIONS ));
assertEquals("\"-DNDEBUG\"",pds1.getStanzas().get(1).getProperties().get( CabalSyntax.FIELD_CC_OPTIONS ));
}
public void testSpaces(){
String content3=getContent( "Spaces.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
assertNotNull(pdss);
assertEquals(1,pdss.size());
assertTrue(pdss.get(0) instanceof PackagePropertiesStanza);
assertEquals("scion",pdss.get(0).getName());
assertEquals("Development",pdss.get(0).getProperties().get( CabalSyntax.FIELD_CATEGORY ));
String description="Scion is a Haskell library that aims to implement those parts of a"
+PlatformUtil.NL+"Haskell IDE which are independent of a particular front-end. Scion"
+PlatformUtil.NL+"is based on the GHC API and Cabal. It provides both a Haskell API and"
+PlatformUtil.NL+"a server for non-Haskell clients such as Emacs and Vim."
+PlatformUtil.NL
+PlatformUtil.NL+"See the homepage <http://code.google.com/p/scion-lib> and the README"
+PlatformUtil.NL+"<http://github.com/nominolo/scion/blob/master/README.markdown> for"
+PlatformUtil.NL+"more information.";
assertEquals(description,pdss.get(0).getProperties().get( CabalSyntax.FIELD_DESCRIPTION));
ValuePosition vp=pdss.get(0).getPositions().get(CabalSyntax.FIELD_DESCRIPTION );
assertEquals(12,vp.getInitialIndent());
assertEquals(8,vp.getStartLine());
assertEquals(17,vp.getEndLine());
String newDesc="First line"+PlatformUtil.NL+PlatformUtil.NL+"Line2";
RealValuePosition rvp=pdss.get(0).update( CabalSyntax.FIELD_DESCRIPTION, newDesc );
assertEquals(PlatformUtil.NL+" First line"+PlatformUtil.NL+" ."+PlatformUtil.NL+" Line2"+PlatformUtil.NL,rvp.getRealValue());
assertEquals(12,rvp.getInitialIndent());
assertEquals(8,rvp.getStartLine());
assertEquals(17,rvp.getEndLine());
String s=pd.dump();
//System.out.println(s);
assertTrue(s.contains( " First line"+PlatformUtil.NL+" ."+PlatformUtil.NL+" Line2" ) );
pd=PackageDescriptionLoader.load( s );
String data="docs/doc1.txt, "+PlatformUtil.NL+"docs/doc2.txt";
rvp=pdss.get(0).update( CabalSyntax.FIELD_DATA_FILES, data );
assertEquals(PlatformUtil.NL+CabalSyntax.FIELD_DATA_FILES+": "+PlatformUtil.NL+" docs/doc1.txt, "+PlatformUtil.NL+" docs/doc2.txt"+PlatformUtil.NL,rvp.getRealValue());
}
public void testList(){
String content3=getContent( "Example1.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
PackageDescriptionStanza pds=pdss.get(1);
pds.addToPropertyList( CabalSyntax.FIELD_EXPOSED_MODULES , "Test.New" );
String s=pds.getProperties().get( CabalSyntax.FIELD_EXPOSED_MODULES );
assertEquals("Test.HUnit.Base, Test.HUnit.Lang, Test.HUnit.Terminal,"+PlatformUtil.NL+"Test.HUnit.Text, Test.HUnit,"+PlatformUtil.NL+"Test.New",s);
pds.removeFromPropertyList( CabalSyntax.FIELD_EXPOSED_MODULES , "Test.HUnit.Base" );
s=pds.getProperties().get( CabalSyntax.FIELD_EXPOSED_MODULES );
assertEquals("Test.HUnit.Lang,"+PlatformUtil.NL+"Test.HUnit.Terminal,"+PlatformUtil.NL+"Test.HUnit.Text,"+PlatformUtil.NL+"Test.HUnit,"+PlatformUtil.NL+"Test.New",s);
pds.update( CabalSyntax.FIELD_EXPOSED_MODULES, null );
s=pds.getProperties().get( CabalSyntax.FIELD_EXPOSED_MODULES );
assertNull(s);
pds.addToPropertyList( CabalSyntax.FIELD_EXPOSED_MODULES , "Test.New" );
s=pds.getProperties().get( CabalSyntax.FIELD_EXPOSED_MODULES );
assertEquals("Test.New",s);
pds.update( CabalSyntax.FIELD_EXPOSED_MODULES,"Test.New,");
pds.addToPropertyList( CabalSyntax.FIELD_EXPOSED_MODULES , "Test.New2" );
s=pds.getProperties().get( CabalSyntax.FIELD_EXPOSED_MODULES );
assertEquals("Test.New,"+PlatformUtil.NL+"Test.New2",s);
pds.update( CabalSyntax.FIELD_EXPOSED_MODULES,"Test.New, ");
pds.addToPropertyList( CabalSyntax.FIELD_EXPOSED_MODULES , "Test.New2" );
s=pds.getProperties().get( CabalSyntax.FIELD_EXPOSED_MODULES );
assertEquals("Test.New, "+PlatformUtil.NL+"Test.New2",s);
pds.update( CabalSyntax.FIELD_EXPOSED_MODULES,"Test.New,"+PlatformUtil.NL);
pds.addToPropertyList( CabalSyntax.FIELD_EXPOSED_MODULES , "Test.New2" );
s=pds.getProperties().get( CabalSyntax.FIELD_EXPOSED_MODULES );
assertEquals("Test.New,"+PlatformUtil.NL+"Test.New2",s);
}
public void testSourceDirs(){
String content3=getContent( "Source.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
Map<String,List<PackageDescriptionStanza>> map=pd.getStanzasBySourceDir();
assertEquals(3,map.size());
assertTrue(map.containsKey( "lib1" ));
assertTrue(map.containsKey( "prog1" ));
assertTrue(map.containsKey( "prog2" ));
List<PackageDescriptionStanza> ls=map.get("lib1");
assertEquals(3,ls.size());
assertEquals(CabalSyntax.SECTION_LIBRARY,ls.get( 0 ).getType());
assertEquals("program1",ls.get( 1 ).getName());
assertEquals("program2",ls.get( 2 ).getName());
ls=map.get("prog1");
assertEquals(1,ls.size());
assertEquals("program1",ls.get( 0 ).getName());
ls=map.get("prog2");
assertEquals(1,ls.size());
assertEquals("program2",ls.get( 0 ).getName());
}
public void testEmptySourceDir(){
String content3=getContent( "Example1.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
Map<String,List<PackageDescriptionStanza>> map=pd.getStanzasBySourceDir();
assertEquals(1,map.size());
assertTrue(map.containsKey( "." ));
List<PackageDescriptionStanza> ls=map.get(".");
assertEquals(1,ls.size());
assertEquals(CabalSyntax.SECTION_LIBRARY,ls.get( 0 ).getType());
Collection<String> cs=ls.get( 0 ).getSourceDirs();
assertEquals(1,cs.size());
assertEquals(".",cs.iterator().next());
assertEquals(0,pd.getStanzas().get( 0 ).getSourceDirs().size());
}
public void testSetNull(){
String content3=getContent( "Example1.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
PackageDescriptionStanza pds=pd.getStanzas().get(1);
pds.update( CabalSyntax.FIELD_OTHER_MODULES, null );
assertNull(pds.getProperties().get( CabalSyntax.FIELD_OTHER_MODULES ));
pds.removeFromPropertyList( CabalSyntax.FIELD_OTHER_MODULES, "Test" );
assertNull(pds.getProperties().get( CabalSyntax.FIELD_OTHER_MODULES ));
}
public void testScion(){
String content3=getContent( "scion.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
Map<String,List<PackageDescriptionStanza>> m=pd.getStanzasBySourceDir();
assertEquals(2,m.size());
List<PackageDescriptionStanza> pdLib=m.get( "lib" );
assertNotNull(pdLib );
assertEquals(2,pdLib.size());
assertTrue(pdLib.contains(pd.getStanzas().get( 3 )));
assertTrue(pdLib.contains(pd.getStanzas().get( 4 )));
List<PackageDescriptionStanza> pdServer=m.get( "server" );
assertNotNull(pdServer );
assertEquals(1,pdServer.size());
assertTrue(pdServer.contains(pd.getStanzas().get( 4 )));
PackageDescriptionStanza pds=pd.getStanzas().get( 4 );
assertEquals(CabalSyntax.SECTION_EXECUTABLE,pds.getType());
String initial="Scion"
+PlatformUtil.NL+"Scion.Cabal"
+PlatformUtil.NL+"Scion.Inspect"
+PlatformUtil.NL+"Scion.Inspect.DefinitionSite"
+PlatformUtil.NL+"Scion.Session"
+PlatformUtil.NL+"Scion.Types"
+PlatformUtil.NL+"Scion.Types.Notes"
+PlatformUtil.NL+"Scion.Utils"
+PlatformUtil.NL+"Scion.Server.Commands"
+PlatformUtil.NL+"Scion.Server.ConnectionIO"
+PlatformUtil.NL+"Scion.Server.Generic"
+PlatformUtil.NL+"Scion.Server.Protocol";
assertEquals(initial,pds.getProperties().get( CabalSyntax.FIELD_OTHER_MODULES ));
ValuePosition vp=pds.getPositions().get( CabalSyntax.FIELD_OTHER_MODULES );
assertEquals(122,vp.getStartLine());
assertEquals(136,vp.getEndLine());
assertEquals(16,vp.getInitialIndent());
assertEquals(4,vp.getSubsequentIndent());
RealValuePosition rvp=pds.addToPropertyList( CabalSyntax.FIELD_OTHER_MODULES, "Scion.Test" );
assertEquals(122,rvp.getStartLine());
assertEquals(136,rvp.getEndLine());
assertEquals(16,rvp.getInitialIndent());
//assertEquals(4,rvp.getSubsequentIndent());
assertEquals(PlatformUtil.NL+" "+initial.replaceAll( "\\n", "\n " )+","+PlatformUtil.NL+" Scion.Test"+PlatformUtil.NL,rvp.getRealValue());
rvp=pds.addToPropertyList( CabalSyntax.FIELD_OTHER_MODULES, "Scion.Test" );
assertNull(rvp);
// assertEquals(122,rvp.getStartLine());
// assertEquals(134,rvp.getEndLine());
// assertEquals(16,rvp.getInitialIndent());
// //assertEquals(4,rvp.getSubsequentIndent());
// assertEquals(PlatformUtil.NL+" "+initial.replaceAll( "\\n", "\n " )+", Scion.Test"+PlatformUtil.NL,rvp.getRealValue());
rvp=pds.removeFromPropertyList( CabalSyntax.FIELD_OTHER_MODULES, "Scion.Test" );
assertEquals(122,rvp.getStartLine());
assertEquals(136,rvp.getEndLine());
assertEquals(16,rvp.getInitialIndent());
assertEquals(PlatformUtil.NL+" "+initial.replaceAll( "\\r\\n", ",\r\n " )+PlatformUtil.NL,rvp.getRealValue());
String bd=pds.getProperties().get( CabalSyntax.FIELD_BUILD_DEPENDS );
assertNotNull(bd);
assertTrue(bd.contains( "multiset == 0.1.*" ));
rvp=pds.removePrefixFromPropertyList( CabalSyntax.FIELD_BUILD_DEPENDS, "multiset" ,",");
assertFalse(rvp.getRealValue().contains("multiset") );
assertEquals(96,rvp.getStartLine());
}
public void testDependantPackages(){
String content3=getContent( "scion.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
PackageDescriptionStanza pds=pd.getStanzas().get( 3 );
assertEquals(CabalSyntax.SECTION_LIBRARY,pds.getType());
Collection<String> ss=pds.getDependentPackages();
Set<String> expected=new HashSet<>();
expected.addAll( Arrays.asList( "base" ,
"Cabal",
"containers",
"directory",
"filepath",
"ghc",
"ghc-paths",
"ghc-syb",
"hslogger",
"json",
"multiset",
"time",
"uniplate",
"list-tries",
"binary",
"array" ) );
assertEquals(expected,ss);
expected.remove("uniplate");
pds=pd.getStanzas().get( 4 );
assertEquals(CabalSyntax.SECTION_EXECUTABLE,pds.getType());
ss=pds.getDependentPackages();
assertEquals(expected,ss);
}
public void testCreateField(){
PackageDescription pd=PackageDescriptionLoader.load( "Name: newProject"+PlatformUtil.NL );
PackageDescriptionStanza pds=pd.getStanzas().get(0);
RealValuePosition rvp=pds.update( CabalSyntax.FIELD_AUTHOR , "JP Moresmau" );
assertNotNull(rvp);
assertEquals(1,rvp.getStartLine());
assertEquals(1,rvp.getEndLine());
assertEquals(CabalSyntax.FIELD_AUTHOR.toString()+": JP Moresmau"+PlatformUtil.NL,rvp.getRealValue());
}
public void testCreateFieldNoNL(){
PackageDescription pd=PackageDescriptionLoader.load( "Name: newProject" );
PackageDescriptionStanza pds=pd.getStanzas().get(0);
RealValuePosition rvp=pds.update( CabalSyntax.FIELD_AUTHOR , "JP Moresmau" );
assertNotNull(rvp);
assertEquals(0,rvp.getStartLine());
assertEquals(1,rvp.getEndLine());
assertEquals(16,rvp.getInitialIndent());
assertEquals(-1,rvp.getSubsequentIndent());
assertEquals(PlatformUtil.NL+CabalSyntax.FIELD_AUTHOR.toString()+": JP Moresmau"+PlatformUtil.NL,rvp.getRealValue());
}
public void testCreateFieldNoNLAfterMultipleLines(){
PackageDescription pd=PackageDescriptionLoader.load( "Name: newProject"+PlatformUtil.NL+"Synopsis: firstline"+PlatformUtil.NL+" secondline" );
PackageDescriptionStanza pds=pd.getStanzas().get(0);
RealValuePosition rvp=pds.update( CabalSyntax.FIELD_AUTHOR , "JP Moresmau" );
assertNotNull(rvp);
assertEquals(2,rvp.getStartLine());
assertEquals(3,rvp.getEndLine());
assertEquals(12,rvp.getInitialIndent());
assertEquals(-1,rvp.getSubsequentIndent());
assertEquals(PlatformUtil.NL+CabalSyntax.FIELD_AUTHOR.toString()+": JP Moresmau"+PlatformUtil.NL,rvp.getRealValue());
}
public void testCreateFieldFromEmpty(){
PackageDescription pd=PackageDescriptionLoader.load( "Name: newProject"+PlatformUtil.NL+"Author: "+PlatformUtil.NL+"Summary: Summ"+PlatformUtil.NL );
PackageDescriptionStanza pds=pd.getStanzas().get(0);
RealValuePosition rvp=pds.update( CabalSyntax.FIELD_AUTHOR , "JP Moresmau" );
assertNotNull(rvp);
assertEquals(1,rvp.getStartLine());
assertEquals(2,rvp.getEndLine());
assertEquals(8,rvp.getInitialIndent());
assertEquals(-1,rvp.getSubsequentIndent());
assertEquals("JP Moresmau"+PlatformUtil.NL,rvp.getRealValue());
}
public void testCreateFromScratch(){
PackageDescription pd=new PackageDescription( "newProject");
PackageDescriptionStanza pds=pd.getStanzas().get(0);
assertEquals("newProject",pds.getName());
assertEquals(0,pds.getStartLine());
assertEquals(1,pds.getEndLine());
RealValuePosition rvp=pds.update( CabalSyntax.FIELD_AUTHOR , "JP Moresmau" );
assertNotNull(rvp);
assertEquals(1,rvp.getStartLine());
assertEquals(1,rvp.getEndLine());
assertEquals(CabalSyntax.FIELD_AUTHOR.toString()+": JP Moresmau"+PlatformUtil.NL,rvp.getRealValue());
assertEquals(0,pds.getStartLine());
assertEquals(2,pds.getEndLine());
pds=pd.addStanza( CabalSyntax.SECTION_LIBRARY, null );
pds.update( CabalSyntax.FIELD_EXPOSED_MODULES, "Mod1" );
pds.update( CabalSyntax.FIELD_HS_SOURCE_DIRS, FileUtil.DEFAULT_FOLDER_SRC );
pds=pd.addStanza( CabalSyntax.SECTION_EXECUTABLE, "exe" );
pds.update( CabalSyntax.FIELD_MAIN_IS, "Main.hs" );
pds.update( CabalSyntax.FIELD_HS_SOURCE_DIRS, "src, exe" );
StringWriter sw=new StringWriter();
try {
pd.dump( sw );
String s=sw.toString();
//System.out.println(s);
PackageDescription pd2=PackageDescriptionLoader.load( s );
assertEquals(3,pd2.getStanzas().size());
pds=pd.getStanzas().get(0);
assertEquals("newProject",pds.getName());
assertEquals("JP Moresmau",pds.getProperties().get( CabalSyntax.FIELD_AUTHOR ));
pds=pd.getStanzas().get(1);
assertNull(pds.getName());
assertEquals(CabalSyntax.SECTION_LIBRARY,pds.getType());
assertEquals("Mod1",pds.getProperties().get( CabalSyntax.FIELD_EXPOSED_MODULES ));
assertEquals(FileUtil.DEFAULT_FOLDER_SRC,pds.getProperties().get( CabalSyntax.FIELD_HS_SOURCE_DIRS ));
pds=pd.getStanzas().get(2);
assertEquals("exe",pds.getName());
assertEquals(CabalSyntax.SECTION_EXECUTABLE,pds.getType());
assertEquals("Main.hs",pds.getProperties().get( CabalSyntax.FIELD_MAIN_IS ));
assertEquals("src, exe",pds.getProperties().get( CabalSyntax.FIELD_HS_SOURCE_DIRS ));
} catch (IOException ioe){
ioe.printStackTrace();
fail(ioe.getLocalizedMessage());
}
}
public void testJSON(){
String content3=getContent( "json.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
PackageDescriptionStanza pds=pd.getStanzas().get( 0 );
assertNull(pds.getType());
assertTrue(pds instanceof PackagePropertiesStanza);
assertEquals(0,pds.getIndent());
assertEquals("json",pds.getName());
pds=pd.getStanzas().get( 1 );
assertEquals(CabalSyntax.SECTION_FLAG,pds.getType());
assertEquals("split-base",pds.getName());
pds=pd.getStanzas().get( 6 );
assertEquals(CabalSyntax.SECTION_LIBRARY,pds.getType());
assertEquals(3,pds.getStanzas().size());
PackageDescriptionStanza pds1=pds.getStanzas().get(0 );
assertEquals("flag(split-base)",pds1.getName());
PackageDescriptionStanza pds2=pds1.getStanzas().get(1 );
assertNull(pds2.getName());
pds1=pds.getStanzas().get(1 );
assertNull(pds1.getName());
}
public void testModifyBuildDepends(){
String content3=getContent( "P1.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
PackageDescriptionStanza pds1=pd.getStanzas().get( 1 );
assertNull(pds1.getName());
RealValuePosition rvp=pds1.addToPropertyList( CabalSyntax.FIELD_BUILD_DEPENDS, "base" );
assertEquals(" build-depends: base"+PlatformUtil.NL,rvp.getRealValue());
assertEquals(8,rvp.getStartLine());
assertEquals(8,rvp.getEndLine());
PackageDescriptionStanza pds2=pd.getStanzas().get( 2 );
assertEquals("P1",pds2.getName());
rvp=pds2.removePrefixFromPropertyList( CabalSyntax.FIELD_BUILD_DEPENDS, "array","," );
assertEquals(14,rvp.getStartLine());
assertEquals(15,rvp.getEndLine());
assertEquals(0,rvp.getInitialIndent());
}
public void testModuleInclusionType(){
String content3=getContent( "Example4.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
PackageDescriptionStanza lib=pdss.get( 3 );
assertEquals(ModuleInclusionType.EXPOSED,lib.getModuleInclusionType( "Testing.Test1" ));
assertEquals(ModuleInclusionType.INCLUDED,lib.getModuleInclusionType( "Testing.WebStuff" ));
assertEquals(ModuleInclusionType.MISSING,lib.getModuleInclusionType( "T1" ));
PackageDescriptionStanza exe=pdss.get( 4 );
assertEquals(ModuleInclusionType.INCLUDED,exe.getModuleInclusionType( "Testing.Test1" ));
assertEquals(ModuleInclusionType.MAIN,exe.getModuleInclusionType( "T1" ));
assertEquals(ModuleInclusionType.MISSING,exe.getModuleInclusionType( "Testing.Test2" ));
}
public void testTestSuite(){
String content3=getContent( "TestSuite.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
PackageDescriptionStanza ts=pdss.get( 2 );
assertEquals(CabalSyntax.SECTION_TESTSUITE,ts.getType());
assertEquals("exitcode-stdio-1.0",ts.getProperties().get( CabalSyntax.FIELD_TYPE ));
}
public void testTestSuitePartial(){
String content3=getContent( "TestSuiteOnly.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
PackageDescriptionStanza ts=pdss.get( 1 );
assertEquals(CabalSyntax.SECTION_TESTSUITE,ts.getType());
assertEquals("exitcode-stdio-1.0",ts.getProperties().get( CabalSyntax.FIELD_TYPE ));
ts=PackageDescriptionLoader.loadStanza( content3 );
assertEquals(CabalSyntax.SECTION_TESTSUITE,ts.getType());
assertEquals("exitcode-stdio-1.0",ts.getProperties().get( CabalSyntax.FIELD_TYPE ));
}
public void testIfElse(){
String content3=getContent( "IfElse.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
assertEquals(3,pdss.size());
assertEquals(CabalSyntax.SECTION_LIBRARY,pdss.get(1).getType());
assertNull(pdss.get(1).getName());
assertEquals(2,pdss.get(1).getIndent());
assertEquals(CabalSyntax.SECTION_EXECUTABLE,pdss.get(2).getType());
assertEquals("ifelse",pdss.get(2).getName());
assertEquals(2,pdss.get(2).getIndent());
}
public void testRemove(){
String content3=getContent( "P1.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
assertEquals(4,pdss.size());
assertEquals(CabalSyntax.SECTION_EXECUTABLE,pdss.get(2).getType());
assertEquals("P1",pdss.get(2).getName());
assertEquals(2,pdss.get(2).getIndent());
assertEquals(5,pdss.get(2).getProperties().size());
RealValuePosition vp = pdss.get(2).update( CabalSyntax.FIELD_MAIN_IS, "" );
assertEquals("",vp.getRealValue());
assertEquals(0,vp.getInitialIndent());
assertEquals(11,vp.getStartLine());
assertEquals(12,vp.getEndLine());
assertEquals(4,pdss.get(2).getProperties().size());
TestDocument doc=new TestDocument(content3);
//System.out.println(doc.get());
vp.updateDocument(doc );
//System.out.println(doc.get());
pd=PackageDescriptionLoader.load( doc.get() );
pdss=pd.getStanzas();
assertEquals(4,pdss.size());
assertEquals(CabalSyntax.SECTION_EXECUTABLE,pdss.get(2).getType());
assertEquals("P1",pdss.get(2).getName());
assertEquals(2,pdss.get(2).getIndent());
assertEquals(4,pdss.get(2).getProperties().size());
}
public void testMultipleUpdate() throws IOException{
String content3=getContent( "P1.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
assertEquals(4,pdss.size());
PackageDescriptionStanza pds=pdss.get(2);
pds.update( CabalSyntax.FIELD_EXTENSIONS, "UndecidableInstances,"+PlatformUtil.NL+"OverlappingInstances" );
pds.update( CabalSyntax.FIELD_BUILD_DEPENDS,"array,"+PlatformUtil.NL+"random");
StringWriter sw=new StringWriter();
pd.dump(sw );
sw.flush();
String s=sw.toString();
//System.out.println(s);
pd=PackageDescriptionLoader.load( s );
pdss=pd.getStanzas();
assertEquals(4,pdss.size());
pds=pdss.get(2);
String val=pds.getProperties().get(CabalSyntax.FIELD_BUILD_DEPENDS);
List<String> ls=PackageDescriptionLoader.parseList( val );
assertEquals(2,ls.size());
assertTrue(ls.contains( "array" ));
assertTrue(ls.contains( "random" ));
val=pds.getProperties().get(CabalSyntax.FIELD_EXTENSIONS);
ls=PackageDescriptionLoader.parseList( val );
assertEquals(2,ls.size());
assertTrue(ls.contains( "UndecidableInstances" ));
assertTrue(ls.contains( "OverlappingInstances" ));
}
public void testMultipleDocUpdate() throws IOException{
String content3=getContent( "P1.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content3 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
assertEquals(4,pdss.size());
PackageDescriptionStanza pds=pdss.get(2);
TestDocument doc=new TestDocument( content3 );
RealValuePosition rvp1=pds.update( CabalSyntax.FIELD_EXTENSIONS, "UndecidableInstances,"+PlatformUtil.NL+"OverlappingInstances" );
rvp1.updateDocument( doc );
RealValuePosition rvp2=pds.update( CabalSyntax.FIELD_BUILD_DEPENDS,"array,"+PlatformUtil.NL+"random");
rvp2.updateDocument( doc );
String s=doc.get();
//System.out.println(s);
pd=PackageDescriptionLoader.load( s );
pdss=pd.getStanzas();
assertEquals(4,pdss.size());
pds=pdss.get(2);
String val=pds.getProperties().get(CabalSyntax.FIELD_BUILD_DEPENDS);
List<String> ls=PackageDescriptionLoader.parseList( val );
assertEquals(2,ls.size());
assertTrue(ls.contains( "array" ));
assertTrue(ls.contains( "random" ));
val=pds.getProperties().get(CabalSyntax.FIELD_EXTENSIONS);
ls=PackageDescriptionLoader.parseList( val );
assertEquals(2,ls.size());
assertTrue(ls.contains( "UndecidableInstances" ));
assertTrue(ls.contains( "OverlappingInstances" ));
}
public void testParseDumpExample1KeepCase(){
String content1=getContent( "Example1.cabal" );
PackageDescription pd=PackageDescriptionLoader.load( content1 );
String content2=pd.dump();
assertEquals(content1.substring(0,5),content2.substring(0,5));
assertTrue(content2,content2.contains("Library"));
}
public void testRemoveEntry(){
String content1="name: P1"+PlatformUtil.NL+
"version: 0.1"+PlatformUtil.NL+
"cabal-version: >= 1.2"+PlatformUtil.NL+
"author: JP2"+PlatformUtil.NL+
"build-type: Simple"+PlatformUtil.NL+
""+PlatformUtil.NL+
"executable P1"+PlatformUtil.NL+
" main-is: Main.hs"+PlatformUtil.NL+
" ghc-options: -O1 -fglasgow-exts -Wall"+PlatformUtil.NL+
" extensions: OverlappingInstances"+PlatformUtil.NL+
" build-depends: "+PlatformUtil.NL+
" multiset >= 0.1 && < 0.3,"+PlatformUtil.NL+
" time, base"+PlatformUtil.NL+
" other-modules: "+PlatformUtil.NL+
" M2,"+PlatformUtil.NL+
" M4"+PlatformUtil.NL;
PackageDescription pd=PackageDescriptionLoader.load( content1 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
assertEquals(2,pdss.size());
PackageDescriptionStanza pds=pdss.get(1);
RealValuePosition rvp=pds.removeFromPropertyList( CabalSyntax.FIELD_EXTENSIONS, "OverlappingInstances" );
TestDocument doc=new TestDocument( content1 );
rvp.updateDocument( doc );
String content2="name: P1"+PlatformUtil.NL+
"version: 0.1"+PlatformUtil.NL+
"cabal-version: >= 1.2"+PlatformUtil.NL+
"author: JP2"+PlatformUtil.NL+
"build-type: Simple"+PlatformUtil.NL+
""+PlatformUtil.NL+
"executable P1"+PlatformUtil.NL+
" main-is: Main.hs"+PlatformUtil.NL+
" ghc-options: -O1 -fglasgow-exts -Wall"+PlatformUtil.NL+
" build-depends: "+PlatformUtil.NL+
" multiset >= 0.1 && < 0.3,"+PlatformUtil.NL+
" time, base"+PlatformUtil.NL+
" other-modules: "+PlatformUtil.NL+
" M2,"+PlatformUtil.NL+
" M4"+PlatformUtil.NL;
assertEquals(content2,doc.get());
rvp=pds.removeFromPropertyList( CabalSyntax.FIELD_BUILD_DEPENDS, "time" );
rvp.updateDocument( doc );
String content3="name: P1"+PlatformUtil.NL+
"version: 0.1"+PlatformUtil.NL+
"cabal-version: >= 1.2"+PlatformUtil.NL+
"author: JP2"+PlatformUtil.NL+
"build-type: Simple"+PlatformUtil.NL+
""+PlatformUtil.NL+
"executable P1"+PlatformUtil.NL+
" main-is: Main.hs"+PlatformUtil.NL+
" ghc-options: -O1 -fglasgow-exts -Wall"+PlatformUtil.NL+
" build-depends: "+PlatformUtil.NL+
" multiset >= 0.1 && < 0.3,"+PlatformUtil.NL+
" base"+PlatformUtil.NL+
" other-modules: "+PlatformUtil.NL+
" M2,"+PlatformUtil.NL+
" M4"+PlatformUtil.NL;
assertEquals(content3,doc.get());
}
public void testRemoveEntryBySettingEmpty(){
String content1="name: P1"+PlatformUtil.NL+
"version: 0.1"+PlatformUtil.NL+
"cabal-version: >= 1.2"+PlatformUtil.NL+
"author: JP2"+PlatformUtil.NL+
"build-type: Simple"+PlatformUtil.NL+
""+PlatformUtil.NL+
"executable P1"+PlatformUtil.NL+
" main-is: Main.hs"+PlatformUtil.NL+
" ghc-options: -O1 -fglasgow-exts -Wall"+PlatformUtil.NL+
" extensions: OverlappingInstances"+PlatformUtil.NL+
" build-depends: "+PlatformUtil.NL+
" multiset >= 0.1 && < 0.3,"+PlatformUtil.NL+
" time, base"+PlatformUtil.NL+
" other-modules: "+PlatformUtil.NL+
" M2,"+PlatformUtil.NL+
" M4"+PlatformUtil.NL;
PackageDescription pd=PackageDescriptionLoader.load( content1 );
List<PackageDescriptionStanza> pdss=pd.getStanzas();
assertEquals(2,pdss.size());
PackageDescriptionStanza pds=pdss.get(1);
RealValuePosition rvp=pds.update( CabalSyntax.FIELD_EXTENSIONS, "" );
TestDocument doc=new TestDocument( content1 );
rvp.updateDocument( doc );
String content2="name: P1"+PlatformUtil.NL+
"version: 0.1"+PlatformUtil.NL+
"cabal-version: >= 1.2"+PlatformUtil.NL+
"author: JP2"+PlatformUtil.NL+
"build-type: Simple"+PlatformUtil.NL+
""+PlatformUtil.NL+
"executable P1"+PlatformUtil.NL+
" main-is: Main.hs"+PlatformUtil.NL+
" ghc-options: -O1 -fglasgow-exts -Wall"+PlatformUtil.NL+
" build-depends: "+PlatformUtil.NL+
" multiset >= 0.1 && < 0.3,"+PlatformUtil.NL+
" time, base"+PlatformUtil.NL+
" other-modules: "+PlatformUtil.NL+
" M2,"+PlatformUtil.NL+
" M4"+PlatformUtil.NL;
assertEquals(content2,doc.get());
}
}