Skip to content

Commit 2a05076

Browse files
committed
Modify existing code inspection test cases
1 parent 3360335 commit 2a05076

19 files changed

+134
-41
lines changed

src/test/kotlin/org/domaframework/doma/intellij/complate/sql/SqlCompleteTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,10 @@ class SqlCompleteTest : DomaSqlTest() {
109109
listOf(
110110
"elseif",
111111
"else",
112-
"end",
113-
"expand",
114112
),
115113
listOf(
114+
"end",
115+
"expand",
116116
"employee",
117117
"if",
118118
"populate",

src/test/kotlin/org/domaframework/doma/intellij/reference/SqlReferenceTestCase.kt

Lines changed: 88 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,23 @@
1515
*/
1616
package org.domaframework.doma.intellij.reference
1717

18+
import com.intellij.psi.PsiElement
1819
import com.intellij.psi.PsiFile
1920
import com.intellij.psi.util.PsiTreeUtil
21+
import com.intellij.psi.util.elementType
2022
import org.domaframework.doma.intellij.DomaSqlTest
2123
import org.domaframework.doma.intellij.psi.SqlCustomElExpr
24+
import org.domaframework.doma.intellij.psi.SqlElClass
25+
import org.domaframework.doma.intellij.psi.SqlElIdExpr
26+
import org.domaframework.doma.intellij.psi.SqlTypes
2227
import org.jetbrains.kotlin.idea.core.util.toPsiFile
2328

2429
class SqlReferenceTestCase : DomaSqlTest() {
2530
val testPackage = "reference"
2631
val testDaoName = "ReferenceTestDao"
2732

2833
val forItemResolve = "SqlElIdExprImpl(EL_ID_EXPR)"
34+
val forItemFieldAccessResolve = "SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)"
2935
val daoParameterResolve = "PsiParameter"
3036
val fieldResolve = "PsiField"
3137
val methodResolve = "PsiMethod"
@@ -37,17 +43,19 @@ class SqlReferenceTestCase : DomaSqlTest() {
3743
addSqlFile("$testPackage/$testDaoName/referenceDaoParameter.sql")
3844
addSqlFile("$testPackage/$testDaoName/referenceEntityProperty.sql")
3945
addSqlFile("$testPackage/$testDaoName/referenceStaticField.sql")
46+
addSqlFile("$testPackage/$testDaoName/referenceListFieldMethod.sql")
47+
addSqlFile("$testPackage/$testDaoName/referenceForItem.sql")
4048
}
4149

4250
fun testReferenceDaoMethodParameter() {
4351
referenceTest(
4452
"referenceDaoParameter",
4553
mapOf(
46-
"reportId" to "$daoParameterResolve:reportId",
47-
"tableName" to "$daoParameterResolve:tableName",
48-
"columns" to "$daoParameterResolve:columns",
49-
"column" to forItemResolve,
50-
"notExistParam" to null,
54+
"reportId" to listOf("$daoParameterResolve:reportId"),
55+
"tableName" to listOf("$daoParameterResolve:tableName"),
56+
"columns" to listOf("$daoParameterResolve:columns"),
57+
"column" to listOf(forItemResolve),
58+
"notExistParam" to listOf(null),
5159
),
5260
)
5361
}
@@ -56,13 +64,13 @@ class SqlReferenceTestCase : DomaSqlTest() {
5664
referenceTest(
5765
"referenceEntityProperty",
5866
mapOf(
59-
"detail" to "$daoParameterResolve:detail",
60-
"getFirstEmployee" to "$methodResolve:getFirstEmployee",
61-
"projectNumber" to "$fieldResolve:projectNumber",
62-
"projects" to "$daoParameterResolve:projects",
63-
"project" to forItemResolve,
64-
"id" to forItemResolve,
65-
"employeeId" to "$fieldResolve:employeeId",
67+
"detail" to listOf("$daoParameterResolve:detail"),
68+
"getFirstEmployee" to listOf("$methodResolve:getFirstEmployee"),
69+
"projectNumber" to listOf("$fieldResolve:projectNumber"),
70+
"projects" to listOf("$daoParameterResolve:projects"),
71+
"project" to listOf(forItemResolve),
72+
"id" to listOf(null),
73+
"employeeId" to listOf("$fieldResolve:employeeId"),
6674
),
6775
)
6876
}
@@ -71,19 +79,56 @@ class SqlReferenceTestCase : DomaSqlTest() {
7179
referenceTest(
7280
"referenceStaticField",
7381
mapOf(
74-
"doma.example.entity.ProjectDetail" to "$classResolve:ProjectDetail",
75-
"doma.example.entity.Project" to "$classResolve:Project",
76-
"projectCategory" to "$fieldResolve:projectCategory",
77-
"getTermNumber" to "$methodResolve:getTermNumber",
78-
"getFirstEmployee" to "$methodResolve:getFirstEmployee",
79-
"employeeId" to "$fieldResolve:employeeId",
82+
"doma.example.entity.ProjectDetail" to listOf("$classResolve:ProjectDetail"),
83+
"doma.example.entity.Project" to listOf("$classResolve:Project"),
84+
"projectCategory" to listOf("$fieldResolve:projectCategory"),
85+
"getTermNumber" to listOf("$methodResolve:getTermNumber"),
86+
"getFirstEmployee" to listOf("$methodResolve:getFirstEmployee"),
87+
"employeeId" to listOf("$fieldResolve:employeeId"),
88+
),
89+
)
90+
}
91+
92+
fun testReferenceListFieldMethod() {
93+
referenceTest(
94+
"referenceListFieldMethod",
95+
mapOf(
96+
"doma.example.entity.Employee" to listOf("$classResolve:Employee"),
97+
"projects" to listOf("$fieldResolve:projects"),
98+
"get" to listOf("$methodResolve:get"),
99+
"employeesList" to listOf("$daoParameterResolve:employeesList"),
100+
"projectCategory" to listOf("$fieldResolve:projectCategory"),
101+
"projectNumber" to listOf("$fieldResolve:projectNumber"),
102+
"0" to listOf(null),
103+
),
104+
)
105+
}
106+
107+
fun testReferenceForItem() {
108+
referenceTest(
109+
"referenceForItem",
110+
mapOf(
111+
"employeesList" to listOf("$daoParameterResolve:employeesList"),
112+
"projects" to listOf("$fieldResolve:projects"),
113+
"get" to listOf("$methodResolve:get"),
114+
"employees" to listOf(forItemResolve),
115+
"employees_has_next" to listOf(forItemResolve),
116+
"employee_has_next" to listOf(forItemResolve),
117+
"employee" to listOf(forItemResolve),
118+
"project" to listOf(forItemResolve, forItemFieldAccessResolve),
119+
"projectCategory" to listOf("$fieldResolve:projectCategory"),
120+
"projectNumber" to listOf("$fieldResolve:projectNumber"),
121+
"projectId" to listOf("$fieldResolve:projectId"),
122+
"0" to listOf(null),
123+
"\"OR\"" to listOf(null),
124+
"\"AND\"" to listOf(null),
80125
),
81126
)
82127
}
83128

84129
private fun referenceTest(
85130
sqlFileName: String,
86-
resolveExpects: Map<String, String?>,
131+
resolveExpects: Map<String, List<String?>>,
87132
) {
88133
val sqlFile = findSqlFile("$testPackage/$testDaoName/$sqlFileName.sql")
89134
assertNotNull("Not Found SQL File", sqlFile)
@@ -101,17 +146,36 @@ class SqlReferenceTestCase : DomaSqlTest() {
101146
/**
102147
* Resolve references in the test file.
103148
* sqlFile: The SQL file to resolve references in.
104-
* resolveExpects: A map of expected results for each reference. Type:resolveName
149+
* resolveExpects: A map of expected results for each reference. Type: List of resolveName
105150
*/
106151
private fun resolveReferencesInTestFile(
107152
sqlFile: PsiFile,
108-
resolveExpects: Map<String, String?>,
153+
resolveExpects: Map<String, List<String?>>,
109154
) {
110-
val references = PsiTreeUtil.collectElementsOfType(sqlFile, SqlCustomElExpr::class.java)
155+
val references =
156+
PsiTreeUtil.collectElementsOfType(sqlFile, SqlCustomElExpr::class.java).filter {
157+
!isLiteral(it) &&
158+
!(
159+
it is SqlElIdExpr &&
160+
PsiTreeUtil.getParentOfType(
161+
it,
162+
SqlElClass::class.java,
163+
) != null
164+
)
165+
}
111166
for (reference in references) {
112167
val resolveResult = reference.references.firstOrNull()?.resolve()
113-
val result = resolveExpects[reference.text]
114-
assertEquals(result, resolveResult?.toString())
168+
val expectedResults = resolveExpects[reference.text]
169+
170+
println("Reference: ${reference.text}, Resolve Result: ${resolveResult?.toString()}, Expected Results: $expectedResults")
171+
assertTrue(expectedResults?.contains(resolveResult?.toString()) == true)
115172
}
116173
}
174+
175+
private fun isLiteral(element: PsiElement): Boolean =
176+
element.elementType == SqlTypes.EL_STRING ||
177+
element.elementType == SqlTypes.EL_CHAR ||
178+
element.elementType == SqlTypes.EL_NUMBER ||
179+
element.elementType == SqlTypes.EL_NULL ||
180+
element.elementType == SqlTypes.BOOLEAN
117181
}

src/test/testData/src/main/java/doma/example/dao/reference/ReferenceTestDao.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,10 @@ public interface ReferenceTestDao {
1616
@Select
1717
ProjectDetail referenceStaticField();
1818

19+
@Select
20+
List<Employee> referenceListFieldMethod(List<Employee> employeesList);
21+
22+
@Select
23+
List<Employee> referenceForItem(List<List<List<Employee>>> employeesList);
24+
1925
}

src/test/testData/src/main/java/doma/example/entity/Employee.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package doma.example.entity;
22

3+
import java.util.List;
34
import java.time.LocalDate;
45
import org.seasar.doma.Entity;
56
import org.seasar.doma.Id;
@@ -13,7 +14,7 @@ public class Employee extends User {
1314
public String employeeName;
1415
private String department;
1516
private String rank;
16-
public List<Project> projects;
17+
public static List<Project> projects;
1718

1819
public Integer managerId;
1920

src/test/testData/src/main/java/doma/example/entity/Project.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ public class Project {
1919
public static Integr projectNumber;
2020
private static String projectCategory;
2121

22-
public static Interer cost;
22+
public static Integer cost;
2323

24-
public Employee getFirstEmployee() {
24+
public static Employee getFirstEmployee() {
2525
return employees.get(0);
2626
}
2727

src/test/testData/src/main/resources/META-INF/doma/example/dao/EmployeeSummaryDao/accessStaticProperty.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ where
2626
AND (
2727
-- static method call
2828
/*%for member : @doma.example.entity.ProjectDetail@members*/
29-
/*%if member.hasNext() */
29+
/*%if member_has_next */
3030
pd.member_id = /* member.employeeId */0
3131
/*# "OR"*/
3232
/*%end */

src/test/testData/src/main/resources/META-INF/doma/example/dao/EmployeeSummaryDao/bindVariableForNonEntityClass.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
/*%end*/
2727
-- Reference error for a non-existent field
2828
/*%for child : employee.<error descr="The field or method [projectIds] does not exist in the class [EmployeeSummary]">projectIds</error> */
29-
AND pe.parent_project = /* child.projectId */0
29+
-- An error occurred because the referenced element was not correctly defined.
30+
AND pe.parent_project = /* <error descr="The bind variable [child] does not exist in the Dao method [bindVariableForNonEntityClass]">child</error>.projectId */0
3031
-- Reference error for a non-existent method
3132
AND pe.member_id IN /* employee.<error descr="The field or method [getTopProject] does not exist in the class [EmployeeSummary]">getTopProject</error>() */(0,1,2)
3233
/*%end */

src/test/testData/src/main/resources/META-INF/doma/example/dao/EmployeeSummaryDao/resolveDaoArgumentOfListType.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
/*%if employees.size() > 0 */
1515
where
1616
/*%for member : employees */
17-
p.employee_id = /* member.employee_id */0
17+
p.employee_id = /* member.<error descr="The field or method [employee_id] does not exist in the class [Employee]">employee_id</error> */0
1818
/*%end */
1919
-- Cannot be used as a class inside List-type
2020
/*%elseif employees.<error descr="The field or method [rank] does not exist in the class [List]">rank</error> > 3*/

src/test/testData/src/main/resources/META-INF/doma/example/dao/SqlCompleteTestDao/completeComparisonOperator.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@ select
55
from employee e
66
inner join project p on e.employee_id = p.employee_id
77
where e.employee_id = /* summary.employeeId */1
8-
/*%if @doma.example.entity.Project@rank == summary.employee.<caret>r */
8+
/*%if @doma.example.entity.Project@rank == summary.employee.<caret>ran */
99
and e.project_cost >= /* @doma.example.entity.Project@cost */9999
1010
/*%end */
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
insert into employee (id, name, rank) values (
22
/* employee.employeeId */1,
33
/* employee.employeeName */'name',
4-
/* 1 + point + employee.<caret>r */1)
4+
/* 1 + point + employee.<caret>ran */1)

0 commit comments

Comments
 (0)