203 Zeilen
10 KiB
MQL5
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()
|
|
{
|
|
//---
|
|
}
|
|
//+------------------------------------------------------------------+
|