Commits

Jan Brohl committed c52338b Merge

Merge with acc3d6601ba3100e8e735535062751e45c52957f
umstieg auf java 6

Comments (0)

Files changed (30)

File contents unchanged.
File contents unchanged.

.settings/org.eclipse.jdt.core.prefs

File contents unchanged.

.settings/org.eclipse.jdt.ui.prefs

+cleanup.add_default_serial_version_id=false
+cleanup.add_generated_serial_version_id=true
+cleanup.add_missing_annotations=true
+cleanup.add_missing_deprecated_annotations=true
+cleanup.add_missing_methods=false
+cleanup.add_missing_nls_tags=false
+cleanup.add_missing_override_annotations=true
+cleanup.add_missing_override_annotations_interface_methods=true
+cleanup.add_serial_version_id=true
+cleanup.always_use_blocks=false
+cleanup.always_use_parentheses_in_expressions=false
+cleanup.always_use_this_for_non_static_field_access=false
+cleanup.always_use_this_for_non_static_method_access=false
+cleanup.convert_to_enhanced_for_loop=false
+cleanup.correct_indentation=true
+cleanup.format_source_code=true
+cleanup.format_source_code_changes_only=false
+cleanup.make_local_variable_final=true
+cleanup.make_parameters_final=false
+cleanup.make_private_fields_final=true
+cleanup.make_type_abstract_if_missing_method=false
+cleanup.make_variable_declarations_final=false
+cleanup.never_use_blocks=false
+cleanup.never_use_parentheses_in_expressions=true
+cleanup.organize_imports=true
+cleanup.qualify_static_field_accesses_with_declaring_class=false
+cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
+cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+cleanup.qualify_static_member_accesses_with_declaring_class=true
+cleanup.qualify_static_method_accesses_with_declaring_class=false
+cleanup.remove_private_constructors=true
+cleanup.remove_trailing_whitespaces=true
+cleanup.remove_trailing_whitespaces_all=true
+cleanup.remove_trailing_whitespaces_ignore_empty=false
+cleanup.remove_unnecessary_casts=true
+cleanup.remove_unnecessary_nls_tags=true
+cleanup.remove_unused_imports=true
+cleanup.remove_unused_local_variables=false
+cleanup.remove_unused_private_fields=true
+cleanup.remove_unused_private_members=false
+cleanup.remove_unused_private_methods=true
+cleanup.remove_unused_private_types=true
+cleanup.sort_members=true
+cleanup.sort_members_all=false
+cleanup.use_blocks=true
+cleanup.use_blocks_only_for_return_and_throw=true
+cleanup.use_parentheses_in_expressions=false
+cleanup.use_this_for_non_static_field_access=true
+cleanup.use_this_for_non_static_field_access_only_if_necessary=true
+cleanup.use_this_for_non_static_method_access=true
+cleanup.use_this_for_non_static_method_access_only_if_necessary=true
+cleanup_profile=_scoutnetapi
+cleanup_settings_version=2
+eclipse.preferences.version=1
+formatter_settings_version=12

src/Example.java

File contents unchanged.

src/de/scoutnet/api/API.java

File contents unchanged.

src/de/scoutnet/api/Event.java

File contents unchanged.

src/de/scoutnet/api/Group.java

File contents unchanged.

src/de/scoutnet/api/GroupCollection.java

File contents unchanged.

src/de/scoutnet/api/ScoutnetCollection.java

File contents unchanged.

src/de/scoutnet/api/ScoutnetObject.java

File contents unchanged.

src/de/scoutnet/api/Section.java

File contents unchanged.

src/de/scoutnet/api/SectionCollection.java

File contents unchanged.

src/org/json/tests/SampleResourceBundle_en_US.java

+/*
+ * File:         SampleResourceBundle_en_US.java
+ * Author:       JSON.org
+ */
+package org.json.tests;
+
+import java.util.*;
+
+/**
+ * The Class SampleResourceBundle_en_US.
+ */
+public class SampleResourceBundle_en_US extends ListResourceBundle {
+    
+    /* (non-Javadoc)
+     * @see java.util.ListResourceBundle#getContents()
+     */
+    @Override
+    public Object[][] getContents() {
+        return contents;
+    }
+    
+    /** The contents. */
+    private Object[][] contents = {
+        { "ASCII", "American Standard Code for Information Interchange" },
+        { "JAVA.desc", "Just Another Vague Acronym" },
+        { "JAVA.data", "Sweet language" },
+        { "JSON", "JavaScript Object Notation" },
+    };
+}

src/org/json/tests/SampleResourceBundle_fr.java

+/*
+ * File:         SampleResourceBundle_fr.java
+ * Author:       JSON.org
+ */
+package org.json.tests;
+
+import java.util.*;
+
+/**
+ * The Class SampleResourceBundle_fr.
+ */
+public class SampleResourceBundle_fr extends ListResourceBundle {
+    
+    /* (non-Javadoc)
+     * @see java.util.ListResourceBundle#getContents()
+     */
+    @Override
+    public Object[][] getContents() {
+        return contents;
+    }
+    
+    /** The contents. */
+    private Object[][] contents = {
+            { "ASCII", "Number that represent chraracters" },
+            { "JAVA", "The language you are running to see this" },
+            { "JSON", "What are we testing?" },
+        };
+}

src/org/json/tests/TestCDL.java

+/*
+ * File: TestCDL.java Author: JSON.org
+ */
+package org.json.tests;
+
+import org.json.CDL;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.junit.Before;
+
+import junit.framework.TestCase;
+
+/**
+ * The Class TestCDL.
+ */
+public class TestCDL extends TestCase
+{
+
+    /** The string. */
+    private String string;
+
+    /** The jsonarray. */
+    private JSONArray jsonarray;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see junit.framework.TestCase#setUp()
+     */
+    @Before
+    @Override
+    public void setUp()
+    {
+        //@formatter:off
+        string = 
+            "abc,test,123\n" +
+            "gg,hh,jj\n" +
+            "aa,bb,cc\n";
+        //@formatter:on
+
+        try
+        {
+            jsonarray = new JSONArray();
+            JSONObject jo = new JSONObject();
+            JSONObject jo2 = new JSONObject();
+            jo.put("abc", "gg");
+            jo.put("test", "hh");
+            jo.put("123", "jj");
+            jo2.put("abc", "aa");
+            jo2.put("test", "bb");
+            jo2.put("123", "cc");
+            jsonarray.put(jo);
+            jsonarray.put(jo2);
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Tests the toJsonArray method.
+     */
+    public void testToJsonArray()
+    {
+
+        try
+        {
+            assertEquals(jsonarray.toString(), CDL.toJSONArray(string)
+                    .toString());
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Tests the toJsonArray method using No names.
+     */
+    public static void testToJsonArray_NoNames()
+    {
+
+        try
+        {
+            assertEquals(null, CDL.toJSONArray(new JSONArray(), "abc,123"));
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Tests the toJsonArray method using Null names.
+     */
+    public static void testToJsonArray_NullNames()
+    {
+
+        try
+        {
+            assertEquals(null, CDL.toJSONArray(null, "abc,123"));
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Tests the toJsonArray method using No data.
+     */
+    public static void testToJsonArray_NoData()
+    {
+
+        try
+        {
+            assertEquals(null, CDL.toJSONArray("abc,123\n"));
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Tests the toJsonArray method using weird data.
+     */
+    public void testToJsonArray_WeirdData()
+    {
+      //@formatter:off
+        string = 
+            "abc,test,123\r" +
+            "gg,hh,\"jj\"\r" +
+            "aa,\tbb,cc";
+        //@formatter:on
+        try
+        {
+            assertEquals(jsonarray.toString(), CDL.toJSONArray(string)
+                    .toString());
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+    }
+    
+    /**
+     * Tests the toJsonArray method using no closing quote.
+     */
+    public void testToJsonArray_NoClosingQuote()
+    {
+        //@formatter:off
+        string = 
+            "abc,test,123\r" +
+            "gg,hh,jj \r" +
+            "aa,\"bb ,cc ";
+        //@formatter:on
+        try
+        {
+            assertEquals(jsonarray.toString(), CDL.toJSONArray(string)
+                    .toString());
+            fail("Should have thrown Exception");
+        } catch (JSONException e)
+        {
+            assertEquals("Missing close quote '\"'. at 35 [character 12 line 5]", e.getMessage());
+        }
+        //@formatter:off
+        string = 
+            "abc,test,123\r" +
+            "gg,hh,jj \r" +
+            "aa,\"bb ,cc \n";
+        //@formatter:on
+        try
+        {
+            assertEquals(jsonarray.toString(), CDL.toJSONArray(string)
+                    .toString());
+            fail("Should have thrown Exception");
+        } catch (JSONException e)
+        {
+            assertEquals("Missing close quote '\"'. at 35 [character 0 line 6]", e.getMessage());
+        }
+        //@formatter:off
+        string = 
+            "abc,test,123\r" +
+            "gg,hh,jj \r" +
+            "aa,\"bb ,cc \r";
+        //@formatter:on
+        try
+        {
+            assertEquals(jsonarray.toString(), CDL.toJSONArray(string)
+                    .toString());
+            fail("Should have thrown Exception");
+        } catch (JSONException e)
+        {
+            assertEquals(
+                    "Missing close quote '\"'. at 35 [character 12 line 5]",
+                    e.getMessage());
+        }
+    }
+    
+    /**
+     * Tests the toJsonArray method using space after string.
+     */
+    public void testToJsonArray_SpaceAfterString()
+    {
+      //@formatter:off
+        string = 
+            "abc,test,123\r" +
+            "gg,hh,jj \r" +
+            "aa,\"bb\" ,cc\r";
+        //@formatter:on
+        try
+        {
+            assertEquals(jsonarray.toString(), CDL.toJSONArray(string)
+                    .toString());
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+    }
+    
+    /**
+     * Tests the toJsonArray method using bad character.
+     */
+    public void testToJsonArray_BadCharacter()
+    {
+      //@formatter:off
+        string = 
+            "abc,test,123\r" +
+            "gg,hh,jj \r" +
+            "aa,\"bb \"?,cc \r";
+        //@formatter:on
+        try
+        {
+            assertEquals(jsonarray.toString(), CDL.toJSONArray(string)
+                    .toString());
+            fail("Should have thrown Exception");
+        } catch (JSONException e)
+        {
+            assertEquals("Bad character '?' (63). at 32 [character 9 line 5]", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the toString method.
+     */
+    public void testToString()
+    {
+        try
+        {
+            assertEquals(string, CDL.toString(jsonarray));
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+
+    }
+
+    /**
+     * Tests the toString method using Bad json array.
+     */
+    public void testToString_BadJsonArray()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            assertEquals(null, CDL.toString(jsonarray));
+            jsonarray.put("abc");
+            assertEquals("", CDL.toString(jsonarray, jsonarray));
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+
+    }
+
+    /**
+     * Tests the toString method using No names.
+     */
+    public void testToString_NoNames()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            JSONObject jo = new JSONObject();
+            jsonarray.put(jo);
+            assertEquals(null, CDL.toString(jsonarray));
+
+            assertEquals(null, CDL.toString(new JSONArray(), jsonarray));
+
+            JSONArray names = new JSONArray();
+            names.put("");
+            assertEquals("\n", CDL.toString(names, jsonarray));
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Tests the toString method using Null names.
+     */
+    public void testToString_NullNames()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            JSONObject jo = new JSONObject();
+            jsonarray.put(jo);
+            assertEquals(null, CDL.toString(null, jsonarray));
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * Tests the toString method using Quotes.
+     */
+    public void testToString_Quotes()
+    {
+
+        try
+        {
+            jsonarray = CDL
+                    .toJSONArray("Comma delimited list test, '\"Strip\"Quotes', 'quote, comma', No quotes, 'Single Quotes', \"Double Quotes\"\n1,'2',\"3\"\n,'It is \"good,\"', \"It works.\"\n\n");
+
+            string = CDL.toString(jsonarray);
+            assertEquals(
+                    "\"quote, comma\",\"StripQuotes\",Comma delimited list test\n"
+                            + "3,2,1\n" + "It works.,\"It is good,\",\n",
+                    string);
+            assertEquals(
+                    "[\n {\n  \"quote, comma\": \"3\",\n  \"\\\"Strip\\\"Quotes\": \"2\",\n  \"Comma delimited list test\": \"1\"\n },\n {\n  \"quote, comma\": \"It works.\",\n  \"\\\"Strip\\\"Quotes\": \"It is \\\"good,\\\"\",\n  \"Comma delimited list test\": \"\"\n }\n]",
+                    jsonarray.toString(1));
+            jsonarray = CDL.toJSONArray(string);
+            assertEquals(
+                    "[\n {\n  \"quote, comma\": \"3\",\n  \"StripQuotes\": \"2\",\n  \"Comma delimited list test\": \"1\"\n },\n {\n  \"quote, comma\": \"It works.\",\n  \"StripQuotes\": \"It is good,\",\n  \"Comma delimited list test\": \"\"\n }\n]",
+                    jsonarray.toString(1));
+        } catch (JSONException e)
+        {
+            e.printStackTrace();
+        }
+    }
+    
+    /**
+     * Tests the constructor method.
+     */
+    public static void testConstructor()
+    {
+        CDL cdl = new CDL();
+        assertEquals("CDL", cdl.getClass().getSimpleName());
+    }
+
+}

src/org/json/tests/TestCookie.java

+/*
+ * File:         TestCookie.java
+ * Author:       JSON.org
+ */
+package org.json.tests;
+
+import org.json.Cookie;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import junit.framework.TestCase;
+
+/**
+ * The Class TestCookie.
+ */
+public class TestCookie extends TestCase
+{
+    
+    JSONObject jsonobject;
+    
+    /**
+     * Tests the toJsonObject method using random cookie data.
+     */
+    public static void testToJsonObject_RandomCookieData()
+    {
+        try
+        {
+            JSONObject jsonobject = new JSONObject();
+            jsonobject = Cookie
+                    .toJSONObject("f%oo=blah; secure ;expires = April 24, 2002");
+            assertEquals("{\n" + "  \"expires\": \"April 24, 2002\",\n"
+                    + "  \"name\": \"f%oo\",\n" + "  \"secure\": true,\n"
+                    + "  \"value\": \"blah\"\n" + "}", jsonobject.toString(2));
+            assertEquals("f%25oo=blah;expires=April 24, 2002;secure",
+                    Cookie.toString(jsonobject));
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+    
+    /**
+     * Tests the escape and unescape method.
+     */
+    public static void testEscape()
+    {
+        StringBuilder testString = new StringBuilder();
+        testString.append('h');
+        for(int i = 0; i < ' '; i++)
+            testString.append((char)i);
+        testString.append('\n');
+        testString.append('\t');
+        testString.append('\b');
+        testString.append('%');
+        testString.append('+');
+        testString.append('=');
+        testString.append(';');
+        String result = "h%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f%0a%09%08%25%2b%3d%3b";
+        assertEquals(result, Cookie.escape(testString.toString()));
+    }
+    
+    /**
+     * Tests the unescape method.
+     */
+    public static void testUnescape()
+    {
+        StringBuilder testString = new StringBuilder();
+        testString.append('h');
+        for(int i = 0; i < ' '; i++)
+            testString.append((char)i);
+        testString.append('\n');
+        testString.append('\t');
+        testString.append('\b');
+        testString.append('%');
+        testString.append('+');
+        testString.append('%');
+        testString.append('0');
+        testString.append('\r');
+        testString.append(' ');
+        testString.append(' ');
+        testString.append('%');
+        testString.append('\n');
+        testString.append('z');
+        testString.append('z');
+        testString.append('=');
+        testString.append(';');
+        testString.append('%');
+        String result = "h%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f%0a%09%08%25%2b%0\r +%\nzz%3d%3b%";
+        assertEquals(testString.toString(), Cookie.unescape(result));
+    }
+    
+    /**
+     * Tests the toJsonObject method using value without equals.
+     */
+    public void testToJsonObject_ValueWithoutEquals()
+    {
+        try
+        {
+            jsonobject = Cookie
+                    .toJSONObject("f%oo=blah; notsecure ;expires = April 24, 2002");
+            fail("Should have thrown exception.");
+        } catch (JSONException e)
+        {
+            assertEquals("Missing '=' in cookie parameter. at 22 [character 23 line 1]", e.getMessage());
+        }
+    }
+    
+    /**
+     * Tests the toString method.
+     */
+    public static void testToString()
+    {
+        try
+        {
+            JSONObject jsonobject = new JSONObject();
+            jsonobject.put("secure", true);
+            jsonobject.put("expires", "string1");
+            jsonobject.put("domain", "string2");
+            jsonobject.put("path", "string3");
+            jsonobject.put("name", "foo");
+            jsonobject.put("value", "bar");
+            assertEquals("foo=bar;expires=string1;domain=string2;path=string3;secure", Cookie.toString(jsonobject));
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+    
+    /**
+     * Tests the constructor method.
+     */
+    public static void testConstructor()
+    {
+        Cookie cookie = new Cookie();
+        assertEquals("Cookie", cookie.getClass().getSimpleName());
+    }
+    
+}

src/org/json/tests/TestCookieList.java

+/*
+ * File: TestCookieList.java Author: JSON.org
+ */
+package org.json.tests;
+
+import org.json.CookieList;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import junit.framework.TestCase;
+
+/**
+ * The Class TestCookieList.
+ */
+public class TestCookieList extends TestCase
+{
+
+    /** The jsonobject. */
+    JSONObject jsonobject = new JSONObject();
+
+    
+    /**
+     * Tests the toJsonObject method using random cookie list.
+     */
+    public void testToJsonObject_RandomCookieList()
+    {
+        try
+        {
+            jsonobject = CookieList
+                    .toJSONObject("  f%oo = b+l=ah  ; o;n%40e = t.wo ");
+            assertEquals("{\n  \"o;n@e\": \"t.wo\",\n  \"f%oo\": \"b l=ah\"\n}",
+                    jsonobject.toString(2));
+            assertEquals("o%3bn@e=t.wo;f%25oo=b l%3dah",
+                    CookieList.toString(jsonobject));
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+    
+    /**
+     * Tests the toJsonObject method using null key.
+     */
+    public void testToJsonObject_NullKey()
+    {
+        try
+        {
+            jsonobject = CookieList
+                    .toJSONObject("  f%oo = b+l=ah  ; o;n%40e = t.wo ");
+            jsonobject.put("abc", JSONObject.NULL);
+            assertEquals("o%3bn@e=t.wo;f%25oo=b l%3dah",
+                    CookieList.toString(jsonobject));
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+    
+    /**
+     * Tests the constructor method.
+     */
+    public static void testConstructor()
+    {
+        CookieList cookielist = new CookieList();
+        assertEquals("CookieList", cookielist.getClass().getSimpleName());
+    }
+    
+}

src/org/json/tests/TestHTTP.java

+/*
+ * File: TestHTTP.java Author: JSON.org
+ */
+package org.json.tests;
+
+import org.json.HTTP;
+import org.json.JSONObject;
+
+import junit.framework.TestCase;
+
+/**
+ * The Class TestHTTP.
+ */
+public class TestHTTP extends TestCase
+{
+
+    /** The jsonobject. */
+    JSONObject jsonobject = new JSONObject();
+
+    /**
+     * Tests the stub method.
+     */
+    public void testToJsonObject_Request()
+    {
+        try
+        {
+            jsonobject = HTTP
+                    .toJSONObject("GET / HTTP/1.0\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\nAccept-Language: en-us\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; T312461; Q312461)\nHost: www.nokko.com\nConnection: keep-alive\nAccept-encoding: gzip, deflate\n");
+            assertEquals(
+                    "{\n  \"Accept-Language\": \"en-us\",\n  \"Request-URI\": \"/\",\n  \"Host\": \"www.nokko.com\",\n  \"Method\": \"GET\",\n  \"Accept-encoding\": \"gzip, deflate\",\n  \"User-Agent\": \"Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; T312461; Q312461)\",\n  \"HTTP-Version\": \"HTTP/1.0\",\n  \"Connection\": \"keep-alive\",\n  \"Accept\": \"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\"\n}",
+                    jsonobject.toString(2));
+            assertEquals(
+                    "GET \"/\" HTTP/1.0\r\n"
+                            + "Accept-Language: en-us\r\n"
+                            + "Host: www.nokko.com\r\n"
+                            + "Accept-encoding: gzip, deflate\r\n"
+                            + "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; T312461; Q312461)\r\n"
+                            + "Connection: keep-alive\r\n"
+                            + "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\r\n\r\n",
+                    HTTP.toString(jsonobject));
+
+        } catch (Exception e)
+        {
+            fail(e.toString());
+        }
+    }
+
+    /**
+     * Tests the toJsonObject method using response.
+     */
+    public void testToJsonObject_Response()
+    {
+        try
+        {
+            jsonobject = HTTP
+                    .toJSONObject("HTTP/1.1 200 Oki Doki\nDate: Sun, 26 May 2002 17:38:52 GMT\nServer: Apache/1.3.23 (Unix) mod_perl/1.26\nKeep-Alive: timeout=15, max=100\nConnection: Keep-Alive\nTransfer-Encoding: chunked\nContent-Type: text/html\n");
+            assertEquals(
+                    "{\n  \"Reason-Phrase\": \"Oki Doki\",\n  \"Status-Code\": \"200\",\n  \"Transfer-Encoding\": \"chunked\",\n  \"Date\": \"Sun, 26 May 2002 17:38:52 GMT\",\n  \"Keep-Alive\": \"timeout=15, max=100\",\n  \"HTTP-Version\": \"HTTP/1.1\",\n  \"Content-Type\": \"text/html\",\n  \"Connection\": \"Keep-Alive\",\n  \"Server\": \"Apache/1.3.23 (Unix) mod_perl/1.26\"\n}",
+                    jsonobject.toString(2));
+            assertEquals("HTTP/1.1 200 Oki Doki\r\n"
+                    + "Transfer-Encoding: chunked\r\n"
+                    + "Date: Sun, 26 May 2002 17:38:52 GMT\r\n"
+                    + "Keep-Alive: timeout=15, max=100\r\n"
+                    + "Content-Type: text/html\r\n"
+                    + "Connection: Keep-Alive\r\n"
+                    + "Server: Apache/1.3.23 (Unix) mod_perl/1.26\r\n\r\n",
+                    HTTP.toString(jsonobject));
+        } catch (Exception e)
+        {
+            fail(e.toString());
+        }
+    }
+    
+    /**
+     * Tests the toString method using null key.
+     */
+    public void testToString_NullKey()
+    {
+        try
+        {
+            jsonobject = new JSONObject("{\n  \"Reason-Phrase\": \"Oki Doki\",\n  \"Status-Code\": \"200\",\n  \"Transfer-Encoding\": \"chunked\",\n  \"Date\": \"Sun, 26 May 2002 17:38:52 GMT\",\n  \"Keep-Alive\": \"timeout=15, max=100\",\n  \"HTTP-Version\": \"HTTP/1.1\",\n  \"Content-Type\": \"text/html\",\n  \"Connection\": \"Keep-Alive\",\n  \"Server\": \"Apache/1.3.23 (Unix) mod_perl/1.26\"\n}");
+            jsonobject.put("testKey", JSONObject.NULL);
+            assertEquals("HTTP/1.1 200 Oki Doki\r\nDate: Sun, 26 May 2002 17:38:52 GMT\r\nTransfer-Encoding: chunked\r\nKeep-Alive: timeout=15, max=100\r\nConnection: Keep-Alive\r\nContent-Type: text/html\r\nServer: Apache/1.3.23 (Unix) mod_perl/1.26\r\n\r\n", HTTP.toString(jsonobject));
+        } catch (Exception e)
+        {
+            fail(e.toString());
+        }
+    }
+    
+    /**
+     * Tests the toString method using status code but no reason phrase.
+     */
+    public void testToString_StatusCodeButNoReasonPhrase()
+    {
+        try
+        {
+            jsonobject = new JSONObject("{\n  \"Status-Code\": \"200\",\n  \"Transfer-Encoding\": \"chunked\",\n  \"Date\": \"Sun, 26 May 2002 17:38:52 GMT\",\n  \"Keep-Alive\": \"timeout=15, max=100\",\n  \"HTTP-Version\": \"HTTP/1.1\",\n  \"Content-Type\": \"text/html\",\n  \"Connection\": \"Keep-Alive\",\n  \"Server\": \"Apache/1.3.23 (Unix) mod_perl/1.26\"\n}");
+            HTTP.toString(jsonobject);
+            fail("Should have thrown an exception.");
+        } catch (Exception e)
+        {
+            assertEquals("Not enough material for an HTTP header.", e.getMessage());
+        }
+    }
+    
+
+    
+    /**
+     * Tests the toString method using method but no request uri.
+     */
+    public void testToString_MethodButNoRequestUri()
+    {
+        try
+        {
+            jsonobject = new JSONObject("{\n  \"Accept-Language\": \"en-us\",\n  \"Host\": \"www.nokko.com\",\n  \"Method\": \"GET\",\n  \"Accept-encoding\": \"gzip, deflate\",\n  \"User-Agent\": \"Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; T312461; Q312461)\",\n  \"HTTP-Version\": \"HTTP/1.0\",\n  \"Connection\": \"keep-alive\",\n  \"Accept\": \"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\"\n}");
+            HTTP.toString(jsonobject);
+            fail("Should have thrown an exception.");
+        } catch (Exception e)
+        {
+            assertEquals("Not enough material for an HTTP header.", e.getMessage());
+        }
+    }
+    
+    /**
+     * Tests the constructor method.
+     */
+    public static void testConstructor()
+    {
+        HTTP http = new HTTP();
+        assertEquals("HTTP", http.getClass().getSimpleName());
+    }
+}

src/org/json/tests/TestHTTPTokener.java

+/*
+ * File: TestHTTPTokener.java Author: JSON.org
+ */
+package org.json.tests;
+
+import org.json.HTTPTokener;
+import org.json.JSONException;
+
+import junit.framework.TestCase;
+
+/**
+ * The Class TestHTTPTokener.
+ */
+public class TestHTTPTokener extends TestCase
+{
+
+    private HTTPTokener httptokener;
+
+    /**
+     * Tests the toString method.
+     */
+    public void testNextToken_SimpleString()
+    {
+        try
+        {
+            httptokener = new HTTPTokener(
+                    "{\n  \"Accept-Language\": 'en-us' ," +
+                    "\n  \"Host\": 23");
+            assertEquals("{", httptokener.nextToken());
+            assertEquals("Accept-Language", httptokener.nextToken());
+            assertEquals(":", httptokener.nextToken());
+            assertEquals("en-us", httptokener.nextToken());
+            assertEquals(",", httptokener.nextToken());
+            assertEquals("Host", httptokener.nextToken());
+            assertEquals(":", httptokener.nextToken());
+            assertEquals("23", httptokener.nextToken());
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+    
+    /**
+     * Tests the nextToken method using unterminated string.
+     */
+    public void testNextToken_UnterminatedString()
+    {
+        try
+        {
+            httptokener = new HTTPTokener(
+                    "'en-us");
+            httptokener.nextToken();
+            fail("Should have thrown exception");
+        } catch (JSONException e)
+        {
+            assertEquals("Unterminated string. at 7 [character 8 line 1]", e.getMessage());
+        }
+    }
+    
+}

src/org/json/tests/TestJSONArray.java

+/*
+ * File: TestJSONArray.java Author: JSON.org
+ */
+package org.json.tests;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Stack;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.json.JSONString;
+import org.junit.Before;
+
+import junit.framework.TestCase;
+
+/**
+ * The Class TestJSONArray.
+ */
+public class TestJSONArray extends TestCase
+{
+
+    /** The jsonarray. */
+    private JSONArray jsonarray;
+
+    /** The string. */
+    private String string;
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see junit.framework.TestCase#setUp()
+     */
+    @Override
+    @Before
+    public void setUp()
+    {
+        jsonarray = new JSONArray();
+        string = "";
+    }
+
+    /**
+     * The Class testObject.
+     */
+    public class testObject
+    {
+        //Do Nothing
+    }
+
+    /**
+     * Tests the jsonArray method using int with leading zeros.
+     */
+    public static void testJsonArray_IntWithLeadingZeros()
+    {
+        JSONArray jsonarray;
+        String string;
+
+        try
+        {
+            string = "[001122334455]";
+            jsonarray = new JSONArray(string);
+            assertEquals("[1122334455]", jsonarray.toString());
+        } catch (Exception e)
+        {
+            fail(e.toString());
+        }
+    }
+
+    /**
+     * Tests the jsonArray method using scintific notation.
+     */
+    public static void testJsonArray_ScintificNotation()
+    {
+        JSONArray jsonarray;
+        String string;
+
+        try
+        {
+            string = "[666e666]";
+            jsonarray = new JSONArray(string);
+            assertEquals("[\"666e666\"]", jsonarray.toString());
+        } catch (Exception e)
+        {
+            fail(e.toString());
+        }
+    }
+
+    /**
+     * Tests the jsonArray method using double with leading and trailing zeros.
+     */
+    public static void testJsonArray_DoubleWithLeadingAndTrailingZeros()
+    {
+        JSONArray jsonarray;
+        String string;
+
+        try
+        {
+            string = "[00.10]";
+            jsonarray = new JSONArray(string);
+            assertEquals("[0.1]", jsonarray.toString());
+        } catch (Exception e)
+        {
+            fail(e.toString());
+        }
+    }
+
+    /**
+     * Tests the constructor method using missing value.
+     */
+    public void testConstructor_MissingValue()
+    {
+        try
+        {
+            jsonarray = new JSONArray("[\n\r\n\r}");
+            fail("expecting JSONException here.");
+        } catch (JSONException jsone)
+        {
+            assertEquals("Missing value at 5 [character 0 line 4]",
+                    jsone.getMessage());
+        }
+    }
+
+    /**
+     * Tests the constructor method using nan.
+     */
+    public void testConstructor_Nan()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put(Double.NaN);
+            jsonarray.toString();
+            fail("expecting JSONException here.");
+        } catch (JSONException jsone)
+        {
+            assertEquals("JSON does not allow non-finite numbers.",
+                    jsone.getMessage());
+        }
+    }
+
+    /**
+     * Tests the constructor method using negative infinity.
+     */
+    public void testConstructor_NegativeInfinity()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put(Double.NEGATIVE_INFINITY);
+            fail("expecting JSONException here.");
+        } catch (JSONException jsone)
+        {
+            assertEquals("JSON does not allow non-finite numbers.",
+                    jsone.getMessage());
+        }
+    }
+
+    /**
+     * Tests the constructor method using positive infinity.
+     */
+    public void testConstructor_PositiveInfinity()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put(Double.POSITIVE_INFINITY);
+            fail("expecting JSONException here.");
+        } catch (JSONException jsone)
+        {
+            assertEquals("JSON does not allow non-finite numbers.",
+                    jsone.getMessage());
+        }
+    }
+
+    /**
+     * Tests the put method using positive infinity.
+     */
+    public void testPut_PositiveInfinity()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put(Double.POSITIVE_INFINITY);
+            fail("expecting JSONException here.");
+        } catch (JSONException jsone)
+        {
+            assertEquals("JSON does not allow non-finite numbers.",
+                    jsone.getMessage());
+        }
+    }
+
+    /**
+     * Tests the getDouble method using empty array.
+     */
+    public void testGetDouble_EmptyArray()
+    {
+
+        try
+        {
+            jsonarray.getDouble(0);
+            fail("expecting JSONException here.");
+        } catch (JSONException jsone)
+        {
+            assertEquals("JSONArray[0] not found.", jsone.getMessage());
+        }
+    }
+
+    /**
+     * Tests the get method using negative index.
+     */
+    public void testGet_NegativeIndex()
+    {
+
+        try
+        {
+            jsonarray.get(-1);
+            fail("expecting JSONException here.");
+        } catch (JSONException jsone)
+        {
+            assertEquals("JSONArray[-1] not found.", jsone.getMessage());
+        }
+    }
+
+    /**
+     * Tests the put method using nan.
+     */
+    public void testPut_Nan()
+    {
+        try
+        {
+            jsonarray.put(Double.NaN);
+            fail("expecting JSONException here.");
+        } catch (JSONException jsone)
+        {
+            assertEquals("JSON does not allow non-finite numbers.",
+                    jsone.getMessage());
+        }
+    }
+
+    /**
+     * Tests the constructor method using object.
+     */
+    public void testConstructor_Object()
+    {
+        try
+        {
+            jsonarray = new JSONArray(new Object());
+            fail("expecting JSONException here.");
+        } catch (JSONException jsone)
+        {
+            assertEquals(
+                    "JSONArray initial value should be a string or collection or array.",
+                    jsone.getMessage());
+        }
+    }
+
+    /**
+     * Tests the constructor method using bad json.
+     */
+    public void testConstructor_BadJson()
+    {
+
+        try
+        {
+            string = "[)";
+            jsonarray = new JSONArray(string);
+            fail("expecting JSONException here.");
+        } catch (JSONException jsone)
+        {
+            assertEquals("Expected a ',' or ']' at 3 [character 4 line 1]",
+                    jsone.getMessage());
+        }
+    }
+
+    /**
+     * Tests the toString method using locations.
+     */
+    public void testToString_Locations()
+    {
+        try
+        {
+            string = " [\"San Francisco\", \"New York\", \"Seoul\", \"London\", \"Seattle\", \"Shanghai\"]";
+            jsonarray = new JSONArray(string);
+            assertEquals(
+                    "[\"San Francisco\",\"New York\",\"Seoul\",\"London\",\"Seattle\",\"Shanghai\"]",
+                    jsonarray.toString());
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the constructor method using collection.
+     */
+    public void testConstructor_Collection()
+    {
+        Collection<String> stringCol = new Stack<String>();
+        stringCol.add("string1");
+        stringCol.add("string2");
+        stringCol.add("string3");
+        stringCol.add("string4");
+        jsonarray = new JSONArray(stringCol);
+        assertEquals("[\"string1\",\"string2\",\"string3\",\"string4\"]",
+                jsonarray.toString());
+    }
+
+    /**
+     * Tests the constructor method using null collection.
+     */
+    public void testConstructor_NullCollection()
+    {
+        Collection<String> stringCol = null;
+        jsonarray = new JSONArray(stringCol);
+        assertEquals("[]", jsonarray.toString());
+    }
+
+    /**
+     * Tests the constructor method using string array.
+     */
+    public void testConstructor_StringArray()
+    {
+        try
+        {
+            jsonarray = new JSONArray(new String[]
+            {
+                    "string1", "string2"
+            });
+            assertEquals("[\"string1\",\"string2\"]", jsonarray.toString());
+
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the opt method.
+     */
+    public void testOpt()
+    {
+        try
+        {
+            jsonarray = new JSONArray(new String[]
+            {
+                    "string1", "string2"
+            });
+            assertEquals("string1", jsonarray.opt(0));
+            assertEquals("string2", jsonarray.opt(1));
+
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the toString method using exception.
+     */
+    public void testToString_Exception()
+    {
+        class BadJsonString implements JSONString
+        {
+
+            /*
+             * (non-Javadoc)
+             * 
+             * @see org.json.JSONString#toJSONString()
+             */
+            @Override
+            public String toJSONString()
+            {
+                String[] arString = new String[]
+                {
+                    "abc"
+                };
+                return arString[1];
+            }
+
+        }
+
+        jsonarray = new JSONArray();
+        jsonarray.put(new BadJsonString());
+        assertEquals(null, jsonarray.toString());
+    }
+
+    /**
+     * Tests the toString method using indents.
+     */
+    public void testToString_Indents()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("123");
+            jsonarray.put(new JSONObject().put("abc", "123"));
+            jsonarray.put("abc");
+            jsonarray.put(new JSONArray().put(new JSONArray()).put(
+                    new JSONArray().put("123").put("abc")));
+            assertEquals(
+                    "[\n    \"123\",\n    {\"abc\": \"123\"},\n    \"abc\",\n    [\n        [],\n        [\n            \"123\",\n            \"abc\"\n        ]\n    ]\n]",
+                    jsonarray.toString(4));
+            assertEquals("[\"123\"]", new JSONArray().put("123").toString(4));
+            assertEquals("[]", new JSONArray().toString(4));
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the get method using invalid index.
+     */
+    public void testGet_InvalidIndex()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("123");
+            jsonarray.get(1);
+        } catch (JSONException e)
+        {
+            assertEquals("JSONArray[1] not found.", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the get method using valid index.
+     */
+    public void testGet_ValidIndex()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("123");
+            assertEquals("123", jsonarray.get(0));
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the getBoolean method.
+     */
+    public void testGetBoolean()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("true");
+            jsonarray.put("false");
+            jsonarray.put(true);
+            jsonarray.put(false);
+            jsonarray.put("TRUE");
+            jsonarray.put("FALSE");
+            assertTrue(jsonarray.getBoolean(0));
+            assertFalse(jsonarray.getBoolean(1));
+            assertTrue(jsonarray.getBoolean(2));
+            assertFalse(jsonarray.getBoolean(3));
+            assertTrue(jsonarray.getBoolean(4));
+            assertFalse(jsonarray.getBoolean(5));
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the getBoolean method using non boolean.
+     */
+    public void testGetBoolean_NonBoolean()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("123");
+            jsonarray.getBoolean(0);
+        } catch (JSONException e)
+        {
+            assertEquals("JSONArray[0] is not a boolean.", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the optBoolean method.
+     */
+    public void testOptBoolean()
+    {
+        jsonarray = new JSONArray();
+        jsonarray.put("true");
+        jsonarray.put("false");
+        jsonarray.put(true);
+        jsonarray.put(false);
+        jsonarray.put("TRUE");
+        jsonarray.put("FALSE");
+        jsonarray.put("grass");
+        assertTrue(jsonarray.optBoolean(0));
+        assertFalse(jsonarray.optBoolean(1));
+        assertTrue(jsonarray.optBoolean(2));
+        assertFalse(jsonarray.optBoolean(3));
+        assertTrue(jsonarray.optBoolean(4));
+        assertFalse(jsonarray.optBoolean(5));
+        assertFalse(jsonarray.optBoolean(6));
+    }
+
+    /**
+     * Tests the getInt method.
+     */
+    public void testGetInt()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("123");
+            jsonarray.put("-12");
+            jsonarray.put(45);
+            jsonarray.put(-98);
+            assertEquals(123, jsonarray.getInt(0));
+            assertEquals(-12, jsonarray.getInt(1));
+            assertEquals(45, jsonarray.getInt(2));
+            assertEquals(-98, jsonarray.getInt(3));
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the getInt method using non integer.
+     */
+    public void testGetInt_NonInteger()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("abc");
+            jsonarray.getInt(0);
+        } catch (JSONException e)
+        {
+            assertEquals("JSONArray[0] is not a number.", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the optInt method.
+     */
+    public void testOptInt()
+    {
+        jsonarray = new JSONArray();
+        jsonarray.put("123");
+        jsonarray.put("-12");
+        jsonarray.put(45);
+        jsonarray.put(-98);
+        jsonarray.put("abc");
+        assertEquals(123, jsonarray.optInt(0));
+        assertEquals(-12, jsonarray.optInt(1));
+        assertEquals(45, jsonarray.optInt(2));
+        assertEquals(-98, jsonarray.optInt(3));
+        assertEquals(0, jsonarray.optInt(4));
+    }
+
+    /**
+     * Tests the getDouble method.
+     */
+    public void testGetDouble()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("123");
+            jsonarray.put("-12");
+            jsonarray.put(45);
+            jsonarray.put(-98);
+            jsonarray.put("123.5");
+            jsonarray.put("-12.87");
+            jsonarray.put(45.22);
+            jsonarray.put(-98.18);
+            assertEquals(123.0, jsonarray.getDouble(0));
+            assertEquals(-12.0, jsonarray.getDouble(1));
+            assertEquals(45.0, jsonarray.getDouble(2));
+            assertEquals(-98.0, jsonarray.getDouble(3));
+            assertEquals(123.5, jsonarray.getDouble(4));
+            assertEquals(-12.87, jsonarray.getDouble(5));
+            assertEquals(45.22, jsonarray.getDouble(6));
+            assertEquals(-98.18, jsonarray.getDouble(7));
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the getDouble method using non double.
+     */
+    public void testGetDouble_NonDouble()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("abc");
+            jsonarray.getDouble(0);
+        } catch (JSONException e)
+        {
+            assertEquals("JSONArray[0] is not a number.", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the optDouble method.
+     */
+    public void testOptDouble()
+    {
+        jsonarray = new JSONArray();
+        jsonarray.put("123");
+        jsonarray.put("-12");
+        jsonarray.put(45);
+        jsonarray.put(-98);
+        jsonarray.put("123.5");
+        jsonarray.put("-12.87");
+        try
+        {
+            jsonarray.put(45.22);
+            jsonarray.put(-98.18);
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+        assertEquals(123.0, jsonarray.optDouble(0));
+        assertEquals(-12.0, jsonarray.optDouble(1));
+        assertEquals(45.0, jsonarray.optDouble(2));
+        assertEquals(-98.0, jsonarray.optDouble(3));
+        assertEquals(123.5, jsonarray.optDouble(4));
+        assertEquals(-12.87, jsonarray.optDouble(5));
+        assertEquals(45.22, jsonarray.optDouble(6));
+        assertEquals(-98.18, jsonarray.optDouble(7));
+        assertEquals(Double.NaN, jsonarray.optDouble(8));
+    }
+
+    /**
+     * Tests the getLong method.
+     */
+    public void testGetLong()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("123");
+            jsonarray.put("-12");
+            jsonarray.put(45L);
+            jsonarray.put(-98L);
+            assertEquals(123, jsonarray.getLong(0));
+            assertEquals(-12, jsonarray.getLong(1));
+            assertEquals(45, jsonarray.getLong(2));
+            assertEquals(-98, jsonarray.getLong(3));
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the getLong method using non long.
+     */
+    public void testGetLong_NonLong()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("abc");
+            jsonarray.getLong(0);
+        } catch (JSONException e)
+        {
+            assertEquals("JSONArray[0] is not a number.", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the optLong method.
+     */
+    public void testOptLong()
+    {
+        jsonarray = new JSONArray();
+        jsonarray.put("123");
+        jsonarray.put("-12");
+        jsonarray.put(45L);
+        jsonarray.put(-98L);
+        assertEquals(123, jsonarray.optLong(0));
+        assertEquals(-12, jsonarray.optLong(1));
+        assertEquals(45, jsonarray.optLong(2));
+        assertEquals(-98, jsonarray.optLong(3));
+        assertEquals(0, jsonarray.optLong(8));
+    }
+
+    /**
+     * Tests the getString method.
+     */
+    public void testGetString()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("123");
+            jsonarray.put("-12");
+            jsonarray.put("abc");
+            jsonarray.put("123");
+            assertEquals("123", jsonarray.getString(0));
+            assertEquals("-12", jsonarray.getString(1));
+            assertEquals("abc", jsonarray.getString(2));
+            assertEquals("123", jsonarray.getString(3));
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the getString method using non string.
+     */
+    public void testGetString_NonString()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put(123);
+            jsonarray.getString(0);
+        } catch (JSONException e)
+        {
+            assertEquals("JSONArray[0] not a string.", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the optString method.
+     */
+    public void testOptString()
+    {
+        jsonarray = new JSONArray();
+        jsonarray.put("123");
+        jsonarray.put("-12");
+        jsonarray.put("abc");
+        jsonarray.put("123");
+        assertEquals("123", jsonarray.optString(0));
+        assertEquals("-12", jsonarray.optString(1));
+        assertEquals("abc", jsonarray.optString(2));
+        assertEquals("123", jsonarray.optString(3));
+        assertEquals("", jsonarray.optString(4));
+    }
+
+    /**
+     * Tests the optJSONObject method.
+     */
+    public void testOptJSONObject()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put(new JSONObject().put("abc", "123"));
+            assertEquals("{\"abc\":\"123\"}", jsonarray.optJSONObject(0).toString());
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the optJSONObject method using non json object.
+     */
+    public void testOptJSONObject_NonJsonObject()
+    {
+        jsonarray = new JSONArray();
+        jsonarray.put("123");
+        assertEquals(null, jsonarray.optJSONObject(0));
+    }
+
+    /**
+     * Tests the optJSONArray method.
+     */
+    public void testOptJSONArray()
+    {
+        jsonarray = new JSONArray();
+        jsonarray.put(new JSONArray().put("abc"));
+        assertEquals("[\"abc\"]", jsonarray.optJSONArray(0).toString());
+    }
+
+    /**
+     * Tests the optJSONArray method using non json array.
+     */
+    public void testOptJSONArray_NonJsonArray()
+    {
+        jsonarray = new JSONArray();
+        jsonarray.put("123");
+        assertEquals(null, jsonarray.optJSONArray(0));
+    }
+
+    /**
+     * Tests the isNull method.
+     */
+    public void testIsNull()
+    {
+        jsonarray = new JSONArray();
+        jsonarray.put(JSONObject.NULL);
+        jsonarray.put("null");
+        assertTrue(jsonarray.isNull(0));
+        assertFalse(jsonarray.isNull(1));
+    }
+
+    /**
+     * Tests the writer method.
+     */
+    public void testWriter()
+    {
+        try
+        {
+            StringWriter sw = new StringWriter();
+            jsonarray = new JSONArray();
+            jsonarray.put("123");
+            jsonarray.put("-12");
+            jsonarray.put(45);
+            jsonarray.put(-98);
+            jsonarray.put(new JSONArray().put("abc"));
+            jsonarray.put("-12");
+            jsonarray.put("abc");
+            jsonarray.put("123");
+            jsonarray.put("123");
+            jsonarray.put(new JSONObject().put("abc", "123"));
+            jsonarray.put("abc");
+            jsonarray.put("123");
+            jsonarray.write(sw);
+            assertEquals(
+                    "[\"123\",\"-12\",45,-98,[\"abc\"],\"-12\",\"abc\",\"123\",\"123\",{\"abc\":\"123\"},\"abc\",\"123\"]",
+                    sw.toString());
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the writer method using bad writer.
+     */
+    public void testWriter_BadWriter()
+    {
+        class BadWriter extends Writer
+        {
+
+            /*
+             * (non-Javadoc)
+             * 
+             * @see java.io.Writer#write(char[], int, int)
+             */
+            @Override
+            public void write(char[] cbuf, int off, int len) throws IOException
+            {
+                throw new IOException("Test Message From Bad Writer");
+            }
+
+            /*
+             * (non-Javadoc)
+             * 
+             * @see java.io.Writer#flush()
+             */
+            @Override
+            public void flush() throws IOException
+            {
+                //Do Nothing
+            }
+
+            /*
+             * (non-Javadoc)
+             * 
+             * @see java.io.Writer#close()
+             */
+            @Override
+            public void close() throws IOException
+            {
+                // Do nothing
+            }
+
+        }
+        try
+        {
+            BadWriter sw = new BadWriter();
+            jsonarray = new JSONArray();
+            jsonarray.put("123");
+            jsonarray.put("-12");
+            jsonarray.put(45);
+            jsonarray.put(-98);
+            jsonarray.put(new JSONArray().put("abc"));
+            jsonarray.put("-12");
+            jsonarray.put("abc");
+            jsonarray.put("123");
+            jsonarray.put("123");
+            jsonarray.put(new JSONObject().put("abc", "123"));
+            jsonarray.put("abc");
+            jsonarray.put("123");
+            jsonarray.write(sw);
+        } catch (JSONException e)
+        {
+            assertEquals("Test Message From Bad Writer", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the put method using object and specific index.
+     */
+    public void testPut_ObjectAndSpecificIndex()
+    {
+        try
+        {
+            testObject a = new testObject();
+            testObject b = new testObject();
+            testObject c = new testObject();
+            testObject d = new testObject();
+            jsonarray = new JSONArray();
+            jsonarray.put(0, a);
+            jsonarray.put(1, b);
+            assertEquals(a, jsonarray.get(0));
+            assertEquals(b, jsonarray.get(1));
+            jsonarray.put(0, c);
+            assertEquals(c, jsonarray.get(0));
+            assertEquals(b, jsonarray.get(1));
+            jsonarray.put(8, d);
+            assertEquals(d, jsonarray.get(8));
+            assertEquals(JSONObject.NULL, jsonarray.get(2));
+            assertEquals(JSONObject.NULL, jsonarray.get(3));
+            assertEquals(JSONObject.NULL, jsonarray.get(4));
+            assertEquals(JSONObject.NULL, jsonarray.get(5));
+            assertEquals(JSONObject.NULL, jsonarray.get(6));
+            assertEquals(JSONObject.NULL, jsonarray.get(7));
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the put method using object and negative index.
+     */
+    public void testPut_ObjectAndNegativeIndex()
+    {
+        try
+        {
+            testObject a = new testObject();
+            jsonarray = new JSONArray();
+            jsonarray.put(-1, a);
+            fail("Should have thrown exception");
+        } catch (JSONException e)
+        {
+            assertEquals("JSONArray[-1] not found.", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the toJSONObject method.
+     */
+    public void testToJSONObject()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("123");
+            jsonarray.put("-12");
+            jsonarray.put(45);
+            jsonarray.put(-98);
+            jsonarray.put(new JSONArray().put("abc"));
+            jsonarray.put(new JSONObject().put("abc", "123"));
+            JSONArray names = new JSONArray(new String[]
+            {
+                    "bdd", "fdsa", "fds", "ewre", "rer", "gfs"
+            });
+            assertEquals(
+                    "{\"gfs\":{\"abc\":\"123\"},\"fdsa\":\"-12\",\"bdd\":\"123\",\"ewre\":-98,\"rer\":[\"abc\"],\"fds\":45}",
+                    jsonarray.toJSONObject(names).toString());
+            assertEquals(null, jsonarray.toJSONObject(new JSONArray()));
+            assertEquals(null, jsonarray.toJSONObject(null));
+            assertEquals(null, new JSONArray().toJSONObject(names));
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the getJSONObject method.
+     */
+    public void testGetJSONObject()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put(new JSONObject().put("abc", "123"));
+            assertEquals("{\"abc\":\"123\"}", jsonarray.getJSONObject(0).toString());
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the getJSONObject method using non json object.
+     */
+    public void testGetJSONObject_NonJsonObject()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("123");
+            jsonarray.getJSONObject(0);
+            fail("Should have thrown exception.");
+        } catch (JSONException e)
+        {
+            assertEquals("JSONArray[0] is not a JSONObject.", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the getJSONArray method.
+     */
+    public void testGetJSONArray()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put(new JSONArray().put("abc"));
+            assertEquals("[\"abc\"]", jsonarray.getJSONArray(0).toString());
+        } catch (JSONException e)
+        {
+            fail(e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the getJSONArray method using non json array.
+     */
+    public void testGetJSONArray_NonJsonArray()
+    {
+        try
+        {
+            jsonarray = new JSONArray();
+            jsonarray.put("123");
+            jsonarray.getJSONArray(0);
+            fail("Should have thrown exception.");
+        } catch (JSONException e)
+        {
+            assertEquals("JSONArray[0] is not a JSONArray.", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the put method using map.
+     */
+    public void testPut_Map()
+    {
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("abc", "123");
+        jsonarray = new JSONArray();
+        jsonarray.put(map);
+        assertEquals("[{\"abc\":\"123\"}]", jsonarray.toString());
+    }
+
+    /**
+     * Tests the constructor method using bad json array.
+     */
+    public void testConstructor_BadJsonArray()
+    {
+        try
+        {
+            jsonarray = new JSONArray("abc");
+            fail("Should have thrown exception.");
+        } catch (JSONException e)
+        {
+            assertEquals("A JSONArray text must start with '[' at 1 [character 2 line 1]", e.getMessage());
+        }
+    }
+
+    /**
+     * Tests the constructor method.
+     */
+    public void testConstructor()
+    {
+        try
+        {
+            jsonarray = new JSONArray("[]");
+            assertEquals("[]", jsonarray.toString());
+            jsonarray = new JSONArray("[\"abc\"]");
+            assertEquals("[\"abc\"]", jsonarray.toString());
+            jsonarray = new JSONArray("[\"abc\",\"123\"]");
+            assertEquals("[\"abc\",\"123\"]", jsonarray.toString());
+            jsonarray = new JSONArray("[123,{}]");