| /* |
| * 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.sling.servlets.post.impl.helper; |
| |
| import junit.framework.TestCase; |
| import org.apache.sling.commons.testing.sling.MockSlingHttpServletRequest; |
| |
| import java.util.Enumeration; |
| |
| public class MediaRangeListTest extends TestCase { |
| protected MediaRangeList rangeList; |
| |
| public void setUp() throws Exception { |
| super.setUp(); |
| rangeList = new MediaRangeList("text/*;q=0.3, text/html;q=0.7, text/html;level=1,\n" + |
| " text/html;level=2;q=0.4, */*;q=0.5"); |
| } |
| |
| public void testContains() throws Exception { |
| assertTrue(rangeList.contains("text/html")); |
| assertTrue(rangeList.contains("application/json")); // Since rangeList contains */* |
| assertTrue(rangeList.contains("text/plain")); |
| } |
| |
| public void testPrefer() throws Exception { |
| assertEquals("text/html;level=1", rangeList.prefer("text/html;level=1", "*/*")); |
| } |
| |
| public void testPreferJson() { |
| MediaRangeList rangeList = new MediaRangeList("text/html;q=0.8, application/json"); |
| assertEquals("application/json", rangeList.prefer("text/html", "application/json")); |
| } |
| |
| public void testHttpEquivParam() { |
| MockSlingHttpServletRequest req = new MockSlingHttpServlet3Request(null, null, null, null, null) { |
| @Override |
| public String getHeader(String name) { |
| return name.equals(MediaRangeList.HEADER_ACCEPT) ? "text/plain" : super.getHeader(name); |
| } |
| |
| @Override |
| public String getParameter(String name) { |
| return name.equals(MediaRangeList.PARAM_ACCEPT) ? "text/html" : super.getParameter(name); |
| } |
| |
| @Override |
| public Enumeration<String> getHeaderNames() { |
| return null; |
| } |
| |
| public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) { |
| return null; |
| } |
| }; |
| MediaRangeList rangeList = new MediaRangeList(req); |
| assertTrue("Did not contain media type from query param", rangeList.contains("text/html")); |
| assertFalse("Contained media type from overridden Accept header", rangeList.contains("text/plain")); |
| } |
| |
| public void testInvalidJdkAcceptHeader() { |
| //This header is sent by Java client which make use of URLConnection on Oracle JDK |
| //See acceptHeader at http://hg.openjdk.java.net/jdk6/jdk6-gate/jdk/file/tip/src/share/classes/sun/net/www/protocol/http/HttpURLConnection.java |
| //To support such case the MediaRange parser has to be made bit linient |
| final String invalidHeader = "text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2"; |
| MockSlingHttpServletRequest req = new MockSlingHttpServlet3Request(null, null, null, null, null) { |
| @Override |
| public String getHeader(String name) { |
| return name.equals(MediaRangeList.HEADER_ACCEPT) ? invalidHeader : super.getHeader(name); |
| } |
| |
| public <AdapterType> AdapterType adaptTo(Class<AdapterType> type) { |
| return null; |
| } |
| }; |
| MediaRangeList rangeList = new MediaRangeList(req); |
| assertTrue("Did not contain media type from query param", rangeList.contains("text/html")); |
| } |
| } |