JsonParserByLeo/Wf/Test.mq5
Nique_372 e752ef67b3
2026-07-21 10:38:19 -05:00

203 Zeilen
10 KiB
MQL5

//+------------------------------------------------------------------+
//| Test.mq5 |
//| Copyright 2026, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2026, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#define TSN_MQLCI_INLINE_TEST
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#include "Inc\\All.mqh"
//+------------------------------------------------------------------+
//| Inputs |
//+------------------------------------------------------------------+
input long InpCharId = 0;
input string InpTestName = "JsonParserByLeo - Full Suite";
TSN::CJsonParser g_node_parser;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Parseamos una sola vez el fixture de NodeTest.mqh y lo compartimos
g_node_parser.Assing(g_test_json);
g_node_parser.CorrectPadding();
if(!g_node_parser.Parse())
{
Print("Fallo el Parse() del fixture_test.json -> abortando suite de tests");
return INIT_FAILED;
}
//---
TSN::CiTestUtil util;
util.AddLogFlags(LOG_ALL);
util.TestSize(104);
//---
int i = 0;
//---
util.SetTestPtr(i++, new TSN::CTestNode_BracketExistingKey(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_BracketMissingKey(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_BracketChainedDeep(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_AtValidIndex(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_AtOutOfRange(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_AtOnEmptyArray(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_HasKeyTrue(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_HasKeyFalse(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_HasKeyEmptyObj(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_HasKeyForcesHashing(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_BracketAfterHashing(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_GetKeysTopLevel(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_GetKeysEmptyObj(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_GetKeysSingleKeyObj(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_KeyToPositionValid(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_KeyToPositionInvalid(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_ToIntNegative(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_ToIntSafeFromString(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_ToDoubleSmallFloat(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_ToDoubleSafeOnMissing(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_ToBoolDirect(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_IsNull(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_IsValidIsInvalid(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_ToArrayFloats(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_ToArrayBools(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_ExistInArrayStr(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_ExistInArrayHomogeneoInt(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_IteratorArray(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_IteratorObject(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_ArrayOfObjects(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_NestedArrayAccess(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_EscapedString(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_EmptyString(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_StrLenRaw(&g_node_parser));
util.SetTestPtr(i++, new TSN::CTestNode_CompareStrWith(&g_node_parser));
//---
util.SetTestPtr(i++, new TSN::CTestBuilder_SimpleObjString());
util.SetTestPtr(i++, new TSN::CTestBuilder_MultiTypeObj());
util.SetTestPtr(i++, new TSN::CTestBuilder_ArrayInts());
util.SetTestPtr(i++, new TSN::CTestBuilder_EmptyArray());
util.SetTestPtr(i++, new TSN::CTestBuilder_EmptyObj());
util.SetTestPtr(i++, new TSN::CTestBuilder_NestedObjInObj());
util.SetTestPtr(i++, new TSN::CTestBuilder_ArrayOfObjects());
util.SetTestPtr(i++, new TSN::CTestBuilder_NestedArrays());
util.SetTestPtr(i++, new TSN::CTestBuilder_EscapeQuotesBackslash());
util.SetTestPtr(i++, new TSN::CTestBuilder_EscapeNewlineTab());
util.SetTestPtr(i++, new TSN::CTestBuilder_EscapeUnicode());
util.SetTestPtr(i++, new TSN::CTestBuilder_DoublePadding());
util.SetTestPtr(i++, new TSN::CTestBuilder_DoubleNegative());
util.SetTestPtr(i++, new TSN::CTestBuilder_LongBigValue());
util.SetTestPtr(i++, new TSN::CTestBuilder_IntZeroAndNegative());
util.SetTestPtr(i++, new TSN::CTestBuilder_RawNoValidation());
util.SetTestPtr(i++, new TSN::CTestBuilder_ValidJsonFragment());
util.SetTestPtr(i++, new TSN::CTestBuilder_ClearResets());
util.SetTestPtr(i++, new TSN::CTestBuilderStr_SimpleObjDoubleEscaped());
util.SetTestPtr(i++, new TSN::CTestBuilderStr_EscapeQuoteTriple());
util.SetTestPtr(i++, new TSN::CTestBuilderStr_EscapeNewlineDouble());
util.SetTestPtr(i++, new TSN::CTestBuilderStr_EscapeUnicodeDouble());
util.SetTestPtr(i++, new TSN::CTestBuilderStr_NestedObj());
util.SetTestPtr(i++, new TSN::CTestBuilderStr_ArrayMixedValues());
util.SetTestPtr(i++, new TSN::CTestBuilderStr_ValSWVRaw());
util.SetTestPtr(i++, new TSN::CTestBuilder_CrossCompareEscapeLevels());
//---
util.SetTestPtr(i++, new TSN::CTestParser_ToJsonAsmNotEmpty());
util.SetTestPtr(i++, new TSN::CTestParser_JsonAsmRoundTripSameCinta());
util.SetTestPtr(i++, new TSN::CTestParser_JsonAsmRoundTripPreservesValues());
util.SetTestPtr(i++, new TSN::CTestParser_JsonAsmRoundTripEmptyContainers());
util.SetTestPtr(i++, new TSN::CTestParser_JsonAsmRoundTripArray());
util.SetTestPtr(i++, new TSN::CTestParser_JsonAsmDoubleRoundTripStable());
util.SetTestPtr(i++, new TSN::CTestParser_JsonAsmRoundTripNull());
util.SetTestPtr(i++, new TSN::CTestParser_JsonTcRoundTripSameCinta());
util.SetTestPtr(i++, new TSN::CTestParser_JsonTcRoundTripPreservesValues());
util.SetTestPtr(i++, new TSN::CTestParser_JsonTcPreservesHashTables());
util.SetTestPtr(i++, new TSN::CTestParser_JsonTcExternalRefRoundTrip());
util.SetTestPtr(i++, new TSN::CTestParser_JsonTcRoundTripNestedArray());
util.SetTestPtr(i++, new TSN::CTestParser_CrossFormatConsistency());
util.SetTestPtr(i++, new TSN::CTestParser_GetStepInteger());
util.SetTestPtr(i++, new TSN::CTestParser_UnescapeBasic());
util.SetTestPtr(i++, new TSN::CTestParser_MalformedKeyNotClosed());
util.SetTestPtr(i++, new TSN::CTestParser_MalformedUnfinishedJson());
util.SetTestPtr(i++, new TSN::CTestParser_ValidSimpleParseOk());
//=== DomTest.mqh (25) ================================================
util.SetTestPtr(i++, new TSN::CTestDom_ToDomBasicSucceeds());
util.SetTestPtr(i++, new TSN::CTestDom_ToDomPreservesScalars());
util.SetTestPtr(i++, new TSN::CTestDom_ToDomPreservesNesting());
util.SetTestPtr(i++, new TSN::CTestDom_ToDomPreservesNestedArray());
util.SetTestPtr(i++, new TSN::CTestDom_ToDomOnScalarFails());
util.SetTestPtr(i++, new TSN::CTestDom_ToDomKeysAndSizeMatch());
util.SetTestPtr(i++, new TSN::CTestDom_MutateAddNewKey());
util.SetTestPtr(i++, new TSN::CTestDom_MutateChangeTypeDoubleToBool());
util.SetTestPtr(i++, new TSN::CTestDom_MutateObjectToScalarFreesContainer());
util.SetTestPtr(i++, new TSN::CTestDom_RemoveKeyReducesSize());
util.SetTestPtr(i++, new TSN::CTestDom_RemoveMissingKeyReturnsFalse());
util.SetTestPtr(i++, new TSN::CTestDom_RemoveIndexReducesArraySize());
util.SetTestPtr(i++, new TSN::CTestDom_AddItemIncreasesSize());
util.SetTestPtr(i++, new TSN::CTestDom_InRangeValidatesIndices());
util.SetTestPtr(i++, new TSN::CTestDom_AtSafeOutOfRangeReturnsNull());
util.SetTestPtr(i++, new TSN::CTestDom_ClearObjectEmptiesIt());
util.SetTestPtr(i++, new TSN::CTestDom_StandaloneNewObjSetGet());
util.SetTestPtr(i++, new TSN::CTestDom_StandaloneNewArrAddItem());
util.SetTestPtr(i++, new TSN::CTestDom_StandaloneToArray());
util.SetTestPtr(i++, new TSN::CTestDom_MultiManagerSetSharesPointer());
util.SetTestPtr(i++, new TSN::CTestDomSerializer_SimpleObject());
util.SetTestPtr(i++, new TSN::CTestDomSerializer_EscapesStrings());
util.SetTestPtr(i++, new TSN::CTestDomSerializer_NestedArray());
util.SetTestPtr(i++, new TSN::CTestDomSerializer_NullValue());
util.SetTestPtr(i++, new TSN::CTestDomSerializer_FullRoundTripWithMutation());
//--- Sanity check: i debe coincidir exacto con TestSize(104)
if(i != 104)
{
#ifdef TSN_MQLCI_INLINE_TEST
PrintFormat("ERROR: se instanciaron %d tests, esperado 104 (revisar Test.mq5)", i);
return INIT_FAILED;
#else TSN_MQLCI_INLINE_TEST
::EventChartCustom(m_chart_id, CIBYLEO_ONEVENT_RES, CYBYLEO_CODE_ERROR, 0.00, m_test_name);
return CIBYLEO_ONINIT_FINISH;
#endif // TSN_MQLCI_INLINE_TEST
}
//--- (chart_id, min_importance_for_early_exit, label, min_percentage_to_pass)
util.Init(InpCharId, 70, InpTestName, 90.0);
#ifdef TSN_MQLCI_INLINE_TEST
if(!util.RunAllTestAndSend())
{
FastLog(FUNCION_ACTUAL, FATAL_ERROR_TEXT, InpTestName);
return CIBYLEO_ONINIT_FINISH;
}
#else
util.RunAllTestAndSend();
#endif //TSN_MQLCI_INLINE_TEST
//---
return CIBYLEO_ONINIT_FINISH;
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
}
//+------------------------------------------------------------------+