File tree Expand file tree Collapse file tree 3 files changed +85
-2
lines changed
kotlin/src/main/kotlin/cc/unitmesh/kotlin/provider
main/kotlin/cc/unitmesh/devti/pair/tasking
test/kotlin/cc/unitmesh/devti/pair/tasking Expand file tree Collapse file tree 3 files changed +85
-2
lines changed Original file line number Diff line number Diff line change @@ -90,7 +90,7 @@ class KotlinWriteTestService : WriteTestService() {
90
90
91
91
project.guessProjectDir()?.refresh(true , true )
92
92
93
- val currentClass: String = runReadAction {
93
+ val currentClass: String = ReadAction .compute< String , Throwable > {
94
94
val classContext = when (element) {
95
95
is KtClassOrObject -> ClassContextProvider (false ).from(element)
96
96
is KtNamedFunction -> {
@@ -102,7 +102,7 @@ class KotlinWriteTestService : WriteTestService() {
102
102
else -> null
103
103
}
104
104
105
- return @runReadAction classContext?.format() ? : " "
105
+ return @compute classContext?.format() ? : " "
106
106
}
107
107
108
108
val imports: List <String > = runReadAction {
Original file line number Diff line number Diff line change
1
+ package cc.unitmesh.devti.pair.tasking
2
+
3
+ enum class TaskingStatus {
4
+ TODO ,
5
+ DOING ,
6
+ DONE ,
7
+ }
8
+
9
+ data class Tasking (
10
+ val id : Int ,
11
+ val name : String ,
12
+ val status : TaskingStatus ,
13
+ ) {
14
+ companion object {
15
+ /* *
16
+ * Parse GitHub Markdown to Tasking
17
+ * Example input:
18
+ * ```markdown
19
+ * - [ ] Task 1
20
+ * - [ ] Task 2
21
+ * ```
22
+ */
23
+ fun fromMarkdown (markdown : String ): List <Tasking > {
24
+ val taskRegex = Regex (" ^[\\ s*-]*\\ [([\\ s*x])\\ ] (.+)" , RegexOption .MULTILINE )
25
+ val matches = taskRegex.findAll(markdown)
26
+
27
+ val tasks = matches.map { matchResult ->
28
+ val (statusChar, taskName) = matchResult.destructured
29
+ val status = when (statusChar.trim()) {
30
+ " x" -> TaskingStatus .DONE
31
+ else -> TaskingStatus .TODO
32
+ }
33
+
34
+ Tasking (id = 0 , name = taskName.trim(), status = status)
35
+ }.toList()
36
+
37
+ return tasks
38
+ }
39
+ }
40
+ }
Original file line number Diff line number Diff line change
1
+ package cc.unitmesh.devti.pair.tasking ;
2
+
3
+ import junit.framework.TestCase.assertEquals
4
+ import org.junit.Test
5
+
6
+ class TaskingTest {
7
+ @Test
8
+ fun `should create Tasking object from valid markdown` () {
9
+ // given
10
+ val markdown = """
11
+ - [ ] Task 1
12
+ - [ ] Task 2
13
+ """ .trimIndent()
14
+
15
+ // when
16
+ val tasking = Tasking .fromMarkdown(markdown)[0 ]
17
+
18
+ // then
19
+ assertEquals(" Task 1" , tasking.name)
20
+ assertEquals(TaskingStatus .TODO , tasking.status)
21
+ }
22
+
23
+ @Test
24
+ fun `should create Tasking object with status DONE from valid markdown` () {
25
+ // given
26
+ val markdown = """
27
+ - [x] Task 1
28
+ - [ ] Task 2
29
+ """ .trimIndent()
30
+
31
+ // when
32
+ val tasks = Tasking .fromMarkdown(markdown)
33
+ val tasking = tasks[0 ]
34
+
35
+ // then
36
+ assertEquals(" Task 1" , tasking.name)
37
+ assertEquals(TaskingStatus .DONE , tasking.status)
38
+
39
+ val tasking2 = tasks[1 ]
40
+ assertEquals(" Task 2" , tasking2.name)
41
+ assertEquals(TaskingStatus .TODO , tasking2.status)
42
+ }
43
+ }
You can’t perform that action at this time.
0 commit comments