.upptst: GuiJsonize

git-svn-id: svn://ultimatepp.org/upp/trunk@4916 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2012-05-09 08:00:08 +00:00
parent 09b20c162b
commit 15852dc807
7 changed files with 388 additions and 287 deletions

View file

@ -0,0 +1,9 @@
uses
CtrlLib;
file
main.cpp;
mainconfig
"" = "GUI SSE2";

4
upptst/GuiJsonize/init Normal file
View file

@ -0,0 +1,4 @@
#ifndef _GuiJsonize_icpp_init_stub
#define _GuiJsonize_icpp_init_stub
#include "CtrlLib/init"
#endif

View file

@ -0,0 +1,84 @@
#include <CtrlLib/CtrlLib.h>
using namespace Upp;
struct TestStruct
{
struct TestV : Moveable<TestV>
{
double a;
Value b;
String ToString() const
{
return Format("a=%d, b=%d", a,b);
}
void Jsonize(JsonIO &json)
{
json
("a", a)
("b", b)
;
}
};
void Add(double a, Value b)
{
TestV v;
v.a = a;
v.b = b;
static int ii;
map.Add("SomeKey" + AsString(++ii), v);
}
void Jsonize(JsonIO &json)
{
StringMap(json, map); // <- string map
}
VectorMap<String,TestV> map;
};
GUI_APP_MAIN
{
StdLogSetup(LOG_COUT|LOG_FILE);
Vector<Value> a, b;
a.Add();
String json = StoreAsJson(a);
RDUMP(json);
LoadFromJson(b, json);
RDUMPC(b);
ASSERT(b.GetCount() == 1 && IsNull(b[0]));
String xml = StoreAsXML(a, "test");
RDUMP(xml);
LoadFromXML(b, xml);
RDUMPC(b);
ASSERT(b.GetCount() == 1 && IsNull(b[0]));
TestStruct test, test2;
test.Add(0, 0);
test.Add(-1.2345, Date(2007, 12, 12));
LoadFromJson(test2, StoreAsJson(test));
RLOG(StoreAsJson(test));
RLOG("===================");
RLOG(StoreAsJson(test2));
ASSERT(StoreAsJson(test) == StoreAsJson(test2));
RLOG("===================");
StoreAsJsonFile(test, NULL, true);
LoadFromJsonFile(test2);
ASSERT(StoreAsJson(test) == StoreAsJson(test2));
String fn = ConfigFile("h");
StoreAsJsonFile(test, fn, true);
RDUMP(LoadFile(fn));
LoadFromJsonFile(test2);
ASSERT(StoreAsJson(test) == StoreAsJson(test2));
TestStruct test3;
ASSERT(!LoadFromJson(test2, "{\"SomeKey1\":{\"a\":\"X\",\"b\":2},\"SomeKey2\":{\"a\":1,\"b\":2}}"));
ASSERT(!LoadFromJsonFile(test2, "c:aksjdfhkjaskjdfkhasdf"));
RLOG("Everything is OK.");
}

View file

@ -1,104 +1,106 @@
#include "SvoValue.h"
CONSOLE_APP_MAIN
{
StdLogSetup(LOG_COUT|LOG_FILE);
// temporary
Value ist = Opt0();
if(ist.Is<int>())
RLOG("int");
if(IsNumber(ist))
RLOG("number");
//
Value v;
ASSERT(v.IsVoid());
CheckType(Value());
CheckType(String("ahoj"), true);
CheckType(String('a', 20), true);
CheckType(String('b', 200), true);
CheckType(WString("ahoj"));
CheckType(123);
CheckType(123.0);
CheckType(true);
CheckType((int64)123, true);
CheckType(Date(2012, 1, 1));
CheckType(Time(2012, 1, 1, 15, 30), true);
CheckType(Complex(1, 2), true);
ValueArray va;
va.Add(123);
va.Add("ahoj");
ASSERT(va.GetCount() == 2);
ASSERT(va[0] == 123);
ASSERT(va[1] == "ahoj");
CheckType(va, true);
ValueMap map;
map.Add("1", 1);
map.Add("2", 2);
CheckType(map, true);
CheckType(Point(20, 20), true);
CheckType(Size(20, 20), true);
CheckType(Rect(0, 0, 123, 123), true);
CheckType(Point64(20, 20), true);
CheckType(Size64(20, 20), true);
CheckType(Rect64(0, 0, 123, 123), true);
CheckType(Pointf(20, 20), true);
CheckType(Sizef(20, 20), true);
CheckType(Rectf(0, 0, 123, 123), true);
CheckType(Blue(), true);
Uuid uuid;
uuid.a = 11234;
uuid.b = 321;
uuid.c = 1111;
uuid.d = 19999;
CheckType(uuid, true);
v = ErrorValue("error");
CheckType(v, true);
ASSERT(v.IsVoid());
ASSERT(v.IsError());
ASSERT(!Value().IsError());
RDUMP(GetErrorText(v));
ASSERT(GetErrorText(v) == "error");
CheckValueMap();
CheckNumber<int>();
CheckNumber<double>();
CheckNumber<int64>();
CheckNumber<bool>();
RLOG("------------------------------");
RLOG("CheckString");
CheckString();
RLOG("------------------------------");
RLOG("CheckDateTime");
CheckDateTime();
RLOG("------------------------------");
RLOG("CheckValue");
CheckRawValue();
RLOG("------------------------------");
RLOG("CheckRawValue");
CheckRawValue();
RLOG("------------------------------");
RLOG("CheckRawPickValue");
CheckRawPickValue();
RLOG("------------------------------");
RLOG("CheckCreateRawValue");
CheckCreateRawValue();
RLOG("------------------------------");
RLOG("OtherChecks");
OtherChecks();
RLOG("------------------------------");
RLOG("######## Everything is OK");
}
#include "SvoValue.h"
GUI_APP_MAIN
{
StdLogSetup(LOG_COUT|LOG_FILE);
// temporary
Value ist = Opt0();
if(ist.Is<int>())
RLOG("int");
if(IsNumber(ist))
RLOG("number");
//
Value v;
ASSERT(v.IsVoid());
CheckType(Value());
CheckType(String("ahoj"), true);
CheckType(String('a', 20), true);
CheckType(String('b', 200), true);
CheckType(WString("ahoj"));
CheckType(123);
CheckType(123.0);
CheckType(true);
CheckType((int64)123, true);
CheckType(Date(2012, 1, 1));
CheckType(Time(2012, 1, 1, 15, 30), true);
CheckType(Complex(1, 2), true);
ValueArray va;
va.Add(123);
va.Add("ahoj");
ASSERT(va.GetCount() == 2);
ASSERT(va[0] == 123);
ASSERT(va[1] == "ahoj");
CheckType(va, true);
ValueMap map;
map.Add("1", 1);
map.Add("2", 2);
CheckType(map, true);
CheckType(Point(20, 20), true);
CheckType(Size(20, 20), true);
CheckType(Rect(0, 0, 123, 123), true);
CheckType(Point64(20, 20), true);
CheckType(Size64(20, 20), true);
CheckType(Rect64(0, 0, 123, 123), true);
CheckType(Pointf(20, 20), true);
CheckType(Sizef(20, 20), true);
CheckType(Rectf(0, 0, 123, 123), true);
CheckType(Blue(), true);
Uuid uuid;
uuid.a = 11234;
uuid.b = 321;
uuid.c = 1111;
uuid.d = 19999;
CheckType(uuid, true);
CheckType(Arial(50), true);
v = ErrorValue("error");
CheckType(v, true);
ASSERT(v.IsVoid());
ASSERT(v.IsError());
ASSERT(!Value().IsError());
RDUMP(GetErrorText(v));
ASSERT(GetErrorText(v) == "error");
CheckValueMap();
CheckNumber<int>();
CheckNumber<double>();
CheckNumber<int64>();
CheckNumber<bool>();
RLOG("------------------------------");
RLOG("CheckString");
CheckString();
RLOG("------------------------------");
RLOG("CheckDateTime");
CheckDateTime();
RLOG("------------------------------");
RLOG("CheckValue");
CheckRawValue();
RLOG("------------------------------");
RLOG("CheckRawValue");
CheckRawValue();
RLOG("------------------------------");
RLOG("CheckRawPickValue");
CheckRawPickValue();
RLOG("------------------------------");
RLOG("CheckCreateRawValue");
CheckCreateRawValue();
RLOG("------------------------------");
RLOG("OtherChecks");
OtherChecks();
RLOG("------------------------------");
RLOG("######## Everything is OK");
}

View file

@ -1,181 +1,181 @@
#ifndef _SvoValue_SvoValue_h_
#define _SvoValue_SvoValue_h_
#include <Core/Core.h>
using namespace Upp;
void DumpNumber(const Value& v);
Value Opt0();
void Opt();
void CheckString();
void CheckDateTime();
void CheckValueMap();
void OtherChecks();
void CheckRawPickValue();
void CheckRawValue();
void CheckCreateRawValue();
template <class T>
void CheckNumber()
{
RLOG("========================================================");
RLOG("CheckNumber " << typeid(T).name());
Value v = (T)123;
Value v2 = (T)0;
Value vn = (T)Null;
Value dv = 123.0;
ASSERT(IsNumber(v));
ASSERT(!IsError(v));
ASSERT(!IsVoid(v));
ASSERT(!IsString(v));
ASSERT(!IsDateTime(v));
ASSERT(vn.Is<bool>() || GetHashValue(v) == GetHashValue(dv));
ASSERT(v != v2);
ASSERT(v != vn);
ASSERT(IsNull(vn) || vn.Is<bool>());
DumpNumber(v);
DumpNumber(vn);
Value v1 = v;
RDUMP(v1);
RDUMP(v2);
RDUMP(v1 != v2);
ASSERT(v1 != v2);
v2 = v1;
RDUMP(v1);
RDUMP(v2);
RDUMP(v1 == v2);
ASSERT(v1 == v2);
Opt();
}
template <class T>
void CheckType(const T& x, bool checkhash = false)
{
RLOG("========================================================");
RLOG("CheckType " << typeid(T).name() << " = " << x);
String fn;
Value vf;
Value tt = x;
bool isvoid = tt.IsVoid();
if(!isvoid) {
fn = ConfigFile(AsString(tt.GetType()) + ":" + AsString(x));
if(FileExists(fn)) {
LoadFromFile(vf, fn);
if(IsValueMap(tt)) {
RDUMP(ValueMap(vf));
ASSERT(ValueMap(vf) == ValueMap(x));
}
else {
RDUMP(vf.To<T>());
ASSERT(vf.To<T>() == x);
}
}
}
Value v = x;
RDUMP(v);
ASSERT((T)v == x);
ASSERT(isvoid ? v.IsVoid() : v.Is<T>());
if(!isvoid) {
StoreToFile(v, fn);
RDUMP(GetValueTypeNo<T>());
ASSERT(v.GetType() == GetValueTypeNo<T>());
if(!tt.Is<ValueArray>() && !tt.Is<ValueMap>())
ASSERT(v.To<T>() == x);
ASSERT((T)(v) == x);
if(!tt.Is<bool>() && !tt.Is<ValueArray>() && !tt.Is<ValueMap>()) {
Value hh;
for(int i = 0; i < 2; i++) {
ASSERT(IsNull(hh.Get<T>()));
ASSERT(IsNull((T)hh));
hh = (int)Null;
}
}
}
if(!vf.IsVoid())
ASSERT(vf == v);
String h = StoreAsString(v);
Value vv;
LoadFromString(vv, h);
RDUMP(vv);
ASSERT(vv == v);
T xx = vv;
RDUMP(xx);
ASSERT(vv == v);
RDUMP(GetHashValue(v));
RDUMP(GetHashValue(xx));
ASSERT(!checkhash || GetHashValue(v) == GetHashValue(xx));
Value vn = (T)Null;
ASSERT(IsNull(vn) || vn.Is<bool>());
DLOG("----------");
RDUMP(v);
String xml = StoreAsXML(v, "test");
RDUMP(xml);
vv = Null;
LoadFromXML(vv, xml);
RDUMP(vv);
ASSERT(vv == v);
String json = StoreAsJson(v);
RDUMP(json);
vv = Null;
LoadFromJson(vv, json);
RDUMP(vv);
ASSERT(vv == v);
if(!tt.Is<bool>()) {
DLOG("----------");
v = Null;
RDUMP(v);
String data = StoreAsString(v);
vv = x;
LoadFromString(vv, data);
RDUMP(vv);
ASSERT(IsNull(vv));
RDUMP(v);
xml = StoreAsXML(v, "test");
RDUMP(xml);
vv = x;
LoadFromXML(vv, xml);
RDUMP(vv);
ASSERT(IsNull(vv));
json = StoreAsJson(v);
RDUMP(json);
vv = x;
LoadFromJson(vv, json);
RDUMP(vv);
ASSERT(IsNull(vv));
DLOG("----------");
T tx = Null;
ASSERT(IsNull(tx));
data = StoreAsString(tx);
T ty = x;
LoadFromString(ty, data);
RDUMP(ty);
ASSERT(IsNull(ty));
RDUMP(v);
xml = StoreAsXML(tx, "test");
RDUMP(xml);
ty = x;
LoadFromXML(ty, xml);
RDUMP(ty);
ASSERT(IsNull(ty));
json = StoreAsJson(tx);
RDUMP(json);
ty = x;
LoadFromJson(ty, json);
RDUMP(ty);
ASSERT(IsNull(vv));
}
}
#endif
#ifndef _SvoValue_SvoValue_h_
#define _SvoValue_SvoValue_h_
#include <CtrlLib/CtrlLib.h>
using namespace Upp;
void DumpNumber(const Value& v);
Value Opt0();
void Opt();
void CheckString();
void CheckDateTime();
void CheckValueMap();
void OtherChecks();
void CheckRawPickValue();
void CheckRawValue();
void CheckCreateRawValue();
template <class T>
void CheckNumber()
{
RLOG("========================================================");
RLOG("CheckNumber " << typeid(T).name());
Value v = (T)123;
Value v2 = (T)0;
Value vn = (T)Null;
Value dv = 123.0;
ASSERT(IsNumber(v));
ASSERT(!IsError(v));
ASSERT(!IsVoid(v));
ASSERT(!IsString(v));
ASSERT(!IsDateTime(v));
ASSERT(vn.Is<bool>() || GetHashValue(v) == GetHashValue(dv));
ASSERT(v != v2);
ASSERT(v != vn);
ASSERT(IsNull(vn) || vn.Is<bool>());
DumpNumber(v);
DumpNumber(vn);
Value v1 = v;
RDUMP(v1);
RDUMP(v2);
RDUMP(v1 != v2);
ASSERT(v1 != v2);
v2 = v1;
RDUMP(v1);
RDUMP(v2);
RDUMP(v1 == v2);
ASSERT(v1 == v2);
Opt();
}
template <class T>
void CheckType(const T& x, bool checkhash = false)
{
RLOG("========================================================");
RLOG("CheckType " << typeid(T).name() << " = " << x);
String fn;
Value vf;
Value tt = x;
bool isvoid = tt.IsVoid();
if(!isvoid) {
fn = ConfigFile(AsString(tt.GetType()) + ":" + AsString(x));
if(FileExists(fn)) {
LoadFromFile(vf, fn);
if(IsValueMap(tt)) {
RDUMP(ValueMap(vf));
ASSERT(ValueMap(vf) == ValueMap(x));
}
else {
RDUMP(vf.To<T>());
ASSERT(vf.To<T>() == x);
}
}
}
Value v = x;
RDUMP(v);
ASSERT((T)v == x);
ASSERT(isvoid ? v.IsVoid() : v.Is<T>());
if(!isvoid) {
StoreToFile(v, fn);
RDUMP(GetValueTypeNo<T>());
ASSERT(v.GetType() == GetValueTypeNo<T>());
if(!tt.Is<ValueArray>() && !tt.Is<ValueMap>())
ASSERT(v.To<T>() == x);
ASSERT((T)(v) == x);
if(!tt.Is<bool>() && !tt.Is<ValueArray>() && !tt.Is<ValueMap>()) {
Value hh;
for(int i = 0; i < 2; i++) {
ASSERT(IsNull(hh.Get<T>()));
ASSERT(IsNull((T)hh));
hh = (int)Null;
}
}
}
if(!vf.IsVoid())
ASSERT(vf == v);
String h = StoreAsString(v);
Value vv;
LoadFromString(vv, h);
RDUMP(vv);
ASSERT(vv == v);
T xx = vv;
RDUMP(xx);
ASSERT(vv == v);
RDUMP(GetHashValue(v));
RDUMP(GetHashValue(xx));
ASSERT(!checkhash || GetHashValue(v) == GetHashValue(xx));
Value vn = (T)Null;
ASSERT(IsNull(vn) || vn.Is<bool>());
DLOG("----------");
RDUMP(v);
String xml = StoreAsXML(v, "test");
RDUMP(xml);
vv = Null;
LoadFromXML(vv, xml);
RDUMP(vv);
ASSERT(vv == v);
String json = StoreAsJson(v);
RDUMP(json);
vv = Null;
LoadFromJson(vv, json);
RDUMP(vv);
ASSERT(vv == v);
if(!tt.Is<bool>()) {
DLOG("----------");
v = Null;
RDUMP(v);
String data = StoreAsString(v);
vv = x;
LoadFromString(vv, data);
RDUMP(vv);
ASSERT(IsNull(vv));
RDUMP(v);
xml = StoreAsXML(v, "test");
RDUMP(xml);
vv = x;
LoadFromXML(vv, xml);
RDUMP(vv);
ASSERT(IsNull(vv));
json = StoreAsJson(v);
RDUMP(json);
vv = x;
LoadFromJson(vv, json);
RDUMP(vv);
ASSERT(IsNull(vv));
DLOG("----------");
T tx = Null;
ASSERT(IsNull(tx));
data = StoreAsString(tx);
T ty = x;
LoadFromString(ty, data);
RDUMP(ty);
ASSERT(IsNull(ty));
RDUMP(v);
xml = StoreAsXML(tx, "test");
RDUMP(xml);
ty = x;
LoadFromXML(ty, xml);
RDUMP(ty);
ASSERT(IsNull(ty));
json = StoreAsJson(tx);
RDUMP(json);
ty = x;
LoadFromJson(ty, json);
RDUMP(ty);
ASSERT(IsNull(vv));
}
}
#endif

View file

@ -3,7 +3,8 @@ description "Value unit testing\377";
optimize_speed;
uses
Core;
Core,
CtrlLib;
file
SvoValue.h,
@ -13,5 +14,5 @@ file
SvoValue.cpp optimize_speed;
mainconfig
"" = "SSE2 SVO_VALUE";
"" = "SSE2 SVO_VALUE GUI";

View file

@ -1,4 +1,5 @@
#ifndef _SvoValue_icpp_init_stub
#define _SvoValue_icpp_init_stub
#include "Core/init"
#include "CtrlLib/init"
#endif