/* * Copyright 2010-2015 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.kotlin.jps.build.kannotator; import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.builders.BuildResult; import org.jetbrains.jps.model.module.JpsModule; import org.jetbrains.jps.model.module.JpsModuleSourceRoot; import org.jetbrains.kotlin.incremental.testingUtils.ClassFilesComparisonKt; import org.jetbrains.kotlin.jps.build.AbstractKotlinJpsBuildTestCase; import java.io.File; import java.io.IOException; public class KannotatorJpsTest extends AbstractKotlinJpsBuildTestCase { private static final String JDK_NAME = "1.6"; @Override public void setUp() throws Exception { super.setUp(); File sourceFilesRoot = new File(TEST_DATA_PATH + File.separator + "kannotator"); workDir = copyTestDataToTmpDir(sourceFilesRoot); } public void testMakeKannotator() throws IOException { initProject(); rebuildAllModules(); FileUtil.copyDir(getOutDir(), getOutDirAfterRebuild()); for (JpsModule module : myProject.getModules()) { for (JpsModuleSourceRoot sourceRoot : module.getSourceRoots()) { processFile(sourceRoot.getFile()); } } } @NotNull private File getOutDir() { return new File(workDir, "out"); } @NotNull private File getOutDirAfterRebuild() { return new File(workDir, "out-after-rebuild"); } private void processFile(File root) { if (root.isDirectory()) { File[] files = root.listFiles(); if (files == null) return; for (File file : files) { processFile(file); } } else if (root.getName().endsWith(".kt")) { System.out.println("Test started. File: " + root.getName()); String path = root.getAbsolutePath(); System.out.println("Change file: " + path); change(path); buildAllModules().assertSuccessful(); System.out.println("Make successful"); System.out.println("Checking output directories after make and rebuild"); ClassFilesComparisonKt .assertEqualDirectories(new File(getOutDirAfterRebuild(), "production"), new File(getOutDir(), "production"), false); ClassFilesComparisonKt.assertEqualDirectories(new File(getOutDirAfterRebuild(), "test"), new File(getOutDir(), "test"), false); System.out.println("Test successfully finished. File: " + root.getName()); System.out.println("-----"); } } @Override protected void rebuildAllModules() { System.out.println("'Rebuild all' started"); super.rebuildAllModules(); System.out.println("'Rebuild all' finished"); } @NotNull @Override protected BuildResult buildAllModules() { System.out.println("'Make all' started"); BuildResult result = super.buildAllModules(); System.out.println("'Make all' finished"); return result; } private void initProject() { addJdk(JDK_NAME); loadProject(workDir.getAbsolutePath()); addKotlinRuntimeDependency(); } @Override public void tearDown() throws Exception { FileUtil.delete(workDir); super.tearDown(); } }