1   /*
2    * $Source: /usr/cvsroot/melati/melati/src/test/java/org/melati/util/test/AcceptCharsetTest.java,v $
3    * $Revision: 1.9 $
4    *
5    * Copyright (C) 2003 Jim Wright
6    *
7    * Part of Melati (http://melati.org), a framework for the rapid
8    * development of clean, maintainable web applications.
9    *
10   * Melati is free software; Permission is granted to copy, distribute
11   * and/or modify this software under the terms either:
12   *
13   * a) the GNU General Public License as published by the Free Software
14   *    Foundation; either version 2 of the License, or (at your option)
15   *    any later version,
16   *
17   *    or
18   *
19   * b) any version of the Melati Software License, as published
20   *    at http://melati.org
21   *
22   * You should have received a copy of the GNU General Public License and
23   * the Melati Software License along with this program;
24   * if not, write to the Free Software Foundation, Inc.,
25   * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
26   * GNU General Public License and visit http://melati.org to obtain the
27   * Melati Software License.
28   *
29   * Feel free to contact the Developers of Melati (http://melati.org),
30   * if you would like to work out a different arrangement than the options
31   * outlined here.  It is our intention to allow Melati to be used by as
32   * wide an audience as possible.
33   *
34   * This program is distributed in the hope that it will be useful,
35   * but WITHOUT ANY WARRANTY; without even the implied warranty of
36   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
37   * GNU General Public License for more details.
38   *
39   * Contact details for copyright holder:
40   *
41   *     Jim Wright <jimw@paneris.org>
42   *     Bohemian Enterprise
43   *     Predmerice nad Jizerou 77
44   *     294 74
45   *     Mlada Boleslav
46   *     Czech Republic
47   */
48  
49  package org.melati.util.test;
50  
51  
52  import java.util.Arrays;
53  
54  import junit.framework.TestCase;
55  
56  import org.melati.util.AcceptCharset;
57  import org.melati.util.HttpHeader;
58  
59  /**
60   * Tests the corresponding class in the superpackage.
61   *
62   * @see AcceptCharset
63   * @author jimw At paneris.org
64   * @version $Version: $
65   */
66  public class AcceptCharsetTest extends TestCase {
67  
68    /**
69     * Constructor.
70     */
71    public AcceptCharsetTest(String testCaseName) {
72      super(testCaseName);
73    }
74  
75    /**
76     * Test choosing charsets.
77     */
78    public void testChoices() throws Exception {
79  
80      String headerValue = "ISO-8859-2, utf-8;q=0.66, *;q=0.66";
81      String supportedPreference[] = new String[] {
82        "UTF-16",
83        "UTF-8",
84        "ISO-8859-1",
85      };
86      AcceptCharset ac = new AcceptCharset(headerValue, Arrays.asList(supportedPreference));
87      assertEquals("ISO-8859-2", ac.clientChoice());
88      assertEquals("UTF-16", ac.serverChoice());
89  
90      headerValue = "utf-8;q=0.66,ISO-8859-3,ISO-8859-2";
91      supportedPreference = new String[] {
92        "ISO-8859-1",
93        "UTF-16",
94        "UTF-8",
95        "BOLLOX",
96      };
97      
98      ac = new AcceptCharset(headerValue, Arrays.asList(supportedPreference));
99      assertEquals("ISO-8859-3", ac.clientChoice());
100     assertEquals("ISO-8859-1", ac.serverChoice());
101 
102     headerValue = "*;q=0.0";
103     supportedPreference = new String[] {
104       "UTF-16",
105       "UTF-8",
106       "BOLLOX",
107       "ISO-8859-1",
108     };
109     ac = new AcceptCharset(headerValue, Arrays.asList(supportedPreference));
110     assertEquals(null, ac.clientChoice());
111     assertEquals(null, ac.serverChoice());
112 
113     ac = new AcceptCharset(null, Arrays.asList(supportedPreference));
114     assertEquals("ISO-8859-1", ac.clientChoice());
115     assertEquals("ISO-8859-1", ac.serverChoice());
116 
117     try { 
118       ac = new AcceptCharset("BOLLOX", Arrays.asList(supportedPreference));
119       fail("Should have blown up");
120     } catch (HttpHeader.HttpHeaderException e) { 
121       e = null;
122     }
123 
124   }
125 
126 }
127