1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17package org.apache.harmony.luni.tests.internal.net.www.protocol.file;
18
19import java.io.IOException;
20import java.net.URL;
21import java.net.URLConnection;
22
23import junit.framework.TestCase;
24
25import libcore.net.url.FileURLConnection;
26
27/**
28 * Tests for <code>FileURLConnection</code> class constructors and methods.
29 */
30public class FileURLConnectionTest extends TestCase {
31
32    static String getContentType(String fileName) throws IOException {
33        String resourceName = "org/apache/harmony/luni/tests/" + fileName;
34        URL url = ClassLoader.getSystemClassLoader().getResource(resourceName);
35        assertNotNull("Cannot find test resource " + resourceName, url);
36        return new FileURLConnection(url).getContentType();
37    }
38
39    public void testGetContentType() throws IOException {
40        // Regression for HARMONY-4699
41        assertEquals("application/rtf", getContentType("test.rtf"));
42        assertEquals("text/plain", getContentType("test.java"));
43        // RI would return "content/unknown"
44        assertEquals("application/msword", getContentType("test.doc"));
45        assertEquals("text/html", getContentType("test.htx"));
46        assertEquals("application/xml", getContentType("test.xml"));
47        assertEquals("text/plain", getContentType("."));
48    }
49
50    public void testGetInputStream() throws IOException {
51        // Regression for Harmony-5737
52        String resourceName = "org/apache/harmony/luni/tests/" + "test.rtf";
53        URL url = ClassLoader.getSystemClassLoader().getResource(resourceName);
54        URL anchorUrl = new URL(url, "#anchor");
55        assertNotNull("Cannot find test resource " + resourceName, anchorUrl);
56
57        FileURLConnection conn = new FileURLConnection(anchorUrl);
58        assertNotNull(conn.getInputStream());
59
60        // Regression for Harmony-5779
61        String localURLString = "file://localhost/" + url.getFile();
62        URL localURL = new URL(localURLString);
63        conn = new FileURLConnection(localURL);
64        assertNotNull(conn.getInputStream());
65        assertEquals("file", conn.getURL().getProtocol());
66    }
67
68    public void testHeaderFunctions() throws IOException {
69        String resourceName = "org/apache/harmony/luni/tests/";  //folder name
70        URL url = ClassLoader.getSystemClassLoader().getResource(resourceName);
71        FileURLConnection conn = new FileURLConnection(url);
72        assertNotNull(conn.getInputStream());
73        assertEquals(conn.getContentType(), conn.getHeaderField("content-type"));
74
75        resourceName = "org/apache/harmony/luni/tests/" + "test.rtf";
76        ;  //folder name
77        url = ClassLoader.getSystemClassLoader().getResource(resourceName);
78        conn = new FileURLConnection(url);
79        assertNotNull(conn.getInputStream());
80        assertEquals(conn.getContentType(), conn.getHeaderField("content-type"));
81        assertEquals(Integer.toString(conn.getContentLength()), conn.getHeaderField("content-length"));
82        assertEquals(conn.getHeaderField(0), conn.getHeaderField("content-type"));
83        assertEquals(conn.getHeaderField(1), conn.getHeaderField("content-length"));
84        assertEquals(conn.getHeaderField(2), conn.getHeaderField("last-modified"));
85        assertEquals("last-modified", conn.getHeaderFieldKey(2));
86        assertEquals("content-length", conn.getHeaderFieldKey(1));
87        assertEquals("content-type", conn.getHeaderFieldKey(0));
88    }
89
90    public void testHeader_BoundaryCheck() throws IOException {
91        String resourceName = "org/apache/harmony/luni/tests/";
92        URL url = ClassLoader.getSystemClassLoader().getResource(resourceName);
93        URLConnection urlConnection = url.openConnection();
94        assertNull(urlConnection.getHeaderField(Integer.MIN_VALUE));
95        assertNull(urlConnection.getHeaderField(Integer.MAX_VALUE));
96        assertNull(urlConnection.getHeaderFieldKey(Integer.MIN_VALUE));
97        assertNull(urlConnection.getHeaderFieldKey(Integer.MAX_VALUE));
98        assertNull(urlConnection.getHeaderField(null));
99    }
100}
101