ant-druha / intellij-powershell

Adds PowerShell language support to IntelliJ-based IDEs.
https://plugins.jetbrains.com/plugin/10249-powershell
Apache License 2.0
72 stars 20 forks source link

`testLabeledStatement` fails locally #167

Closed ForNeVeR closed 10 months ago

ForNeVeR commented 10 months ago

I have stable test failure for testLabeledStatement locally that doesn't reproduce on CI:

com.intellij.rt.execution.junit.FileComparisonFailure: expected:<...ile')(251,256)
  Psi[Element(DUMMY_BLOCK)(256,269)
    PsiWhiteSpace(' ')(256,257)
    PsiElement(()('(')(257,258)
    PsiElement($)('$')(258,259)
    PsiElement(SIMPLE_ID)('i')(259,260)
    PsiWhiteSpace(' ')(260,261)
    PsiElement(OP_C)('-le')(261,264)
    PsiWhiteSpace(' ')(264,265)
    PsiElement(DEC_INTEGER)('100')(265,268)
    PsiElement())(')')(268,269)
  PsiWhiteSpace(' ')(269,270)
  PsiElement(DUMMY_BLOCK)(270,272)
    PsiElement({)('{')(270,271)
  ]  PsiElement(})('}')...> but was:<...ile')(251,256)
  Psi[WhiteSpace(' ')(256,257)
  PsiElement(()('(')(257,258)
  PsiElement($)('$')(258,259)
  PsiElement(SIMPLE_ID)('i')(259,260)
  PsiWhiteSpace(' ')(260,261)
  PsiElement(OP_C)('-le')(261,264)
  PsiWhiteSpace(' ')(264,265)
  PsiElement(DEC_INTEGER)('100')(265,268)
  PsiElement())(')')(268,269)
  PsiWhiteSpace(' ')(269,270)
  PsiElement({)('{')(270,271)
]  PsiElement(})('}')...>
    at com.intellij.testFramework.UsefulTestCase.assertSameLinesWithFile(UsefulTestCase.java:962)
    at com.intellij.testFramework.UsefulTestCase.assertSameLinesWithFile(UsefulTestCase.java:926)
    at com.intellij.testFramework.UsefulTestCase.assertSameLinesWithFile(UsefulTestCase.java:916)
    at com.intellij.testFramework.ParsingTestCase.doCheckResult(ParsingTestCase.java:487)
    at com.intellij.testFramework.ParsingTestCase.doCheckResult(ParsingTestCase.java:450)
    at com.intellij.testFramework.ParsingTestCase.checkResult(ParsingTestCase.java:396)
    at com.intellij.testFramework.ParsingTestCase.doTest(ParsingTestCase.java:286)
    at com.intellij.testFramework.ParsingTestCase.doTest(ParsingTestCase.java:278)
    at com.intellij.plugin.powershell.lang.PowerShellParserTest.testLabeledStatement(PowerShellParserTest.kt:30)
    at java.base@17.0.7/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base@17.0.7/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base@17.0.7/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base@17.0.7/java.lang.reflect.Method.invoke(Method.java:568)
    at junit.framework.TestCase.runTest(TestCase.java:177)
    at com.intellij.testFramework.UsefulTestCase.lambda$runBare$11(UsefulTestCase.java:479)
    at com.intellij.testFramework.UsefulTestCase.lambda$wrapTestRunnable$13(UsefulTestCase.java:500)
    at com.intellij.testFramework.UsefulTestCase.runTestRunnable(UsefulTestCase.java:404)
    at com.intellij.testFramework.UsefulTestCase.defaultRunBare(UsefulTestCase.java:420)
    at com.intellij.testFramework.UsefulTestCase.lambda$runBare$12(UsefulTestCase.java:487)
    at com.intellij.testFramework.EdtTestUtil.lambda$runInEdtAndWait$1(EdtTestUtil.java:40)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:308)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:789)
    at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:740)
    at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:734)
    at java.base@17.0.7/java.security.AccessController.doPrivileged(AccessController.java:399)
    at java.base@17.0.7/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:759)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.kt:322)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:207)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:92)
ForNeVeR commented 10 months ago

Ok, that's interesting. It gets fixed by ./gradlew clean. In particular:

$ ./gradlew clean && ./gradlew test # works well
# run tests from the IDE
$ ./gradlew test # breaks
ForNeVeR commented 10 months ago

A more stable sequence:

  # always breaks:
$ ./gradlew clean && ./gradlew test --tests "com.intellij.plugin.powershell.lang.PowerShellParserTest"
  # always works:
$ ./gradlew clean && ./gradlew test

So, something during other tests changes the test environment to make the test in question pass.

ForNeVeR commented 10 months ago

Ok, the behavior change is caused by something inside PowerShellCodeInsightTest.