blob: f9c9b1d98f01261be1b8609476f4e161666cbf95 [file]
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package org.jetbrains.plugins.gradle.dsl
import com.intellij.psi.PsiMethod
import com.intellij.testFramework.RunAll
import groovy.transform.CompileStatic
import org.jetbrains.plugins.gradle.highlighting.GradleHighlightingBaseTest
import org.jetbrains.plugins.gradle.service.resolve.GradleTaskProperty
import org.jetbrains.plugins.groovy.util.ExpressionTest
import org.junit.Test
import static com.intellij.psi.CommonClassNames.JAVA_LANG_STRING
import static org.jetbrains.plugins.gradle.service.resolve.GradleCommonClassNames.*
@CompileStatic
class GradleTasksTest extends GradleHighlightingBaseTest implements ExpressionTest {
@Override
protected List<String> getParentCalls() {
return []
}
@Test
void test() {
importProject("apply plugin:'java'")
new RunAll().append {
'task ref'()
} append {
'task call'()
} append {
'task call delegate'()
} append {
'task container vs task ref'()
} append {
'task container vs task call'()
} append {
'task via TaskContainer'()
} append {
'task via Project'()
} append {
'task in allProjects'()
} append {
'task in allProjects via explicit delegate'()
} append {
'task declaration configuration delegate'()
} append {
'task declaration configuration delegate with explicit type'()
} run()
}
void 'task ref'() {
doTest('<caret>javadoc') {
testTask('javadoc', GRADLE_API_TASKS_JAVADOC_JAVADOC)
}
}
void 'task call'() {
doTest('<caret>javadoc {}') {
methodCallTest(PsiMethod, GRADLE_API_TASKS_JAVADOC_JAVADOC)
}
}
void 'task call delegate'() {
doTest('javadoc { <caret> }') {
closureDelegateTest(GRADLE_API_TASKS_JAVADOC_JAVADOC, 1)
}
}
void 'task container vs task ref'() {
doTest('<caret>tasks') {
referenceExpressionTest(PsiMethod, GRADLE_API_TASK_CONTAINER)
}
}
void 'task container vs task call'() {
doTest('<caret>tasks {}') {
methodCallTest(PsiMethod, GRADLE_API_TASKS_DIAGNOSTICS_TASK_REPORT_TASK)
}
}
void 'task via TaskContainer'() {
doTest('tasks.<caret>tasks') {
testTask('tasks', GRADLE_API_TASKS_DIAGNOSTICS_TASK_REPORT_TASK)
}
}
void 'task via Project'() {
doTest('project.<caret>clean') {
testTask('clean', GRADLE_API_TASKS_DELETE)
}
}
void 'task in allProjects'() {
doTest('allProjects { <caret>clean }') {
testTask('clean', GRADLE_API_TASKS_DELETE)
}
}
void 'task in allProjects via explicit delegate'() {
doTest('allProjects { delegate.<caret>clean }') {
resolveTest(null)
}
}
private void testTask(String name, String type) {
def property = referenceExpressionTest(GradleTaskProperty, type)
assert property.name == name
}
void 'task declaration configuration delegate'() {
def data = [
"task('s') { <caret> }",
"task(id2) { <caret> }",
"task(id3, { <caret> })",
"task(id5, description: 'oh') { <caret> }",
"task(id6, description: 'oh', { <caret> })",
"task id9() { <caret>}",
"task id8 { <caret> }",
"task id10({ <caret> })",
"task id12(description: 'hi') { <caret> }",
"task id13(description: 'hi', { <caret> })",
"task mid12([description: 'hi']) { <caret> }",
"task mid13([description: 'hi'], { <caret> })",
"task emid12([:]) { <caret> }",
"task emid13([:], { <caret> })",
"tasks.create(name: 'cid1') { <caret> }",
"tasks.create([name: 'mcid1']) { <caret> }",
"tasks.create('eid1') { <caret> }",
]
doTest(data) {
closureDelegateTest(GRADLE_API_TASK, 1)
}
}
void 'task declaration configuration delegate with explicit type'() {
def data = [
"task('s', type: String) { <caret> }",
"task(id5, type: String) { <caret> }",
"task(id6, type: String, { <caret> })",
"task id12(type: String) { <caret> }",
"task id13(type: String, { <caret> })",
"task mid12([type: String]) { <caret> }",
"task mid13([type: String], { <caret> })",
"tasks.create(name: 'cid1', type: String) { <caret> }",
"tasks.create([name: 'mcid1', type: String]) { <caret> }",
"tasks.create('eid1', String) { <caret> }",
]
doTest(data) {
closureDelegateTest(JAVA_LANG_STRING, 1)
}
}
}