package com.jayway.jsonassert; import com.jayway.jsonassert.impl.JsonAsserterImpl; import com.jayway.jsonassert.impl.matcher.*; import net.minidev.json.parser.JSONParser; import org.hamcrest.Matcher; import java.io.*; import java.text.ParseException; import java.util.Collection; import java.util.Map; /** * User: kalle stenflo * Date: 1/24/11 * Time: 9:31 PM */ public class JsonAssert { private static JSONParser JSON_PARSER = new JSONParser(); public final static int STRICT_MODE = 0; public final static int SLACK_MODE = -1; private static int mode = SLACK_MODE; public static void setMode(int mode) { if (mode != JsonAssert.mode) { JsonAssert.mode = mode; JSON_PARSER = new JSONParser(JsonAssert.mode); } } public static int getMode() { return mode; } /** * Creates a JSONAsserter * * @param json the JSON document to create a JSONAsserter for * @return a JSON asserter initialized with the provided document * @throws ParseException when the given JSON could not be parsed */ public static JsonAsserter with(String json) throws ParseException { try { return new JsonAsserterImpl(JSON_PARSER.parse(json)); } catch (net.minidev.json.parser.ParseException e) { throw new ParseException(json, e.getPosition()); } catch (IOException e) { throw new RuntimeException(e); } } /** * Creates a JSONAsserter * * @param reader the reader of the json document * @return a JSON asserter initialized with the provided document * @throws ParseException when the given JSON could not be parsed */ public static JsonAsserter with(Reader reader) throws ParseException, IOException { try { return new JsonAsserterImpl(JSON_PARSER.parse(convertReaderToString(reader))); } catch (net.minidev.json.parser.ParseException e) { throw new ParseException(e.toString(), e.getPosition()); } } /** * Creates a JSONAsserter * * @param is the input stream * @return a JSON asserter initialized with the provided document * @throws ParseException when the given JSON could not be parsed */ public static JsonAsserter with(InputStream is) throws ParseException, IOException { Reader reader = new InputStreamReader(is); return with(reader); } //Matchers public static CollectionMatcher collectionWithSize(Matcher sizeMatcher) { return new IsCollectionWithSize(sizeMatcher); } public static Matcher> mapContainingKey(Matcher keyMatcher) { return new IsMapContainingKey(keyMatcher); } public static Matcher> mapContainingValue(Matcher valueMatcher) { return new IsMapContainingValue(valueMatcher); } public static Matcher> emptyCollection() { return new IsEmptyCollection(); } private static String convertReaderToString(Reader reader) throws IOException { if (reader != null) { Writer writer = new StringWriter(); char[] buffer = new char[1024]; try { int n; while ((n = reader.read(buffer)) != -1) { writer.write(buffer, 0, n); } } finally { reader.close(); } return writer.toString(); } else { return ""; } } }