From 37dbe4e1f3294de46d9def4a232d2104f24e60c7 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Thu, 11 Aug 2022 17:06:48 +0530 Subject: [PATCH] Added tests for Java compiler --- .../assets/data/common/tooling-api-all.jar | Bin 12709788 -> 12709788 bytes .../itsaky/androidide/lsp/java/JavaLSPTest.kt | 2 + .../lsp/java/actions/AddImportTester.kt | 7 +- .../lsp/java/compiler/CompilerTest.kt | 98 ++++++++++++++++++ tests/test-home/.androidide/init/model.jar | Bin 57946 -> 57946 bytes 5 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 lsp/java/src/test/java/com/itsaky/androidide/lsp/java/compiler/CompilerTest.kt diff --git a/app/src/main/assets/data/common/tooling-api-all.jar b/app/src/main/assets/data/common/tooling-api-all.jar index 5ff75a6bebcdfd3a35bda19c90edc58d916c8fef..fc4aeab37c9da32af890c1f6bff9c54ddb4e46bf 100644 GIT binary patch delta 21735 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 delta 21735 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 X9fl1p`SJiXx)_X~VroOvbr5@xjp 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. + */ + +package com.itsaky.androidide.lsp.java.compiler + +import com.google.common.truth.Truth.assertThat +import com.itsaky.androidide.lsp.java.JavaLSPTest +import java.time.Instant + +/** @author Akash Yadav */ +class CompilerTest : JavaLSPTest() { + + override fun test() { + testConcurrentAccess() + testClosedFileChannel() + testMultipleThreads() + } + + private fun testMultipleThreads() { + openFile("completion/MembersCompletionTest") + val threads = mutableListOf() + val thread = Thread { + getCompiler().compile(file!!).run { + println(Thread.currentThread().name) + delay(1000) + } + } + thread.name = "Long running task" + threads.add(thread) + thread.start() + + for (i in 0..300) { + val th = Thread { + getCompiler().compile(file!!).run { + println(Thread.currentThread().name) + } + } + th.name = "Thread #$i" + threads.add(th) + th.start() + } + + threads.forEach { it.join() } + } + + private fun testClosedFileChannel() { + openFile("completion/MembersCompletionTest") + + Thread { getCompiler().compile(file!!).run { delay(500) } }.start() + Thread { getCompiler().compile(file!!).run { delay(200) } }.start() + + getCompiler().compile(file!!).run { assertThat(it.diagnostics).isNotEmpty() } + } + + private fun delay(millis: Long) { + Thread.sleep(millis) + } + + private fun testConcurrentAccess() { + openFile("completion/MembersCompletionTest") + + var task = getCompiler().compile(file!!) + var fileObject = SourceFileObject(file!!) + val threads = mutableListOf() + for (i in 1..10) { + threads.add( + Thread { + task.run { + delay(100) + println(Thread.currentThread()) + } + } + .apply { name = "CompileTask Acessor #$i" } + ) + } + + fileObject = SourceFileObject(file!!, fileObject.contents, Instant.now()) + task = getCompiler().compile(listOf(fileObject)) + threads.forEach { it.start() } + + Thread { task.run { println("Writer thread") } }.start() + threads.forEach { it.join() } + } +} diff --git a/tests/test-home/.androidide/init/model.jar b/tests/test-home/.androidide/init/model.jar index 5991dba6c7351545fb0be9227fcdccefa7a32dc6..e10bcdcf9c6b53f220b9e13bf78eddcd81599414 100644 GIT binary patch delta 509 zcmW;I%S!@L6b5je(Pk8tHWEQC6d{trphPGaAtaPk27&Y-2#OxiLruXJiD9OT0-4%` zyFdzZ5fUwe7Gax+!o`d_>Znm|`WJ$l?{3bI@7#Oty)$Bg77Mh_>!DRzg@R=jsbpH$ zLp{aPb`R>I88zFBS{#xq$0(g(OgSo(KUT(Qs8tIT+8>M$jIiS%!FsV+W+@id+8=c= z)9qxSXt`3$a&fC0@zv^4!A_e7a+X0nA@3jjG(ev#WP@-1bFytU+)u7Pi*&T1pNpQ5 zzB8V~Q}RCvlMxy+2YPsVJxSKSeep9@psZ^4i;q7wdk~}_;d*KJb zFYf?$!38411b7yvfU&d)f~933lx9I+nf!>O@)FWlc@Hd90^q$80&Z~!+>2yDUtK{8 zR@XqSItLuJEs(A419LqLF6yMIk=Budk{^6aWNx~#iS*DQhnbq&Na-fIooQ_#1zKch HwH5sbR9EG! delta 509 zcmW;I%S!@L6b5je(Pk8tHWEQC6d{trphPGaAtaPk27&Y-2#Q|xP*X54Da_gw$kZm> z1yYcUkZ2LKvQ0$cV#aYCUr}xP7lNAaZqASI+((Xlkwfi)%-Jye=tshUw2m3!wFyM(e;9Ky5Y+H`@lB>^SZ7t~M5~rl^ zPUi5G{7=eahNjHE5uV+Qll5xukIdEXW{HFMI~`cREnd+SALpicrxLjn9v{fP@O|Ky zcLAs10Wo0=JPQ-RT$%^r(jpK_)1XHrKjKJSK>8AQ!CW~6-pdi-mA1iyL