mirror of
https://github.com/ethauvin/JSON-java.git
synced 2025-06-17 16:00:51 -07:00
added complete tests
This commit is contained in:
parent
fd0d1156d4
commit
48dccd91e7
20 changed files with 8871 additions and 935 deletions
530
tests/TestJSONWriter.java
Normal file
530
tests/TestJSONWriter.java
Normal file
|
@ -0,0 +1,530 @@
|
|||
/*
|
||||
* File: TestJSONWriter.java Author: JSON.org
|
||||
*/
|
||||
package org.json.tests;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Writer;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONStringer;
|
||||
import org.json.JSONWriter;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
/**
|
||||
* The Class TestJSONWriter.
|
||||
*/
|
||||
public class TestJSONWriter extends TestCase
|
||||
{
|
||||
|
||||
/** The jsonwriter. */
|
||||
JSONWriter jsonwriter;
|
||||
|
||||
/**
|
||||
* The Class BadWriterThrowsOnNonBrace.
|
||||
*/
|
||||
class BadWriterThrowsOnNonBrace extends Writer
|
||||
{
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see java.io.Writer#write(char[], int, int)
|
||||
*/
|
||||
@Override
|
||||
public void write(char[] cbuf, int off, int len) throws IOException
|
||||
{
|
||||
if (cbuf[0] != '{')
|
||||
throw new IOException("Test Message From Non-Brace");
|
||||
}
|
||||
|
||||
/*
|
||||
* (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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* The Class BadWriterThrowsOnLeftBrace.
|
||||
*/
|
||||
class BadWriterThrowsOnLeftBrace extends Writer
|
||||
{
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see java.io.Writer#write(char[], int, int)
|
||||
*/
|
||||
@Override
|
||||
public void write(char[] cbuf, int off, int len) throws IOException
|
||||
{
|
||||
if (cbuf[0] == '{')
|
||||
throw new IOException("Test Message From Left Brace");
|
||||
}
|
||||
|
||||
/*
|
||||
* (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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* The Class BadWriterThrowsOnRightBrace.
|
||||
*/
|
||||
class BadWriterThrowsOnRightBrace extends Writer
|
||||
{
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see java.io.Writer#write(char[], int, int)
|
||||
*/
|
||||
@Override
|
||||
public void write(char[] cbuf, int off, int len) throws IOException
|
||||
{
|
||||
if (cbuf[0] == '}')
|
||||
throw new IOException("Test Message From Right Brace");
|
||||
}
|
||||
|
||||
/*
|
||||
* (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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* The Class BadExtensionThatCausesNestingError.
|
||||
*/
|
||||
class BadExtensionThatCausesNestingError extends JSONStringer
|
||||
{
|
||||
|
||||
/**
|
||||
* Change mode.
|
||||
*
|
||||
* @param c the c
|
||||
* @return the jSON writer
|
||||
*/
|
||||
public JSONWriter changeMode(char c)
|
||||
{
|
||||
mode = c;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the key method.
|
||||
*/
|
||||
public void testKey()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
String result = jsonwriter.object().key("abc").value("123")
|
||||
.key("abc2").value(60).key("abc3").value(20.98).key("abc4")
|
||||
.value(true).endObject().toString();
|
||||
assertEquals(
|
||||
"{\"abc\":\"123\",\"abc2\":60,\"abc3\":20.98,\"abc4\":true}",
|
||||
result);
|
||||
} catch (JSONException e)
|
||||
{
|
||||
fail(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the value method.
|
||||
*/
|
||||
public void testValue()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
String result = jsonwriter.array().value("123").value(10)
|
||||
.value(30.45).value(false).endArray().toString();
|
||||
assertEquals("[\"123\",10,30.45,false]", result);
|
||||
} catch (JSONException e)
|
||||
{
|
||||
fail(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the object method using stops at max depth.
|
||||
*/
|
||||
public void testObject_StopsAtMaxDepth()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
int i = 0;
|
||||
while (i < 201)
|
||||
{
|
||||
jsonwriter.object().key("123");
|
||||
i++;
|
||||
}
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Nesting too deep.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the array method using stops at max depth.
|
||||
*/
|
||||
public void testArray_StopsAtMaxDepth()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
int i = 0;
|
||||
while (i < 201)
|
||||
{
|
||||
jsonwriter.array();
|
||||
i++;
|
||||
}
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Nesting too deep.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the value method using out of sequence.
|
||||
*/
|
||||
public void testValue_OutOfSequence()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
jsonwriter.value(true);
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Value out of sequence.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the object method using out of sequence.
|
||||
*/
|
||||
public void testObject_OutOfSequence()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
jsonwriter.object().object();
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Misplaced object.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the object method using two objects within array.
|
||||
*/
|
||||
public void testObject_TwoObjectsWithinArray()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
String result = jsonwriter.array().object().endObject().object()
|
||||
.endObject().endArray().toString();
|
||||
assertEquals("[{},{}]", result);
|
||||
} catch (JSONException e)
|
||||
{
|
||||
fail(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the object method using two strings and an int within object.
|
||||
*/
|
||||
public void testObject_TwoStringsAndAnIntWithinObject()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
String result = jsonwriter.object().key("string1").value("abc")
|
||||
.key("int").value(35).key("string2").value("123")
|
||||
.endObject().toString();
|
||||
assertEquals(
|
||||
"{\"string1\":\"abc\",\"int\":35,\"string2\":\"123\"}",
|
||||
result);
|
||||
} catch (JSONException e)
|
||||
{
|
||||
fail(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the key method using misplaced key.
|
||||
*/
|
||||
public void testKey_MisplacedKey()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
jsonwriter.key("123");
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Misplaced key.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the key method using catches ioexception.
|
||||
*/
|
||||
public void testKey_CatchesIoexception()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONWriter(new BadWriterThrowsOnNonBrace());
|
||||
jsonwriter.object().key("123");
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Test Message From Non-Brace", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the object method using catches ioexception.
|
||||
*/
|
||||
public void testObject_CatchesIoexception()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONWriter(new BadWriterThrowsOnLeftBrace());
|
||||
jsonwriter.object();
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Test Message From Left Brace", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the key method using null key.
|
||||
*/
|
||||
public void testKey_NullKey()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
jsonwriter.key(null);
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Null key.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the array method using two arrays within object.
|
||||
*/
|
||||
public void testArray_TwoArraysWithinObject()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
String result = jsonwriter.object().key("123").array().endArray()
|
||||
.key("1234").array().endArray().endObject().toString();
|
||||
assertEquals("{\"123\":[],\"1234\":[]}", result);
|
||||
} catch (JSONException e)
|
||||
{
|
||||
fail(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the object method using two objects within object.
|
||||
*/
|
||||
public void testObject_TwoObjectsWithinObject()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
String result = jsonwriter.object().key("123").object().endObject()
|
||||
.key("1234").object().endObject().endObject().toString();
|
||||
assertEquals("{\"123\":{},\"1234\":{}}", result);
|
||||
} catch (JSONException e)
|
||||
{
|
||||
fail(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the array method using two arrays within array.
|
||||
*/
|
||||
public void testArray_TwoArraysWithinArray()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
String result = jsonwriter.array().array().endArray().array()
|
||||
.endArray().endArray().toString();
|
||||
assertEquals("[[],[]]", result);
|
||||
} catch (JSONException e)
|
||||
{
|
||||
fail(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the array method using misplaced array.
|
||||
*/
|
||||
public void testArray_MisplacedArray()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
jsonwriter.object().array();
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Misplaced array.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the endArray method using misplaced end array.
|
||||
*/
|
||||
public void testEndArray_MisplacedEndArray()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
jsonwriter.endArray();
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Misplaced endArray.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the endObject method using misplaced end object.
|
||||
*/
|
||||
public void testEndObject_MisplacedEndObject()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONStringer();
|
||||
jsonwriter.endObject();
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Misplaced endObject.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the endObject method using catches ioexception.
|
||||
*/
|
||||
public void testEndObject_CatchesIoexception()
|
||||
{
|
||||
try
|
||||
{
|
||||
jsonwriter = new JSONWriter(new BadWriterThrowsOnRightBrace());
|
||||
jsonwriter.object().endObject();
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Test Message From Right Brace", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the pop method using bad extension that causes nesting error1.
|
||||
*/
|
||||
public void testPop_BadExtensionThatCausesNestingError1()
|
||||
{
|
||||
try
|
||||
{
|
||||
BadExtensionThatCausesNestingError betcnw = new BadExtensionThatCausesNestingError();
|
||||
betcnw.object().endObject();
|
||||
betcnw.changeMode('k').endObject();
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Nesting error.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests the pop method using bad extension that causes nesting error2.
|
||||
*/
|
||||
public void testPop_BadExtensionThatCausesNestingError2()
|
||||
{
|
||||
try
|
||||
{
|
||||
BadExtensionThatCausesNestingError betcnw = new BadExtensionThatCausesNestingError();
|
||||
betcnw.array();
|
||||
betcnw.changeMode('k').endObject();
|
||||
fail("Should have thrown exception.");
|
||||
} catch (JSONException e)
|
||||
{
|
||||
assertEquals("Nesting error.", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue