202 lines
10 KiB
MQL5
202 lines
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
| |
#define TEST_SIZE (102)
| |
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
#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(TEST_SIZE);
| |
| |
//---
| |
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::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_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_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());
| |
util.SetTestPtr(i++, new TSN::CTestParser_TrailingCommaRejected());
| |
util.SetTestPtr(i++, new TSN::CTestParser_UnescapeUnicodeOnDemand());
| |
util.SetTestPtr(i++, new TSN::CTestParser_DuplicateKeysFirstWins());
| |
util.SetTestPtr(i++, new TSN::CTestParser_BracketMismatchRejected());
| |
util.SetTestPtr(i++, new TSN::CTestParser_LeadingZerosRejected());
| |
util.SetTestPtr(i++, new TSN::CTestParser_MalformedDecimalAndExponent());
| |
util.SetTestPtr(i++, new TSN::CTestParser_MalformedLiteralsRejected());
| |
| |
//=== 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(TEST_SIZE)
| |
if(i != TEST_SIZE)
| |
{
| |
#ifdef TSN_MQLCI_INLINE_TEST
| |
PrintFormat("ERROR: se instanciaron %d tests, esperado TEST_SIZE (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()
| |
{
| |
//---
| |
}
| |
//+------------------------------------------------------------------+
|