From a0ea56be3f1733930f7431e8cbc6523031abe7d8 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Mon, 12 Mar 2012 14:02:58 +0400 Subject: [PATCH] Added LibrariesTest (checking only one decompiled source yet). --- idea/idea.iml | 1 + idea/testData/libraries/AbstractClass.kt | 7 ++ idea/testData/libraries/library/library.kt | 68 ++++++++++++++++ .../jet/plugin/libraries/LibrariesTest.java | 80 +++++++++++++++++++ 4 files changed, 156 insertions(+) create mode 100644 idea/testData/libraries/AbstractClass.kt create mode 100644 idea/testData/libraries/library/library.kt create mode 100644 idea/tests/org/jetbrains/jet/plugin/libraries/LibrariesTest.java diff --git a/idea/idea.iml b/idea/idea.iml index 99b26f27f32..14d52a25fbe 100644 --- a/idea/idea.iml +++ b/idea/idea.iml @@ -27,6 +27,7 @@ + diff --git a/idea/testData/libraries/AbstractClass.kt b/idea/testData/libraries/AbstractClass.kt new file mode 100644 index 00000000000..6ad215d3258 --- /dev/null +++ b/idea/testData/libraries/AbstractClass.kt @@ -0,0 +1,7 @@ +// IntelliJ API Decompiler stub source generated from a class file +// Implementation of methods is not available + +package testData.libraries + +abstract class AbstractClass { +} \ No newline at end of file diff --git a/idea/testData/libraries/library/library.kt b/idea/testData/libraries/library/library.kt new file mode 100644 index 00000000000..3b97c6b7252 --- /dev/null +++ b/idea/testData/libraries/library/library.kt @@ -0,0 +1,68 @@ +package testData.libraries + +trait SimpleTrait { +} + +class SimpleClass { +} + +class SimpleTraitImpl : SimpleTrait { +} + +class WithInnerAndObject { + class object { + fun foo() { + } + } + + class MyInner { + trait MyInnerInner { + fun innerInnerMethod() + } + } +} + +class WithTraitClassObject { + class object : SimpleTrait +} + +abstract class AbstractClass { +} + +enum class Color(val rgb : Int) { + RED : Color(0xFF0000) + GREEN : Color(0x00FF00) + BLUE : Color(0x0000FF) +} + +abstract class ClassWithAbstractAndOpenMembers { + abstract fun abstractFun() + open fun openFun() { + } + + abstract val abstractVal : String + open val openVal : String = "" + open val openValWithGetter : String + get() { + return "239" + } + + abstract var abstractVar : String + open var openVar : String = "" + open var openVarWithGetter : String + get() { + return "239" + } + set(value) { + } +} + +fun main(args : Array) { +} + +val globalVal : #(Int, String) = #(239, "239") + +val globalValWithGetter : Long +get() { + return System.currentTimeMillis() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/libraries/LibrariesTest.java b/idea/tests/org/jetbrains/jet/plugin/libraries/LibrariesTest.java new file mode 100644 index 00000000000..964184ca7d7 --- /dev/null +++ b/idea/tests/org/jetbrains/jet/plugin/libraries/LibrariesTest.java @@ -0,0 +1,80 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.libraries; + +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.roots.OrderRootType; +import com.intellij.openapi.roots.libraries.Library; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.testFramework.PlatformTestCase; +import org.jetbrains.jet.cli.KotlinCompiler; +import org.jetbrains.jet.plugin.PluginTestCaseBase; + +/** + * @author Evgeny Gerashchenko + * @since 3/11/12 + */ +public class LibrariesTest extends PlatformTestCase { + + private static final String PACKAGE = "testData.libraries"; + private static final String TEST_DATA_PATH = PluginTestCaseBase.getTestDataPathBase() + "/libraries"; + private VirtualFile myLibraryDir; + + public void testAbstractClass() { + doTest(); + } + + private void doTest() { + String testName = getTestName(false); + VirtualFile packageDir = myLibraryDir.findFileByRelativePath(PACKAGE.replace(".", "/")); + assertNotNull(packageDir); + VirtualFile classFile = packageDir.findChild(testName + ".class"); + assertNotNull(classFile); + Document document = FileDocumentManager.getInstance().getDocument(classFile); + assert document != null; + String decompiledText = document.getText(); + assertSameLinesWithFile(TEST_DATA_PATH + "/" + testName + ".kt", decompiledText); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + String libraryDir = FileUtil.getTempDirectory(); + KotlinCompiler.exec("-src", TEST_DATA_PATH + "/library", "-output", libraryDir); + myLibraryDir = LocalFileSystem.getInstance().findFileByPath(libraryDir); + assertNotNull(myLibraryDir); + + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + ModifiableRootModel moduleModel = ModuleRootManager.getInstance(myModule).getModifiableModel(); + + Library.ModifiableModel libraryModel = moduleModel.getModuleLibraryTable().getModifiableModel().createLibrary("myKotlinLib").getModifiableModel(); + libraryModel.addRoot(myLibraryDir, OrderRootType.CLASSES); + libraryModel.commit(); + + moduleModel.commit(); + } + }); + } +}