diff --git a/src/analysis/typepal/Collector.rsc b/src/analysis/typepal/Collector.rsc index 872093cf..8c7bab17 100644 --- a/src/analysis/typepal/Collector.rsc +++ b/src/analysis/typepal/Collector.rsc @@ -384,6 +384,7 @@ Collector newCollector(str modelName, map[str,Tree] namedTrees, TypePalConfig co void collector_useViaType(Tree container, Tree selector, set[IdRole] idRolesSel){ if(building){ + collector_use(selector, idRolesSel); name = normalizeName(""); selectorLoc = getLoc(selector); containerLoc = getLoc(container); diff --git a/src/examples/fwjava/Test.rsc b/src/examples/fwjava/Test.rsc index 741791e9..b5962d92 100644 --- a/src/examples/fwjava/Test.rsc +++ b/src/examples/fwjava/Test.rsc @@ -41,4 +41,28 @@ test bool fwjTests() { runName = "FwJava"); } +test bool fwjUseDefTests1() = checkUseDefsOf("cpt"); +test bool fwjUseDefTests2() = checkUseDefsOf("pair"); +test bool fwjUseDefTests3() = checkUseDefsOf("tmp"); + +private bool checkUseDefsOf(str name) { + tm = fwjTModelFromName(name, false); + assert size(tm.useDef) > 0 : "Expected: \>0 use-defs. Actual: ."; + + for ( <- tm.useDef) { + uses = [u | u: use(_, _, lUse, _, _) <- tm.uses]; + assert [] != uses : "Expected: Use at . Actual: No use."; + + defs = [d | d: <_, _, _, _, lDef, _> <- tm.defines]; + assert [] != defs : "Expected: Def at . Actual: No def."; + + for (u <- uses, d <- defs) { + assert u.id == d.id : "Expected: Equal `id`. Actual: `` (use) vs. `` (def)"; + assert u.orgId == d.orgId : "Expected: Equal `orgId`. Actual: `` (use) vs. `` (def)"; + } + } + + return true; +} + value main() = fwjTests(); \ No newline at end of file