blob: d6f2c01e65379d346cf6c51b35160d4e8016435b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.harmony.tests.internal.net.www.protocol.file;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import junit.framework.TestCase;
import libcore.io.Streams;
import libcore.net.url.FileURLConnection;
/**
* Tests for <code>FileURLConnection</code> class constructors and methods.
*/
public class FileURLConnectionTest extends TestCase {
private static final String RESOURCE_NAME = "resources/test.rtf";
private final ClassLoader loader = FileURLConnectionTest.class.getClassLoader();
private URL createTempFileWithContent(String resourceName) throws IOException {
InputStream is = null;
OutputStream os = null;
try {
final URL url = loader.getResource(resourceName);
assertNotNull("Cannot find test resource " + resourceName, url);
is = url.openStream();
File file = File.createTempFile("FileURLConnectionTest",
resourceName.substring(resourceName.indexOf(".")));
os = new BufferedOutputStream(new FileOutputStream(file));
Streams.copy(is, os);
return new URL("file://" + file.getAbsolutePath());
} finally {
if (is != null) {
is.close();
}
if (os != null) {
os.close();
}
}
}
private String getContentType(String fileName) throws IOException {
String resourceName = "resources/" + fileName;
URL url = createTempFileWithContent(resourceName);
return new FileURLConnection(url).getContentType();
}
public void testGetContentType() throws IOException {
// Regression for HARMONY-4699
assertEquals("text/rtf", getContentType("test.rtf"));
// RI would return "content/unknown"
assertEquals("application/msword", getContentType("test.doc"));
assertEquals("text/html", getContentType("test.htx"));
assertEquals("text/xml", getContentType("test.xml"));
assertEquals("text/html",
new FileURLConnection(new URL("file:///")).getContentType());
}
public void testGetInputStream() throws IOException {
// Regression for Harmony-5737
URL url = createTempFileWithContent(RESOURCE_NAME);
assertNotNull(url);
URL anchorUrl = new URL(url, "#anchor");
assertNotNull("Cannot find test resource " + RESOURCE_NAME, anchorUrl);
FileURLConnection conn = new FileURLConnection(anchorUrl);
assertNotNull(conn.getInputStream());
}
public void testGetInputStream_localHost() throws IOException {
// Regression for Harmony-5779
URL url = createTempFileWithContent(RESOURCE_NAME);
String localURLString = "file://localhost/" + url.getFile();
URL localURL = new URL(localURLString);
FileURLConnection conn = new FileURLConnection(localURL);
assertNotNull(conn.getInputStream());
assertEquals("file", conn.getURL().getProtocol());
}
public void testHeaderFunctions() throws IOException {
URL url = createTempFileWithContent(RESOURCE_NAME);
FileURLConnection conn = new FileURLConnection(url);
assertNotNull(conn.getInputStream());
assertEquals(conn.getContentType(), conn.getHeaderField("content-type"));
url = createTempFileWithContent(RESOURCE_NAME);
conn = new FileURLConnection(url);
assertNotNull(conn.getInputStream());
assertEquals(conn.getContentType(), conn.getHeaderField("content-type"));
assertEquals(Integer.toString(conn.getContentLength()),
conn.getHeaderField("content-length"));
assertEquals(conn.getHeaderField(0), conn.getHeaderField("content-type"));
assertEquals(conn.getHeaderField(1), conn.getHeaderField("content-length"));
assertEquals(conn.getHeaderField(2), conn.getHeaderField("last-modified"));
assertEquals("last-modified", conn.getHeaderFieldKey(2));
assertEquals("content-length", conn.getHeaderFieldKey(1));
assertEquals("content-type", conn.getHeaderFieldKey(0));
}
public void testHeader_BoundaryCheck() throws IOException {
URL url = createTempFileWithContent(RESOURCE_NAME);
URLConnection urlConnection = url.openConnection();
assertNull(urlConnection.getHeaderField(Integer.MIN_VALUE));
assertNull(urlConnection.getHeaderField(Integer.MAX_VALUE));
assertNull(urlConnection.getHeaderFieldKey(Integer.MIN_VALUE));
assertNull(urlConnection.getHeaderFieldKey(Integer.MAX_VALUE));
assertNull(urlConnection.getHeaderField(null));
}
}