+++ /dev/null
-/*******************************************************************************
- * Copyright (c) 2000, 2004 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- *******************************************************************************/
-package net.sourceforge.phpdt.core.tests.util;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.net.ServerSocket;
-
-import net.sourceforge.phpdt.internal.compiler.batch.CompilationUnit;
-
-public class Util {
- public static String OUTPUT_DIRECTORY = "comptest";
-
- public static CompilationUnit[] compilationUnits(String[] testFiles) {
- int length = testFiles.length / 2;
- CompilationUnit[] result = new CompilationUnit[length];
- int index = 0;
- for (int i = 0; i < length; i++) {
- result[i] = new CompilationUnit(testFiles[index + 1].toCharArray(),
- testFiles[index], null);
- index += 2;
- }
- return result;
- }
-
- public static String[] concatWithClassLibs(String classpath, boolean inFront) {
- String[] classLibs = getJavaClassLibs();
- final int length = classLibs.length;
- String[] defaultClassPaths = new String[length + 1];
- if (inFront) {
- System.arraycopy(classLibs, 0, defaultClassPaths, 1, length);
- defaultClassPaths[0] = classpath;
- } else {
- System.arraycopy(classLibs, 0, defaultClassPaths, 0, length);
- defaultClassPaths[length] = classpath;
- }
- return defaultClassPaths;
- }
-
- public static String convertToIndependantLineDelimiter(String source) {
- StringBuffer buffer = new StringBuffer();
- for (int i = 0, length = source.length(); i < length; i++) {
- char car = source.charAt(i);
- if (car == '\r') {
- buffer.append('\n');
- if (i < length - 1 && source.charAt(i + 1) == '\n') {
- i++; // skip \n after \r
- }
- } else {
- buffer.append(car);
- }
- }
- return buffer.toString();
- }
-
- /**
- * Copy the given source (a file or a directory that must exists) to the
- * given destination (a directory that must exists).
- */
- public static void copy(String sourcePath, String destPath) {
- sourcePath = toNativePath(sourcePath);
- destPath = toNativePath(destPath);
- File source = new File(sourcePath);
- if (!source.exists())
- return;
- File dest = new File(destPath);
- if (!dest.exists())
- return;
- if (source.isDirectory()) {
- String[] files = source.list();
- if (files != null) {
- for (int i = 0; i < files.length; i++) {
- String file = files[i];
- File sourceFile = new File(source, file);
- if (sourceFile.isDirectory()) {
- File destSubDir = new File(dest, file);
- destSubDir.mkdir();
- copy(sourceFile.getPath(), destSubDir.getPath());
- } else {
- copy(sourceFile.getPath(), dest.getPath());
- }
- }
- }
- } else {
- FileInputStream in = null;
- FileOutputStream out = null;
- try {
- in = new FileInputStream(source);
- File destFile = new File(dest, source.getName());
- if (destFile.exists() && !destFile.delete()) {
- throw new IOException(destFile + " is in use");
- }
- out = new FileOutputStream(destFile);
- int bufferLength = 1024;
- byte[] buffer = new byte[bufferLength];
- int read = 0;
- while (read != -1) {
- read = in.read(buffer, 0, bufferLength);
- if (read != -1) {
- out.write(buffer, 0, read);
- }
- }
- } catch (IOException e) {
- throw new Error(e.toString());
- } finally {
- if (in != null) {
- try {
- in.close();
- } catch (IOException e) {
- }
- }
- if (out != null) {
- try {
- out.close();
- } catch (IOException e) {
- }
- }
- }
- }
- }
-
- // public static void createJar(String[] pathsAndContents, Map options,
- // String
- // jarPath) throws IOException {
- // String classesPath = getOutputDirectory() + File.separator + "classes";
- // File classesDir = new File(classesPath);
- // flushDirectoryContent(classesDir);
- // compile(pathsAndContents, options, classesPath);
- // zip(classesDir, jarPath);
- // }
- /**
- * Generate a display string from the given String.
- *
- * @param indent
- * number of tabs are added at the begining of each line.
- *
- * Example of use:
- * [org.eclipse.jdt.core.tests.util.Util.displayString("abc\ndef\tghi")]
- */
- public static String displayString(String inputString) {
- return displayString(inputString, 0);
- }
-
- /**
- * Generate a display string from the given String. It converts:
- * <ul>
- * <li>\t to \t</li>
- * <li>\r to \\r</li>
- * <li>\n to \n</li>
- * <li>\b to \\b</li>
- * <li>\f to \\f</li>
- * <li>\" to \\\"</li>
- * <li>\' to \\'</li>
- * <li>\\ to \\\\</li>
- * <li>All other characters are unchanged.</li>
- * </ul>
- * This method doesn't convert \r\n to \n.
- * <p>
- * Example of use: <o>
- * <li>
- *
- * <pre>
- * input string = "abc\ndef\tghi",
- * indent = 3
- * result = "\"\t\t\tabc\\n" +
- * "\t\t\tdef\tghi\""
- * </pre>
- *
- * </li>
- * <li>
- *
- * <pre>
- * input string = "abc\ndef\tghi\n",
- * indent = 3
- * result = "\"\t\t\tabc\\n" +
- * "\t\t\tdef\tghi\\n\""
- * </pre>
- *
- * </li>
- * <li>
- *
- * <pre>
- * input string = "abc\r\ndef\tghi\r\n",
- * indent = 3
- * result = "\"\t\t\tabc\\r\\n" +
- * "\t\t\tdef\tghi\\r\\n\""
- * </pre>
- *
- * </li>
- * </ol>
- * </p>
- *
- * @param inputString
- * the given input string
- * @param indent
- * number of tabs are added at the begining of each line.
- *
- * @return the displayed string
- */
- public static String displayString(String inputString, int indent) {
- int length = inputString.length();
- StringBuffer buffer = new StringBuffer(length);
- java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(
- inputString, "\n\r", true);
- for (int i = 0; i < indent; i++)
- buffer.append("\t");
- buffer.append("\"");
- while (tokenizer.hasMoreTokens()) {
-
- String token = tokenizer.nextToken();
- if (token.equals("\r")) {
- buffer.append("\\r");
- if (tokenizer.hasMoreTokens()) {
- token = tokenizer.nextToken();
- if (token.equals("\n")) {
- buffer.append("\\n");
- if (tokenizer.hasMoreTokens()) {
- buffer.append("\" + \n");
- for (int i = 0; i < indent; i++)
- buffer.append("\t");
- buffer.append("\"");
- }
- continue;
- } else {
- buffer.append("\" + \n");
- for (int i = 0; i < indent; i++)
- buffer.append("\t");
- buffer.append("\"");
- }
- } else {
- continue;
- }
- } else if (token.equals("\n")) {
- buffer.append("\\n");
- if (tokenizer.hasMoreTokens()) {
- buffer.append("\" + \n");
- for (int i = 0; i < indent; i++)
- buffer.append("\t");
- buffer.append("\"");
- }
- continue;
- }
-
- StringBuffer tokenBuffer = new StringBuffer();
- for (int i = 0; i < token.length(); i++) {
- char c = token.charAt(i);
- switch (c) {
- case '\r':
- tokenBuffer.append("\\r");
- break;
- case '\n':
- tokenBuffer.append("\\n");
- break;
- case '\b':
- tokenBuffer.append("\\b");
- break;
- case '\t':
- tokenBuffer.append("\t");
- break;
- case '\f':
- tokenBuffer.append("\\f");
- break;
- case '\"':
- tokenBuffer.append("\\\"");
- break;
- case '\'':
- tokenBuffer.append("\\'");
- break;
- case '\\':
- tokenBuffer.append("\\\\");
- break;
- default:
- tokenBuffer.append(c);
- }
- }
- buffer.append(tokenBuffer.toString());
- }
- buffer.append("\"");
- return buffer.toString();
- }
-
- /**
- * Reads the content of the given source file and converts it to a display
- * string.
- *
- * Example of use:
- * [org.eclipse.jdt.core.tests.util.Util.fileContentToDisplayString("c:/temp/X.java",
- * 0)]
- */
- public static String fileContentToDisplayString(String sourceFilePath,
- int indent, boolean independantLineDelimiter) {
- File sourceFile = new File(sourceFilePath);
- if (!sourceFile.exists()) {
- System.out.println("File " + sourceFilePath + " does not exists.");
- return null;
- }
- if (!sourceFile.isFile()) {
- System.out.println(sourceFilePath + " is not a file.");
- return null;
- }
- StringBuffer sourceContentBuffer = new StringBuffer();
- FileInputStream input = null;
- try {
- input = new FileInputStream(sourceFile);
- } catch (FileNotFoundException e) {
- return null;
- }
- try {
- int read;
- do {
- read = input.read();
- if (read != -1) {
- sourceContentBuffer.append((char) read);
- }
- } while (read != -1);
- input.close();
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- } finally {
- try {
- input.close();
- } catch (IOException e2) {
- }
- }
- String sourceString = sourceContentBuffer.toString();
- if (independantLineDelimiter) {
- sourceString = convertToIndependantLineDelimiter(sourceString);
- }
- return displayString(sourceString, indent);
- }
-
- /**
- * Reads the content of the given source file, converts it to a display
- * string. If the destination file path is not null, writes the result to
- * this file. Otherwise writes it to the console.
- *
- * Example of use:
- * [org.eclipse.jdt.core.tests.util.Util.fileContentToDisplayString("c:/temp/X.java",
- * 0, null)]
- */
- public static void fileContentToDisplayString(String sourceFilePath,
- int indent, String destinationFilePath,
- boolean independantLineDelimiter) {
- String displayString = fileContentToDisplayString(sourceFilePath,
- indent, independantLineDelimiter);
- if (destinationFilePath == null) {
- System.out.println(displayString);
- return;
- }
- writeToFile(displayString, destinationFilePath);
- }
-
- /**
- * Flush content of a given directory (leaving it empty), no-op if not a
- * directory.
- */
- public static void flushDirectoryContent(File dir) {
- if (dir.isDirectory()) {
- String[] files = dir.list();
- if (files == null)
- return;
- for (int i = 0, max = files.length; i < max; i++) {
- File current = new File(dir, files[i]);
- if (current.isDirectory()) {
- flushDirectoryContent(current);
- }
- current.delete();
- }
- }
- }
-
- /**
- * Search the user hard-drive for a Java class library. Returns null if none
- * could be found.
- *
- * Example of use: [org.eclipse.jdt.core.tests.util.Util.getJavaClassLib()]
- */
- public static String[] getJavaClassLibs() {
- String jreDir = getJREDirectory();
- if (jreDir == null) {
- return new String[] {};
- } else {
- final String vmName = System.getProperty("java.vm.name");
- if ("J9".equals(vmName)) {
- return new String[] { toNativePath(jreDir
- + "/lib/jclMax/classes.zip") };
- } else {
- File file = new File(jreDir + "/lib/rt.jar");
- if (file.exists()) {
- return new String[] { toNativePath(jreDir + "/lib/rt.jar") };
- } else {
- return new String[] {
- toNativePath(jreDir + "/lib/core.jar"),
- toNativePath(jreDir + "/lib/security.jar"),
- toNativePath(jreDir + "/lib/graphics.jar") };
- }
- }
- }
- }
-
- public static String getJavaClassLibsAsString() {
- String[] classLibs = getJavaClassLibs();
- StringBuffer buffer = new StringBuffer();
- for (int i = 0, max = classLibs.length; i < max; i++) {
- buffer.append(classLibs[i]).append(File.pathSeparatorChar);
-
- }
- return buffer.toString();
- }
-
- /**
- * Returns the JRE directory this tests are running on. Returns null if none
- * could be found.
- *
- * Example of use: [org.eclipse.jdt.core.tests.util.Util.getJREDirectory()]
- */
- public static String getJREDirectory() {
- return System.getProperty("java.home");
- }
-
- /**
- * Search the user hard-drive for a possible output directory. Returns null
- * if none could be found.
- *
- * Example of use:
- * [org.eclipse.jdt.core.tests.util.Util.getOutputDirectory()]
- */
- public static String getOutputDirectory() {
- String container = System.getProperty("user.home");
- if (container == null) {
- return null;
- } else {
- return toNativePath(container) + File.separator + OUTPUT_DIRECTORY;
- }
- }
-
- /**
- * Returns the next available port number on the local host.
- */
- public static int getFreePort() {
- ServerSocket socket = null;
- try {
- socket = new ServerSocket(0);
- return socket.getLocalPort();
- } catch (IOException e) {
- // ignore
- } finally {
- if (socket != null) {
- try {
- socket.close();
- } catch (IOException e) {
- // ignore
- }
- }
- }
- return -1;
- }
-
- /**
- * Makes the given path a path using native path separators as returned by
- * File.getPath() and trimming any extra slash.
- */
- public static String toNativePath(String path) {
- String nativePath = path.replace('\\', File.separatorChar).replace('/',
- File.separatorChar);
- return nativePath.endsWith("/") || nativePath.endsWith("\\") ? nativePath
- .substring(0, nativePath.length() - 1)
- : nativePath;
- }
-
- public static void writeToFile(String contents, String destinationFilePath) {
- File destFile = new File(destinationFilePath);
- FileOutputStream output = null;
- try {
- output = new FileOutputStream(destFile);
- PrintWriter writer = new PrintWriter(output);
- writer.print(contents);
- writer.flush();
- } catch (IOException e) {
- e.printStackTrace();
- return;
- } finally {
- if (output != null) {
- try {
- output.close();
- } catch (IOException e2) {
- }
- }
- }
- }
-}