use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method confirmTwinsAreCreated.
@Test
public void confirmTwinsAreCreated() {
GlobalNamespace namespace = parse(lines(//
"let A;", // A will have twin refs here
"const B = A = 3;"));
Name nameA = namespace.getOwnSlot("A");
// first ref is declaration of A
// second is the SET twin
Ref setTwinRef = Iterables.get(nameA.getRefs(), 1);
// third is the GET twin
Ref getTwinRef = Iterables.get(nameA.getRefs(), 2);
// confirm that they start as twins
assertThat(setTwinRef.getTwin()).isEqualTo(getTwinRef);
assertThat(getTwinRef.getTwin()).isEqualTo(setTwinRef);
Node oldNode = getTwinRef.getNode();
assertThat(setTwinRef.getNode()).isEqualTo(oldNode);
// confirm that they are both associated with oldNode
assertThat(nameA.getRefsForNode(oldNode)).containsExactly(setTwinRef, getTwinRef);
}
use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method googModuleLevelQualifiedNamesAreCaptured.
@Test
public void googModuleLevelQualifiedNamesAreCaptured() {
GlobalNamespace namespace = parseAndGatherModuleData("goog.module('m'); class Foo {} Foo.Bar = 0;");
ModuleMetadata metadata = lastCompiler.getModuleMetadataMap().getModulesByGoogNamespace().get("m");
Name x = namespace.getNameFromModule(metadata, "Foo.Bar");
assertThat(x).isNotNull();
assertThat(x.getDeclaration()).isNotNull();
}
use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method updateRefNodeMovesRefFromOldNodeToNewNode.
@Test
public void updateRefNodeMovesRefFromOldNodeToNewNode() {
GlobalNamespace namespace = parse("const A = 3;");
Name nameA = namespace.getOwnSlot("A");
Ref refA = nameA.getFirstRef();
Node oldNode = refA.getNode();
Node newNode = IR.name("A");
assertThat(nameA.getRefsForNode(oldNode)).containsExactly(refA);
nameA.updateRefNode(refA, newNode);
assertThat(refA.getNode()).isEqualTo(newNode);
assertThat(nameA.getRefsForNode(oldNode)).isEmpty();
assertThat(nameA.getRefsForNode(newNode)).containsExactly(refA);
}
use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method testObjectPatternAliasInAssign.
@Test
public void testObjectPatternAliasInAssign() {
GlobalNamespace namespace = parse("const ns = {a: 3}; const x = {}; ({a: x.y} = ns);");
Name bar = namespace.getSlot("ns");
assertThat(bar.getGlobalSets()).isEqualTo(1);
assertThat(bar.getAliasingGets()).isEqualTo(1);
Name nsA = namespace.getSlot("ns.a");
assertThat(nsA.getGlobalSets()).isEqualTo(1);
assertThat(nsA.getAliasingGets()).isEqualTo(1);
Name xY = namespace.getSlot("x.y");
// TODO(b/117673791): this should be 1
assertThat(xY.getGlobalSets()).isEqualTo(0);
}
use of com.google.javascript.jscomp.GlobalNamespace.Name in project closure-compiler by google.
the class GlobalNamespaceTest method testSimpleSubclassingRefCollection.
@Test
public void testSimpleSubclassingRefCollection() {
GlobalNamespace namespace = parse(lines(//
"class Superclass {}", "class Subclass extends Superclass {}"));
Name superclass = namespace.getOwnSlot("Superclass");
assertThat(superclass.getRefs()).hasSize(2);
assertThat(superclass.getSubclassingGets()).isEqualTo(1);
}
Aggregations