001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package org.openide.util;
043:
044: import java.io.*;
045: import java.net.URL;
046: import java.net.URLConnection;
047: import org.netbeans.junit.*;
048: import junit.textui.TestRunner;
049:
050: /** Test <code>File</code> ↔ <code>URL</code> conversion.
051: * @author Jesse Glick
052: * @see "#29711"
053: */
054: public class UtilitiesFileURLConvertorTest extends NbTestCase {
055:
056: public UtilitiesFileURLConvertorTest(String name) {
057: super (name);
058: }
059:
060: public static void main(String[] args) {
061: TestRunner.run(new NbTestSuite(
062: UtilitiesFileURLConvertorTest.class));
063: }
064:
065: public void testFileURLConversion() throws Exception {
066: File f = File.createTempFile("foo", ".txt");
067: check(f);
068: File tmp = f.getParentFile();
069: f = new File(tmp, "with a space.txt");
070: check(f);
071: // May seem strange but (#27330) hashes in paths are not so unheard-of.
072: // Importantly, some Unix VC system (which?) uses them.
073: f = new File(tmp, "strange#characters.txt");
074: check(f);
075: f = new File(tmp, "stranger?characters.txt");
076: check(f);
077: }
078:
079: private void check(File f) throws Exception {
080: f.deleteOnExit();
081: URL u = Utilities.toURL(f);
082: assertEquals("correct protocol", "file", u.getProtocol());
083: System.err.println("URL=" + u);
084: //assertTrue(u.toExternalForm().indexOf(f.getName()) != -1);
085: File f2 = Utilities.toFile(u);
086: assertEquals("converts back to same file", f, f2);
087: assertEquals("no dangling references", null, u.getRef());
088: assertEquals("no dangling queries", null, u.getQuery());
089: OutputStream os = null;
090: try {
091: os = new FileOutputStream(f);
092: } catch (FileNotFoundException e) {
093: // OK, OS does not permit such a file
094: return;
095: }
096: os.write(1);
097: os.write(2);
098: os.write(3);
099: os.write(4);
100: os.write(5);
101: os.close();
102: URLConnection conn = u.openConnection();
103: conn.connect();
104: assertEquals("URL connection works", 5, conn.getContentLength());
105: }
106:
107: }
|