Skip to content

Commit b8e2f0e

Browse files
brad4dcopybara-github
authored andcommitted
ExpressionDecomposerTest: test the maybeExposeExpression() method
Clients of ExpressionDecomposer should call maybeExposeExpression() instead of exposeExpression, so the unit tests should do the same. PiperOrigin-RevId: 321806727
1 parent 0444c83 commit b8e2f0e

File tree

1 file changed

+54
-57
lines changed

1 file changed

+54
-57
lines changed

test/com/google/javascript/jscomp/ExpressionDecomposerTest.java

Lines changed: 54 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,13 @@
4949
public final class ExpressionDecomposerTest {
5050
private boolean allowMethodCallDecomposing;
5151
private final Set<String> knownConstants = new HashSet<>();
52-
// How many times to run `moveExpression` or `exposeExpression`.
53-
private int times;
5452
// Whether we should run type checking and test the type information in the output expression
5553
private boolean shouldTestTypes;
5654

5755
@Before
5856
public void setUp() {
5957
allowMethodCallDecomposing = false;
6058
knownConstants.clear();
61-
times = 1;
6259
shouldTestTypes = true;
6360
}
6461

@@ -650,7 +647,8 @@ public void exposeExpressionOptionalGetElem() {
650647
lines(
651648
"var temp$jscomp$1 = x;",
652649
"if (temp$jscomp$1 != null) {",
653-
" var temp$jscomp$0 = temp$jscomp$1[foo()];",
650+
" var temp_const$jscomp$2 = temp$jscomp$1;",
651+
" var temp$jscomp$0 = temp_const$jscomp$2[foo()];",
654652
"}",
655653
"a = temp$jscomp$0"));
656654
}
@@ -663,7 +661,8 @@ public void exposeExpressionOptionalCallChain() {
663661
lines(
664662
"var temp$jscomp$1 = x;",
665663
"if (temp$jscomp$1 != null) {",
666-
" var temp$jscomp$0 = temp$jscomp$1(a).y.z[foo()];",
664+
" var temp_const$jscomp$2 = temp$jscomp$1(a).y.z;",
665+
" var temp$jscomp$0 = temp_const$jscomp$2[foo()];",
667666
"}",
668667
"a = temp$jscomp$0"));
669668
}
@@ -676,7 +675,8 @@ public void exposeExpressionOptionalCallChainNoResult() {
676675
lines(
677676
"var temp$jscomp$0 = x;",
678677
"if (temp$jscomp$0 != null) {",
679-
" temp$jscomp$0(a)[y].z[foo()];",
678+
" var temp_const$jscomp$1 = temp$jscomp$0(a)[y].z;",
679+
" temp_const$jscomp$1[foo()];",
680680
"}"));
681681
}
682682

@@ -688,7 +688,8 @@ public void exposeExpressionOptionalGetPropChain() {
688688
lines(
689689
"var temp$jscomp$1 = x;",
690690
"if (temp$jscomp$1 != null) {",
691-
" var temp$jscomp$0 = temp$jscomp$1.y.z[foo()];",
691+
" var temp_const$jscomp$2 = temp$jscomp$1.y.z;",
692+
" var temp$jscomp$0 = temp_const$jscomp$2[foo()];",
692693
"}",
693694
"a = temp$jscomp$0"));
694695
}
@@ -701,19 +702,21 @@ public void exposeExpressionOptionalGetPropChainNoResult() {
701702
lines(
702703
"var temp$jscomp$0 = x;",
703704
"if (temp$jscomp$0 != null) {",
704-
" temp$jscomp$0.y.z[foo()];",
705+
" var temp_const$jscomp$1 = temp$jscomp$0.y.z;",
706+
" temp_const$jscomp$1[foo()];",
705707
"}"));
706708
}
707709

708710
@Test
709711
public void exposeExpressionOptionalGetElemChain() {
710712
helperExposeExpression(
711-
"a = x?.[y].z[foo()]",
713+
"a = x?.[y].z[foo()];",
712714
"foo",
713715
lines(
714716
"var temp$jscomp$1 = x;",
715717
"if (temp$jscomp$1 != null) {",
716-
" var temp$jscomp$0 = temp$jscomp$1[y].z[foo()];",
718+
" var temp_const$jscomp$2 = temp$jscomp$1[y].z;",
719+
" var temp$jscomp$0 = temp_const$jscomp$2[foo()];",
717720
"}",
718721
"a = temp$jscomp$0"));
719722
}
@@ -726,7 +729,8 @@ public void exposeExpressionOptionalGetElemChainNoResult() {
726729
lines(
727730
"var temp$jscomp$0 = x;",
728731
"if (temp$jscomp$0 != null) {",
729-
" temp$jscomp$0[y].z[foo()];",
732+
" var temp_const$jscomp$1 = temp$jscomp$0[y].z;",
733+
" temp_const$jscomp$1[foo()];",
730734
"}"));
731735
}
732736

@@ -739,7 +743,9 @@ public void exposeExpressionOptionalGetElemWithCall() {
739743
lines(
740744
"var temp$jscomp$1 = x.y;",
741745
"if (temp$jscomp$1 != null) {",
742-
" var temp$jscomp$0 = temp$jscomp$1[z](foo())",
746+
" var temp_const$jscomp$3 = temp$jscomp$1;",
747+
" var temp_const$jscomp$2 = temp_const$jscomp$3[z];",
748+
" var temp$jscomp$0 = temp_const$jscomp$2.call(temp_const$jscomp$3, foo());",
743749
"}",
744750
"a = temp$jscomp$0"));
745751
}
@@ -754,7 +760,9 @@ public void exposeExpressionOptionalGetElemWithCallTwiceRewriteCall() {
754760
lines(
755761
"var temp$jscomp$1 = x.y;",
756762
"if (temp$jscomp$1 != null) {",
757-
" var temp$jscomp$0 = temp$jscomp$1[z](foo())",
763+
" var temp_const$jscomp$3 = temp$jscomp$1;",
764+
" var temp_const$jscomp$2 = temp_const$jscomp$3[z];",
765+
" var temp$jscomp$0 = temp_const$jscomp$2.call(temp_const$jscomp$3, foo());",
758766
"}",
759767
"a = temp$jscomp$0");
760768
String secondTimeExpose =
@@ -769,7 +777,6 @@ public void exposeExpressionOptionalGetElemWithCallTwiceRewriteCall() {
769777

770778
helperExposeExpression(originalSource, "foo", firstTimeExpose);
771779

772-
times = 2;
773780
helperExposeExpression(originalSource, "foo", secondTimeExpose);
774781
}
775782

@@ -783,7 +790,11 @@ public void exposeExpressionGetElemWithOptionalCall() {
783790
"var temp$jscomp$2 = x.y;",
784791
"var temp$jscomp$1 = temp$jscomp$2[z];",
785792
"if(temp$jscomp$1 != null) {",
786-
" var temp$jscomp$0 = temp$jscomp$1.call(temp$jscomp$2, foo(), d);",
793+
" var temp_const$jscomp$5 = temp$jscomp$1;",
794+
" var temp_const$jscomp$4 = temp_const$jscomp$5.call;",
795+
" var temp_const$jscomp$3 = temp$jscomp$2;",
796+
" var temp$jscomp$0 = ",
797+
" temp_const$jscomp$4.call(temp_const$jscomp$5, temp_const$jscomp$3, foo(), d);",
787798
"}",
788799
"a = temp$jscomp$0"));
789800
}
@@ -797,7 +808,9 @@ public void exposeExpressionOptionalGetPropWithCall() {
797808
lines(
798809
"var temp$jscomp$1 = x.y;",
799810
"if (temp$jscomp$1 != null) {",
800-
" var temp$jscomp$0 = temp$jscomp$1.z(foo(1));",
811+
" var temp_const$jscomp$3 = temp$jscomp$1;",
812+
" var temp_const$jscomp$2 = temp_const$jscomp$3.z;",
813+
" var temp$jscomp$0 = temp_const$jscomp$2.call(temp_const$jscomp$3, foo(1));",
801814
"}",
802815
"a = temp$jscomp$0"));
803816
}
@@ -806,29 +819,17 @@ public void exposeExpressionOptionalGetPropWithCall() {
806819
public void exposeExpressionOptionalGetPropWithCallTwiceRewriteCall() {
807820
allowMethodCallDecomposing = true;
808821

809-
// 2 calls to exposeExpression() are needed to get full exposure
810-
String originalSource = "a = x.y?.z(foo(1))";
811-
String firstTimeExpose =
812-
lines(
813-
"var temp$jscomp$1 = x.y;",
814-
"if (temp$jscomp$1 != null) {",
815-
" var temp$jscomp$0 = temp$jscomp$1.z(foo(1));",
816-
"}",
817-
"a = temp$jscomp$0");
818-
String secondTimeExpose =
822+
helperExposeExpression(
823+
"a = x.y?.z(foo(1))",
824+
"foo",
819825
lines(
820826
"var temp$jscomp$1 = x.y;",
821827
"if (temp$jscomp$1 != null) {",
822828
" var temp_const$jscomp$3 = temp$jscomp$1;",
823829
" var temp_const$jscomp$2 = temp_const$jscomp$3.z;",
824830
" var temp$jscomp$0 = temp_const$jscomp$2.call(temp_const$jscomp$3, foo(1));",
825831
"}",
826-
"a = temp$jscomp$0");
827-
828-
helperExposeExpression(originalSource, "foo", firstTimeExpose);
829-
830-
times = 2;
831-
helperExposeExpression(originalSource, "foo", secondTimeExpose);
832+
"a = temp$jscomp$0"));
832833
}
833834

834835
@Test
@@ -841,7 +842,11 @@ public void exposeExpressionGetPropWithOptionalCall() {
841842
"var temp$jscomp$2 = x.y;",
842843
"var temp$jscomp$1 = temp$jscomp$2.z;",
843844
"if (temp$jscomp$1 != null) {",
844-
" var temp$jscomp$0 = temp$jscomp$1.call(temp$jscomp$2, foo())",
845+
" var temp_const$jscomp$5 = temp$jscomp$1;",
846+
" var temp_const$jscomp$4 = temp_const$jscomp$5.call;",
847+
" var temp_const$jscomp$3 = temp$jscomp$2;",
848+
" var temp$jscomp$0 =",
849+
" temp_const$jscomp$4.call(temp_const$jscomp$5, temp_const$jscomp$3, foo());",
845850
"}",
846851
"a = temp$jscomp$0"));
847852
}
@@ -855,7 +860,9 @@ public void exposeExpressionNewOptChainAfterRewriteCall() {
855860
lines(
856861
"var temp$jscomp$1 = x;",
857862
"if (temp$jscomp$1 != null) {",
858-
" var temp$jscomp$0 = temp$jscomp$1.y(foo())",
863+
" var temp_const$jscomp$3 = temp$jscomp$1;",
864+
" var temp_const$jscomp$2 = temp_const$jscomp$3.y;",
865+
" var temp$jscomp$0 = temp_const$jscomp$2.call(temp_const$jscomp$3, foo());",
859866
"}",
860867
"a = temp$jscomp$0?.z.q"));
861868
}
@@ -869,7 +876,8 @@ public void exposeExpressionNewOptChainAfter() {
869876
lines(
870877
"var temp$jscomp$1 = x;",
871878
"if (temp$jscomp$1 != null) {",
872-
" var temp$jscomp$0 = temp$jscomp$1.y[foo()]",
879+
" var temp_const$jscomp$2 = temp$jscomp$1.y;",
880+
" var temp$jscomp$0 = temp_const$jscomp$2[foo()];",
873881
"}",
874882
"a = temp$jscomp$0?.z.q"));
875883
}
@@ -883,7 +891,8 @@ public void exposeExpressionNotImmediatelyFollowedByNewChain() {
883891
lines(
884892
"var temp$jscomp$1 = x;",
885893
"if (temp$jscomp$1 != null) {",
886-
" var temp$jscomp$0 = temp$jscomp$1.y[foo()].z.q",
894+
" var temp_const$jscomp$2 = temp$jscomp$1.y;",
895+
" var temp$jscomp$0 = temp_const$jscomp$2[foo()].z.q;",
887896
"}",
888897
"a = temp$jscomp$0?.b.c"));
889898
}
@@ -897,7 +906,8 @@ public void exposeExpressionBreakingOutOfOptionalChain() {
897906
lines(
898907
"var temp$jscomp$1 = x;",
899908
"if (temp$jscomp$1 != null) {",
900-
" var temp$jscomp$0 = temp$jscomp$1.y[foo()]",
909+
" var temp_const$jscomp$2 = temp$jscomp$1.y;",
910+
" var temp$jscomp$0 = temp_const$jscomp$2[foo()];",
901911
"}",
902912
"a = temp$jscomp$0.z.q"));
903913
}
@@ -911,7 +921,9 @@ public void exposeExpressionAfterTwoOptionalChains() {
911921
lines(
912922
"var temp$jscomp$1 = x?.y.z;",
913923
"if (temp$jscomp$1 != null) {",
914-
" var temp$jscomp$0 = temp$jscomp$1.q(foo());",
924+
" var temp_const$jscomp$3 = temp$jscomp$1;",
925+
" var temp_const$jscomp$2 = temp_const$jscomp$3.q;",
926+
" var temp$jscomp$0 = temp_const$jscomp$2.call(temp_const$jscomp$3, foo());",
915927
"}",
916928
"a = temp$jscomp$0"));
917929
}
@@ -1227,11 +1239,6 @@ public void testExposeYieldExpression3() {
12271239
" return temp_const$jscomp$0.call(temp_const$jscomp$1, yield 1);",
12281240
"}");
12291241
helperExposeExpression(before, "yield", after);
1230-
1231-
// Check that we don't decompose again, which would result in an infinite loop when inlining
1232-
// functions.
1233-
times = 2;
1234-
helperExposeExpression(before, "yield", after);
12351242
}
12361243

12371244
@Test
@@ -1532,7 +1539,6 @@ public void testMoveSuperCall_noSideEffects() {
15321539

15331540
@Test
15341541
public void testExposeSuperCall() {
1535-
times = 2;
15361542
helperExposeExpression(
15371543
"class A { constructor() { super(goo(), foo()) } }",
15381544
"foo",
@@ -1545,7 +1551,6 @@ public void testExposeSuperCall() {
15451551

15461552
@Test
15471553
public void testExposeSuperCall_noSideEffects() {
1548-
times = 2;
15491554
// String() is being used since it's known to not have side-effects.
15501555
helperExposeExpression(
15511556
"class A { constructor() { super(goo(), String()) } }",
@@ -1626,9 +1631,7 @@ private Node helperExposeExpressionThenTypeCheck(String code, Function<Node, Nod
16261631
Node expr = nodeFinder.apply(tree);
16271632

16281633
compiler.resetUniqueNameId();
1629-
for (int i = 0; i < times; i++) {
1630-
decomposer.exposeExpression(expr);
1631-
}
1634+
decomposer.maybeExposeExpression(expr);
16321635
processForTypecheck(compiler, tree);
16331636

16341637
return tree;
@@ -1665,9 +1668,7 @@ private void helperExposeExpression(
16651668
assertThat(result).isEqualTo(DecompositionType.DECOMPOSABLE);
16661669

16671670
compiler.resetUniqueNameId();
1668-
for (int i = 0; i < times; i++) {
1669-
decomposer.exposeExpression(expr);
1670-
}
1671+
decomposer.maybeExposeExpression(expr);
16711672
validateSourceInfo(compiler, tree);
16721673
assertNode(tree).usingSerializer(compiler::toSource).isEqualTo(expectedRoot);
16731674

@@ -1713,9 +1714,7 @@ private void helperMoveExpression(
17131714
assertWithMessage("Expected node was not found.").that(expr).isNotNull();
17141715

17151716
compiler.resetUniqueNameId();
1716-
for (int i = 0; i < times; i++) {
1717-
decomposer.moveExpression(expr);
1718-
}
1717+
decomposer.moveExpression(expr);
17191718
validateSourceInfo(compiler, tree);
17201719
assertNode(tree).usingSerializer(compiler::toSource).isEqualTo(expectedRoot);
17211720

@@ -1724,9 +1723,7 @@ private void helperMoveExpression(
17241723
Node originalExpr = nodeFinder.apply(originalTree);
17251724

17261725
compiler.resetUniqueNameId();
1727-
for (int i = 0; i < times; i++) {
1728-
decomposer.moveExpression(originalExpr);
1729-
}
1726+
decomposer.moveExpression(originalExpr);
17301727
processForTypecheck(compiler, originalTree);
17311728

17321729
// TODO(bradfordcsmith): Don't assume type check + decompose gives the same results as

0 commit comments

Comments
 (0)