Skip to content

Commit 91d3216

Browse files
committed
feat: support benches
1 parent 9f43770 commit 91d3216

4 files changed

Lines changed: 20 additions & 6 deletions

File tree

src/main/kotlin/com/github/xepozz/testo/TestoClasses.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,18 @@ object TestoClasses {
44
const val TEST_OLD = "\\Testo\\Attribute\\Test"
55
const val TEST_NEW = "\\Testo\\Application\\Attribute\\Test"
66
const val TEST_INLINE_OLD = "\\Testo\\Sample\\TestInline"
7+
const val TEST_INLINE_NEW = "\\Testo\\Inline\\TestInline"
8+
79
const val DATA_PROVIDER_OLD = "\\Testo\\Sample\\DataProvider"
810
const val DATA_SET_OLD = "\\Testo\\Sample\\DataSet"
9-
const val TEST_INLINE_NEW = "\\Testo\\Inline\\TestInline"
1011
const val DATA_PROVIDER_NEW = "\\Testo\\Data\\DataProvider"
1112
const val DATA_SET_NEW = "\\Testo\\Data\\DataSet"
1213
const val DATA_UNION = "\\Testo\\Data\\DataUnion"
1314
const val DATA_CROSS = "\\Testo\\Data\\DataCross"
1415
const val DATA_ZIP = "\\Testo\\Data\\DataZip"
1516

17+
const val BENCH_WITH = "\\Testo\\Bench\\BenchWith"
18+
1619
const val ASSERT = "\\Testo\\Assert"
1720
const val ASSERTION_EXCEPTION = "\\Testo\\Assert\\State\\Assertion\\AssertionException"
1821
const val EXPECT = "\\Testo\\Expect"

src/main/kotlin/com/github/xepozz/testo/mixin.kt

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,17 @@ import com.intellij.psi.PsiElement
55
import com.intellij.psi.PsiFile
66
import com.intellij.psi.util.PsiTreeUtil
77
import com.jetbrains.php.lang.psi.PhpFile
8-
import com.jetbrains.php.lang.psi.elements.Function
98
import com.jetbrains.php.lang.psi.elements.Method
9+
import com.jetbrains.php.lang.psi.elements.Function
1010
import com.jetbrains.php.lang.psi.elements.PhpAttributesOwner
1111
import com.jetbrains.php.lang.psi.elements.PhpClass
1212

13-
fun PsiElement.isTestoExecutable() = isTestoFunction() || isTestoMethod()
13+
fun PsiElement.isTestoExecutable() = isTestoFunction() || isTestoMethod() || isTestoBench()
14+
15+
fun PsiElement.isTestoBench() = when(this) {
16+
is Method -> hasAnyAttribute(TestoClasses.BENCH_WITH)
17+
else -> false
18+
}
1419

1520
fun PsiElement.isTestoFunction() = when(this) {
1621
is Function -> hasAnyAttribute(TestoClasses.TEST_OLD,TestoClasses.TEST_NEW, TestoClasses.TEST_INLINE_NEW, TestoClasses.TEST_INLINE_OLD)
@@ -32,12 +37,12 @@ fun PhpAttributesOwner.hasAttribute(fqn: String) = getAttributes(fqn).isNotEmpty
3237
fun PhpAttributesOwner.hasAnyAttribute(vararg fqn: String) = attributes.any { it.fqn in fqn }
3338

3439
fun PsiElement.isTestoClass() = when (this) {
35-
is PhpClass -> TestoTestDescriptor.isTestClassName(name) || ownMethods.any { it.isTestoMethod() }
40+
is PhpClass -> TestoTestDescriptor.isTestClassName(name) || ownMethods.any { it.isTestoMethod() || it.isTestoBench() }
3641
else -> false
3742
}
3843

3944
fun PsiFile.isTestoFile() = when (this) {
40-
is PhpFile -> TestoTestDescriptor.isTestClassName(name.substringBeforeLast(".")) || (isTestoClassFile() || isTestoFunctionFile())
45+
is PhpFile -> TestoTestDescriptor.isTestClassName(name.substringBeforeLast(".")) || (isTestoClassFile() || isTestoFunctionFile() || isTestBenchFile())
4146
else -> false
4247
}
4348

@@ -47,6 +52,9 @@ fun PhpFile.isTestoClassFile() = PsiTreeUtil.findChildrenOfType(this, PhpClass::
4752
fun PhpFile.isTestoFunctionFile() = PsiTreeUtil.findChildrenOfType(this, Function::class.java)
4853
.any { it.isTestoFunction() }
4954

55+
fun PhpFile.isTestBenchFile() = PsiTreeUtil.findChildrenOfType(this, Function::class.java)
56+
.any { it.isTestoBench() }
57+
5058
fun <T> Sequence<T>.takeWhileInclusive(predicate: (T) -> Boolean) = sequence {
5159
with(iterator()) {
5260
while (hasNext()) {

src/main/kotlin/com/github/xepozz/testo/tests/TestoTestRunLineMarkerProvider.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.github.xepozz.testo.index.TestoDataProviderUtils
55
import com.github.xepozz.testo.isTestoClass
66
import com.github.xepozz.testo.isTestoDataProviderLike
77
import com.github.xepozz.testo.isTestoExecutable
8+
import com.github.xepozz.testo.tests.TestoTestRunLineMarkerProvider.Companion.getLocationHint
89
import com.github.xepozz.testo.util.PsiUtil
910
import com.intellij.execution.lineMarker.ExecutorAction
1011
import com.intellij.execution.lineMarker.RunLineMarkerContributor
@@ -18,8 +19,8 @@ import com.jetbrains.php.config.commandLine.PhpCommandLinePathProcessor
1819
import com.jetbrains.php.lang.lexer.PhpTokenTypes
1920
import com.jetbrains.php.lang.psi.PhpPsiUtil
2021
import com.jetbrains.php.lang.psi.elements.ClassReference
21-
import com.jetbrains.php.lang.psi.elements.Function
2222
import com.jetbrains.php.lang.psi.elements.Method
23+
import com.jetbrains.php.lang.psi.elements.Function
2324
import com.jetbrains.php.lang.psi.elements.PhpAttribute
2425
import com.jetbrains.php.lang.psi.elements.PhpAttributesOwner
2526
import com.jetbrains.php.lang.psi.elements.PhpClass
@@ -95,6 +96,7 @@ class TestoTestRunLineMarkerProvider : RunLineMarkerContributor() {
9596
TestoClasses.DATA_ZIP,
9697
TestoClasses.TEST_INLINE_OLD,
9798
TestoClasses.TEST_INLINE_NEW,
99+
TestoClasses.BENCH_WITH,
98100
)
99101

100102
fun getLocationHint(element: Function) = when (element) {

src/main/kotlin/com/github/xepozz/testo/util/PsiUtil.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ object PsiUtil {
1919
TestoClasses.DATA_UNION,
2020
TestoClasses.DATA_CROSS,
2121
TestoClasses.DATA_ZIP,
22+
TestoClasses.BENCH_WITH,
2223
)
2324

2425
fun getAttributeOrder(attribute: PhpAttribute, owner: PhpAttributesOwner): Int = owner

0 commit comments

Comments
 (0)