diff --git a/include/json/writer.h b/include/json/writer.h index 3abf2ea..94582d9 100644 --- a/include/json/writer.h +++ b/include/json/writer.h @@ -9,21 +9,37 @@ namespace Json { class Value; + /** \brief Abstract class for writers. + */ + class JSON_API Writer + { + public: + virtual ~Writer(); + + virtual std::string write( const Value &root ) = 0; + }; + /** \brief Outputs a Value in JSON format without formatting (not human friendly). * * The JSON document is written in a single line. It is not intended for 'human' consumption, * but may be usefull to support feature such as RPC where bandwith is limited. * \sa Reader, Value */ - class JSON_API FastWriter + class JSON_API FastWriter : public Writer { public: - std::string write( const Value &root ); + FastWriter(); + + void enableYAMLCompatibility(); + + public: // overridden from Writer + virtual std::string write( const Value &root ); private: void writeValue( const Value &value ); std::string document_; + bool yamlCompatiblityEnabled_; }; /** \brief Writes a Value in JSON format in a human friendly way. @@ -49,11 +65,12 @@ namespace Json { public: StyledWriter(); + public: // overridden from Writer /** \brief Serialize a Value in JSON format. * \param root Value to serialize. * \return String containing the JSON document that represent the root value. */ - std::string write( const Value &root ); + virtual std::string write( const Value &root ); private: void writeValue( const Value &value ); diff --git a/src/jsontestrunner/main.cpp b/src/jsontestrunner/main.cpp index 1d43720..a576564 100644 --- a/src/jsontestrunner/main.cpp +++ b/src/jsontestrunner/main.cpp @@ -115,7 +115,8 @@ rewriteValueTree( const std::string &rewritePath, const Json::Value &root, std::string &rewrite ) { -// Json::FastWriter writer; + //Json::FastWriter writer; + //writer.enableYAMLCompatibility(); Json::StyledWriter writer; rewrite = writer.write( root ); FILE *fout = fopen( rewritePath.c_str(), "wt" ); diff --git a/src/lib_json/json_writer.cpp b/src/lib_json/json_writer.cpp index f1d8168..47577fa 100644 --- a/src/lib_json/json_writer.cpp +++ b/src/lib_json/json_writer.cpp @@ -67,10 +67,29 @@ std::string valueToQuotedString( const char *value ) return std::string("\"") + value + "\""; } +// Class Writer +// ////////////////////////////////////////////////////////////////// +Writer::~Writer() +{ +} + // Class FastWriter // ////////////////////////////////////////////////////////////////// +FastWriter::FastWriter() + : yamlCompatiblityEnabled_( false ) +{ +} + + +void +FastWriter::enableYAMLCompatibility() +{ + yamlCompatiblityEnabled_ = true; +} + + std::string FastWriter::write( const Value &root ) { @@ -106,33 +125,34 @@ FastWriter::writeValue( const Value &value ) break; case arrayValue: { - document_ += "[ "; + document_ += "["; int size = value.size(); for ( int index =0; index < size; ++index ) { if ( index > 0 ) - document_ += ", "; + document_ += ","; writeValue( value[index] ); } - document_ += " ]"; + document_ += "]"; } break; case objectValue: { Value::Members members( value.getMemberNames() ); - document_ += "{ "; + document_ += "{"; for ( Value::Members::iterator it = members.begin(); it != members.end(); ++it ) { const std::string &name = *it; if ( it != members.begin() ) - document_ += ", "; + document_ += ","; document_ += valueToQuotedString( name.c_str() ); - document_ += " : "; + document_ += yamlCompatiblityEnabled_ ? ": " + : ":"; writeValue( value[name] ); } - document_ += " }"; + document_ += "}"; } break; } diff --git a/test/runjsontests.py b/test/runjsontests.py index a5284fb..de7bd9d 100644 --- a/test/runjsontests.py +++ b/test/runjsontests.py @@ -83,7 +83,7 @@ if __name__ == '__main__': sys.exit( 1 ) jsontest_executable_path = os.path.normpath( os.path.abspath( sys.argv[1] ) ) - if len(sys.argv) > 1: + if len(sys.argv) > 2: input_path = os.path.normpath( os.path.abspath( sys.argv[2] ) ) else: input_path = None