/**
* Copyright (c) 2009-2011, The HATS Consortium. All rights reserved.
* This file is licensed under the terms of the Modified BSD License.
*/
package abs.frontend.delta;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Map;
import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.*;
import abs.frontend.ast.*;
import abs.frontend.typechecker.*;
public class AddImportsTest extends DeltaTest {
@Test
public void addImport() throws DeltaModellingException {
Model model = assertParseOk(
"module Exporter; export *;"
+ "interface I {}"
+ "interface J {}"
+ "module Exporter2; export *;"
+ "interface K {}"
+ "module M;"
+ "class C {}"
+ "delta D; uses M;"
+ "adds import Exporter.I;"
+ "adds import J from Exporter;"
+ "adds import * from Exporter2;"
+ "modifies class C { adds Exporter.I field1; } "
+ "modifies class C { adds J field2; } "
+ "modifies class C { adds K field3; } "
);
ClassDecl cls = (ClassDecl) findDecl(model, "M", "C");
DeltaDecl delta = findDelta(model, "D");
model.applyDeltas(new ArrayList<DeltaDecl>(Arrays.asList(delta)));
ModuleDecl clsmodule = cls.getModuleDecl();
Map<KindedName, ResolvedName> clsVisibleSymbols = clsmodule.getVisibleNames();
KindedName symbol1 = new KindedName(KindedName.Kind.TYPE_DECL, "Exporter.I");
KindedName symbol2 = new KindedName(KindedName.Kind.TYPE_DECL, "J");
KindedName symbol3 = new KindedName(KindedName.Kind.TYPE_DECL, "K");
assertTrue(clsVisibleSymbols.containsKey(symbol1));
assertTrue(clsVisibleSymbols.containsKey(symbol2));
assertTrue(clsVisibleSymbols.containsKey(symbol3));
}
@Test
public void addExport() throws DeltaModellingException {
Model model = assertParseOk(
"module Exporter;"
+ "interface I {}"
+ "module M;"
+ "class C {}"
+ "delta D1; uses Exporter;"
+ "adds export I;"
+ "delta D2; uses M;"
+ "adds import Exporter.I;"
+ "modifies class C { adds Exporter.I field1; } "
);
ClassDecl cls = (ClassDecl) findDecl(model, "M", "C");
DeltaDecl d1 = findDelta(model, "D1");
DeltaDecl d2 = findDelta(model, "D2");
model.applyDeltas(new ArrayList<DeltaDecl>(Arrays.asList(d1,d2)));
ModuleDecl clsmodule = cls.getModuleDecl();
Map<KindedName, ResolvedName> clsVisibleSymbols = clsmodule.getVisibleNames();
KindedName symbol1 = new KindedName(KindedName.Kind.TYPE_DECL, "Exporter.I");
assertTrue(clsVisibleSymbols.containsKey(symbol1));
}
}