Ran clang-format over all .h and .cpp files.
clang-format -i $(find . -name '*.h' -or -name '*.cpp')
diff --git a/src/jsontestrunner/main.cpp b/src/jsontestrunner/main.cpp
index 81805c2..18e6ef1 100644
--- a/src/jsontestrunner/main.cpp
+++ b/src/jsontestrunner/main.cpp
@@ -6,296 +6,266 @@
/* This executable is used for testing parser/writer using real JSON files.
*/
-
#include <json/json.h>
#include <algorithm> // sort
#include <stdio.h>
-#if defined(_MSC_VER) && _MSC_VER >= 1310
-# pragma warning( disable: 4996 ) // disable fopen deprecation warning
+#if defined(_MSC_VER) && _MSC_VER >= 1310
+#pragma warning(disable : 4996) // disable fopen deprecation warning
#endif
-static std::string
-normalizeFloatingPointStr( double value )
-{
- char buffer[32];
+static std::string normalizeFloatingPointStr(double value) {
+ char buffer[32];
#if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__)
- sprintf_s( buffer, sizeof(buffer), "%.16g", value );
+ sprintf_s(buffer, sizeof(buffer), "%.16g", value);
#else
- snprintf( buffer, sizeof(buffer), "%.16g", value );
+ snprintf(buffer, sizeof(buffer), "%.16g", value);
#endif
- buffer[sizeof(buffer)-1] = 0;
- std::string s( buffer );
- std::string::size_type index = s.find_last_of( "eE" );
- if ( index != std::string::npos )
+ buffer[sizeof(buffer) - 1] = 0;
+ std::string s(buffer);
+ std::string::size_type index = s.find_last_of("eE");
+ if (index != std::string::npos) {
+ std::string::size_type hasSign =
+ (s[index + 1] == '+' || s[index + 1] == '-') ? 1 : 0;
+ std::string::size_type exponentStartIndex = index + 1 + hasSign;
+ std::string normalized = s.substr(0, exponentStartIndex);
+ std::string::size_type indexDigit =
+ s.find_first_not_of('0', exponentStartIndex);
+ std::string exponent = "0";
+ if (indexDigit !=
+ std::string::npos) // There is an exponent different from 0
{
- std::string::size_type hasSign = (s[index+1] == '+' || s[index+1] == '-') ? 1 : 0;
- std::string::size_type exponentStartIndex = index + 1 + hasSign;
- std::string normalized = s.substr( 0, exponentStartIndex );
- std::string::size_type indexDigit = s.find_first_not_of( '0', exponentStartIndex );
- std::string exponent = "0";
- if ( indexDigit != std::string::npos ) // There is an exponent different from 0
- {
- exponent = s.substr( indexDigit );
- }
- return normalized + exponent;
+ exponent = s.substr(indexDigit);
}
- return s;
+ return normalized + exponent;
+ }
+ return s;
}
-
-static std::string
-readInputTestFile( const char *path )
-{
- FILE *file = fopen( path, "rb" );
- if ( !file )
- return std::string("");
- fseek( file, 0, SEEK_END );
- long size = ftell( file );
- fseek( file, 0, SEEK_SET );
- std::string text;
- char *buffer = new char[size+1];
- buffer[size] = 0;
- if ( fread( buffer, 1, size, file ) == (unsigned long)size )
- text = buffer;
- fclose( file );
- delete[] buffer;
- return text;
+static std::string readInputTestFile(const char *path) {
+ FILE *file = fopen(path, "rb");
+ if (!file)
+ return std::string("");
+ fseek(file, 0, SEEK_END);
+ long size = ftell(file);
+ fseek(file, 0, SEEK_SET);
+ std::string text;
+ char *buffer = new char[size + 1];
+ buffer[size] = 0;
+ if (fread(buffer, 1, size, file) == (unsigned long)size)
+ text = buffer;
+ fclose(file);
+ delete[] buffer;
+ return text;
}
static void
-printValueTree( FILE *fout, Json::Value &value, const std::string &path = "." )
-{
- switch ( value.type() )
- {
- case Json::nullValue:
- fprintf( fout, "%s=null\n", path.c_str() );
- break;
- case Json::intValue:
- fprintf( fout, "%s=%s\n", path.c_str(), Json::valueToString( value.asLargestInt() ).c_str() );
- break;
- case Json::uintValue:
- fprintf( fout, "%s=%s\n", path.c_str(), Json::valueToString( value.asLargestUInt() ).c_str() );
- break;
- case Json::realValue:
- fprintf( fout, "%s=%s\n", path.c_str(), normalizeFloatingPointStr(value.asDouble()).c_str() );
- break;
- case Json::stringValue:
- fprintf( fout, "%s=\"%s\"\n", path.c_str(), value.asString().c_str() );
- break;
- case Json::booleanValue:
- fprintf( fout, "%s=%s\n", path.c_str(), value.asBool() ? "true" : "false" );
- break;
- case Json::arrayValue:
- {
- fprintf( fout, "%s=[]\n", path.c_str() );
- int size = value.size();
- for ( int index =0; index < size; ++index )
- {
- static char buffer[16];
+printValueTree(FILE *fout, Json::Value &value, const std::string &path = ".") {
+ switch (value.type()) {
+ case Json::nullValue:
+ fprintf(fout, "%s=null\n", path.c_str());
+ break;
+ case Json::intValue:
+ fprintf(fout,
+ "%s=%s\n",
+ path.c_str(),
+ Json::valueToString(value.asLargestInt()).c_str());
+ break;
+ case Json::uintValue:
+ fprintf(fout,
+ "%s=%s\n",
+ path.c_str(),
+ Json::valueToString(value.asLargestUInt()).c_str());
+ break;
+ case Json::realValue:
+ fprintf(fout,
+ "%s=%s\n",
+ path.c_str(),
+ normalizeFloatingPointStr(value.asDouble()).c_str());
+ break;
+ case Json::stringValue:
+ fprintf(fout, "%s=\"%s\"\n", path.c_str(), value.asString().c_str());
+ break;
+ case Json::booleanValue:
+ fprintf(fout, "%s=%s\n", path.c_str(), value.asBool() ? "true" : "false");
+ break;
+ case Json::arrayValue: {
+ fprintf(fout, "%s=[]\n", path.c_str());
+ int size = value.size();
+ for (int index = 0; index < size; ++index) {
+ static char buffer[16];
#if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__)
- sprintf_s( buffer, sizeof(buffer), "[%d]", index );
+ sprintf_s(buffer, sizeof(buffer), "[%d]", index);
#else
- snprintf( buffer, sizeof(buffer), "[%d]", index );
+ snprintf(buffer, sizeof(buffer), "[%d]", index);
#endif
- printValueTree( fout, value[index], path + buffer );
- }
- }
- break;
- case Json::objectValue:
- {
- fprintf( fout, "%s={}\n", path.c_str() );
- Json::Value::Members members( value.getMemberNames() );
- std::sort( members.begin(), members.end() );
- std::string suffix = *(path.end()-1) == '.' ? "" : ".";
- for ( Json::Value::Members::iterator it = members.begin();
- it != members.end();
- ++it )
- {
- const std::string &name = *it;
- printValueTree( fout, value[name], path + suffix + name );
- }
- }
- break;
- default:
- break;
- }
+ printValueTree(fout, value[index], path + buffer);
+ }
+ } break;
+ case Json::objectValue: {
+ fprintf(fout, "%s={}\n", path.c_str());
+ Json::Value::Members members(value.getMemberNames());
+ std::sort(members.begin(), members.end());
+ std::string suffix = *(path.end() - 1) == '.' ? "" : ".";
+ for (Json::Value::Members::iterator it = members.begin();
+ it != members.end();
+ ++it) {
+ const std::string &name = *it;
+ printValueTree(fout, value[name], path + suffix + name);
+ }
+ } break;
+ default:
+ break;
+ }
}
+static int parseAndSaveValueTree(const std::string &input,
+ const std::string &actual,
+ const std::string &kind,
+ Json::Value &root,
+ const Json::Features &features,
+ bool parseOnly) {
+ Json::Reader reader(features);
+ bool parsingSuccessful = reader.parse(input, root);
+ if (!parsingSuccessful) {
+ printf("Failed to parse %s file: \n%s\n",
+ kind.c_str(),
+ reader.getFormattedErrorMessages().c_str());
+ return 1;
+ }
-static int
-parseAndSaveValueTree( const std::string &input,
- const std::string &actual,
- const std::string &kind,
- Json::Value &root,
- const Json::Features &features,
- bool parseOnly )
-{
- Json::Reader reader( features );
- bool parsingSuccessful = reader.parse( input, root );
- if ( !parsingSuccessful )
- {
- printf( "Failed to parse %s file: \n%s\n",
- kind.c_str(),
- reader.getFormattedErrorMessages().c_str() );
- return 1;
- }
-
- if ( !parseOnly )
- {
- FILE *factual = fopen( actual.c_str(), "wt" );
- if ( !factual )
- {
- printf( "Failed to create %s actual file.\n", kind.c_str() );
- return 2;
- }
- printValueTree( factual, root );
- fclose( factual );
- }
- return 0;
-}
-
-
-static int
-rewriteValueTree( const std::string &rewritePath,
- const Json::Value &root,
- std::string &rewrite )
-{
- //Json::FastWriter writer;
- //writer.enableYAMLCompatibility();
- Json::StyledWriter writer;
- rewrite = writer.write( root );
- FILE *fout = fopen( rewritePath.c_str(), "wt" );
- if ( !fout )
- {
- printf( "Failed to create rewrite file: %s\n", rewritePath.c_str() );
+ if (!parseOnly) {
+ FILE *factual = fopen(actual.c_str(), "wt");
+ if (!factual) {
+ printf("Failed to create %s actual file.\n", kind.c_str());
return 2;
- }
- fprintf( fout, "%s\n", rewrite.c_str() );
- fclose( fout );
- return 0;
+ }
+ printValueTree(factual, root);
+ fclose(factual);
+ }
+ return 0;
}
-
-static std::string
-removeSuffix( const std::string &path,
- const std::string &extension )
-{
- if ( extension.length() >= path.length() )
- return std::string("");
- std::string suffix = path.substr( path.length() - extension.length() );
- if ( suffix != extension )
- return std::string("");
- return path.substr( 0, path.length() - extension.length() );
+static int rewriteValueTree(const std::string &rewritePath,
+ const Json::Value &root,
+ std::string &rewrite) {
+ // Json::FastWriter writer;
+ // writer.enableYAMLCompatibility();
+ Json::StyledWriter writer;
+ rewrite = writer.write(root);
+ FILE *fout = fopen(rewritePath.c_str(), "wt");
+ if (!fout) {
+ printf("Failed to create rewrite file: %s\n", rewritePath.c_str());
+ return 2;
+ }
+ fprintf(fout, "%s\n", rewrite.c_str());
+ fclose(fout);
+ return 0;
}
+static std::string removeSuffix(const std::string &path,
+ const std::string &extension) {
+ if (extension.length() >= path.length())
+ return std::string("");
+ std::string suffix = path.substr(path.length() - extension.length());
+ if (suffix != extension)
+ return std::string("");
+ return path.substr(0, path.length() - extension.length());
+}
-static void
-printConfig()
-{
- // Print the configuration used to compile JsonCpp
+static void printConfig() {
+// Print the configuration used to compile JsonCpp
#if defined(JSON_NO_INT64)
- printf( "JSON_NO_INT64=1\n" );
+ printf("JSON_NO_INT64=1\n");
#else
- printf( "JSON_NO_INT64=0\n" );
+ printf("JSON_NO_INT64=0\n");
#endif
}
-
-static int
-printUsage( const char *argv[] )
-{
- printf( "Usage: %s [--strict] input-json-file", argv[0] );
- return 3;
+static int printUsage(const char *argv[]) {
+ printf("Usage: %s [--strict] input-json-file", argv[0]);
+ return 3;
}
+int parseCommandLine(int argc,
+ const char *argv[],
+ Json::Features &features,
+ std::string &path,
+ bool &parseOnly) {
+ parseOnly = false;
+ if (argc < 2) {
+ return printUsage(argv);
+ }
-int
-parseCommandLine( int argc, const char *argv[],
- Json::Features &features, std::string &path,
- bool &parseOnly )
-{
- parseOnly = false;
- if ( argc < 2 )
- {
- return printUsage( argv );
- }
+ int index = 1;
+ if (std::string(argv[1]) == "--json-checker") {
+ features = Json::Features::strictMode();
+ parseOnly = true;
+ ++index;
+ }
- int index = 1;
- if ( std::string(argv[1]) == "--json-checker" )
- {
- features = Json::Features::strictMode();
- parseOnly = true;
- ++index;
- }
+ if (std::string(argv[1]) == "--json-config") {
+ printConfig();
+ return 3;
+ }
- if ( std::string(argv[1]) == "--json-config" )
- {
- printConfig();
+ if (index == argc || index + 1 < argc) {
+ return printUsage(argv);
+ }
+
+ path = argv[index];
+ return 0;
+}
+
+int main(int argc, const char *argv[]) {
+ std::string path;
+ Json::Features features;
+ bool parseOnly;
+ int exitCode = parseCommandLine(argc, argv, features, path, parseOnly);
+ if (exitCode != 0) {
+ return exitCode;
+ }
+
+ try {
+ std::string input = readInputTestFile(path.c_str());
+ if (input.empty()) {
+ printf("Failed to read input or empty input: %s\n", path.c_str());
return 3;
- }
+ }
- if ( index == argc || index + 1 < argc )
- {
- return printUsage( argv );
- }
+ std::string basePath = removeSuffix(argv[1], ".json");
+ if (!parseOnly && basePath.empty()) {
+ printf("Bad input path. Path does not end with '.expected':\n%s\n",
+ path.c_str());
+ return 3;
+ }
- path = argv[index];
- return 0;
-}
+ std::string actualPath = basePath + ".actual";
+ std::string rewritePath = basePath + ".rewrite";
+ std::string rewriteActualPath = basePath + ".actual-rewrite";
-
-int main( int argc, const char *argv[] )
-{
- std::string path;
- Json::Features features;
- bool parseOnly;
- int exitCode = parseCommandLine( argc, argv, features, path, parseOnly );
- if ( exitCode != 0 )
- {
- return exitCode;
- }
-
- try
- {
- std::string input = readInputTestFile( path.c_str() );
- if ( input.empty() )
- {
- printf( "Failed to read input or empty input: %s\n", path.c_str() );
- return 3;
+ Json::Value root;
+ exitCode = parseAndSaveValueTree(
+ input, actualPath, "input", root, features, parseOnly);
+ if (exitCode == 0 && !parseOnly) {
+ std::string rewrite;
+ exitCode = rewriteValueTree(rewritePath, root, rewrite);
+ if (exitCode == 0) {
+ Json::Value rewriteRoot;
+ exitCode = parseAndSaveValueTree(rewrite,
+ rewriteActualPath,
+ "rewrite",
+ rewriteRoot,
+ features,
+ parseOnly);
}
+ }
+ }
+ catch (const std::exception &e) {
+ printf("Unhandled exception:\n%s\n", e.what());
+ exitCode = 1;
+ }
- std::string basePath = removeSuffix( argv[1], ".json" );
- if ( !parseOnly && basePath.empty() )
- {
- printf( "Bad input path. Path does not end with '.expected':\n%s\n", path.c_str() );
- return 3;
- }
-
- std::string actualPath = basePath + ".actual";
- std::string rewritePath = basePath + ".rewrite";
- std::string rewriteActualPath = basePath + ".actual-rewrite";
-
- Json::Value root;
- exitCode = parseAndSaveValueTree( input, actualPath, "input", root, features, parseOnly );
- if ( exitCode == 0 && !parseOnly )
- {
- std::string rewrite;
- exitCode = rewriteValueTree( rewritePath, root, rewrite );
- if ( exitCode == 0 )
- {
- Json::Value rewriteRoot;
- exitCode = parseAndSaveValueTree( rewrite, rewriteActualPath,
- "rewrite", rewriteRoot, features, parseOnly );
- }
- }
- }
- catch ( const std::exception &e )
- {
- printf( "Unhandled exception:\n%s\n", e.what() );
- exitCode = 1;
- }
-
- return exitCode;
+ return exitCode;
}
// vim: et ts=4 sts=4 sw=4 tw=0