/* * 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.cli.common.messages; import junit.framework.TestCase; import java.io.File; import java.util.Arrays; import java.util.List; public class OutputMessageUtilTest extends TestCase { enum TargetOS { UNIX { @Override public String convert(String path) { return path.replace('\\', '/'); } }, WINDOWS { @Override public String convert(String path) { // convert absolute paths to declare their disk as C: if (path.startsWith("/")) { path = "C:" + path; } return path.replace('/', '\\'); } }; public abstract String convert(String path); } private static void doTest(String outputPath, String... sourcePathArray) { doTest(TargetOS.UNIX, outputPath, sourcePathArray); doTest(TargetOS.WINDOWS, outputPath, sourcePathArray); } private static void doTest(TargetOS os, String outputPath, String... sourcePathArray) { File[] sourceFileArray = new File[sourcePathArray.length]; for (int i = 0; i < sourcePathArray.length; i++) { String path = sourcePathArray[i]; sourceFileArray[i] = new File(os.convert(path)); } doTest(new File(os.convert(outputPath)), sourceFileArray); } private static void doTest(File outputFile, File... sourceFileArray) { List<File> sourceFiles = Arrays.asList(sourceFileArray); String message = OutputMessageUtil.formatOutputMessage(sourceFiles, outputFile); OutputMessageUtil.Output output = OutputMessageUtil.parseOutputMessage(message); assertNotNull("Output is null", output); assertEquals(sourceFiles, output.sourceFiles); assertEquals(outputFile, output.outputFile); } public void testOneInOneOut() throws Exception { doTest("foo/bar.class", "foo/bar.kt"); doTest("/foo/bar.class", "/foo/bar.kt"); doTest("/foo/bar.class", "foo/bar.kt"); doTest("foo/bar.class", "/foo/bar.kt"); } public void testTwoInOneOut() throws Exception { doTest("foo/bar.class", "foo/bar.kt", "foo/buzz.kt"); doTest("/foo/bar.class", "/foo/bar.kt", "/foo/buzz.kt"); doTest("foo/bar.class", "/foo/bar.kt", "foo/buzz.kt"); doTest("foo/bar.class", "foo/bar.kt", "/foo/buzz.kt"); } public void testOneInNoneOut() throws Exception { doTest("foo/bar.class"); doTest("/foo/bar.class"); } public void testWrongStart() throws Exception { assertNull(OutputMessageUtil.parseOutputMessage("foo\nOutput:\nfoo")); } public void testTwoOuts() throws Exception { assertNull(OutputMessageUtil.parseOutputMessage("Output:\nfoo\nbar\nInputs:\n")); } public void testTooFewStrings() throws Exception { assertNull(OutputMessageUtil.parseOutputMessage("Output:\nInputs:")); } }