Added test for read fields in ClassFileReader

This commit is contained in:
Akash Yadav
2022-09-03 18:47:47 +05:30
parent a0276160d4
commit ad8c21d3c3
@@ -20,10 +20,10 @@ package com.itsaky.androidide.classfile
import com.google.common.truth.Truth.assertThat
import com.itsaky.androidide.classfile.constants.ClassConstant
import com.itsaky.androidide.classfile.constants.Utf8Constant
import java.io.File
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.JUnit4
import java.io.File
/** @author Akash Yadav */
@RunWith(JUnit4::class)
@@ -41,9 +41,44 @@ class ClassFileReaderTest {
assertThat(file).isNotNull()
assertThat(file.version).isEqualTo(ClassFileVersion.JAVA_11)
assertThat(file.getName()).isEqualTo("io/github/rosemoe/sora/widget/CodeEditor")
assertThat(file.getSuperClassName()).isEqualTo("android/view/View")
checkBaseNames(file)
checkInterfaces(file)
checkFIelds(file)
checkAccessFlags(file)
}
private fun checkAccessFlags(file: IClassFile) {
assertThat(file.accessFlags and ClassFileConstants.ACC_PUBLIC).isNotEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_SUPER).isNotEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_ABSTRACT).isEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_FINAL).isEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_ANNOTATION).isEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_ENUM).isEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_INTERFACE).isEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_MODULE).isEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_SYNTHETIC).isEqualTo(0)
}
private fun checkFIelds(file: IClassFile) {
file.fields
.firstOrNull { (file.constantPool[it.nameIndex] as Utf8Constant).content() == "mTextActionWindow" }
.apply {
assertThat(this).isNotNull()
val name = (file.constantPool[this!!.nameIndex] as Utf8Constant).content()
assertThat(name).isEqualTo("mTextActionWindow")
val descriptor = (file.constantPool[this.descriptorIndex] as Utf8Constant).content()
assertThat(descriptor).isEqualTo("Lio/github/rosemoe/sora/widget/component/EditorTextActionWindow;")
assertThat(this.accessFlags and ClassFileConstants.ACC_PROTECTED).isNotEqualTo(0)
assertThat(this.accessFlags and ClassFileConstants.ACC_PRIVATE).isEqualTo(0)
assertThat(this.accessFlags and ClassFileConstants.ACC_PUBLIC).isEqualTo(0)
}
}
private fun checkInterfaces(file: IClassFile) {
file.interfaces
.map { file.constantPool[it] }
.filterIsInstance<ClassConstant>()
@@ -60,16 +95,10 @@ class ClassFileReaderTest {
"io/github/rosemoe/sora/text/LineRemoveListener"
)
}
}
assertThat(file.accessFlags and ClassFileConstants.ACC_PUBLIC).isNotEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_SUPER).isNotEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_ABSTRACT).isEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_FINAL).isEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_ANNOTATION).isEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_ENUM).isEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_INTERFACE).isEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_MODULE).isEqualTo(0)
assertThat(file.accessFlags and ClassFileConstants.ACC_SYNTHETIC).isEqualTo(0)
private fun checkBaseNames(file: IClassFile) {
assertThat(file.getName()).isEqualTo("io/github/rosemoe/sora/widget/CodeEditor")
assertThat(file.getSuperClassName()).isEqualTo("android/view/View")
}
}