feat: implement apex test parser and add coverage percentage

This commit is contained in:
Ross Reicks 2024-07-11 13:02:16 -05:00
parent c4f7701aa1
commit 0f142e1e2a
15 changed files with 6278 additions and 18 deletions

View file

@ -0,0 +1,791 @@
![Tests failed](https://img.shields.io/badge/tests-735%20passed%2C%201%20failed-critical)
|Report|Passed|Failed|Skipped|Time|Coverage|
|:---|---:|---:|---:|---:|---:|
|fixtures/apex-json.json|735 ✅|1 ❌||26s|85%|
## ❌ <a id="user-content-r0" href="#r0">fixtures/apex-json.json</a>
**736** tests were completed in **26s** with **735** passed, **1** failed and **0** skipped.
|Test suite|Passed|Failed|Skipped|Time|Coverage|
|:---|---:|---:|---:|---:|---:|
|[Apex Tests](#r0s0)|735 ✅|1 ❌||26s|85%|
### ❌ <a id="user-content-r0s0" href="#r0s0">Apex Tests</a>
```
fflib_SecurityUtilsTest
❌ testSetup
Validation Errors While Saving Record(s)
✅ readonly_field_access
✅ readonly_objectAndField_access
✅ readonly_object_access
✅ sysadmin_objectAndField_access
fflib_StringBuilderTest
✅ testCommaDelimitedBuilder1
✅ testCommaDelimitedBuilder2
✅ testCommanDelimitedBuilderWithAlternativeDelimiter
✅ testCommanDelimitedBuilderWithAlternativeDelimiterAndPrefix
✅ testCommanDelimitedBuilderWithItemPrefix
✅ testFieldListBuilder
✅ testMultiCurrencyFieldListBuilder
✅ testfflib_StringBuilder1
✅ testfflib_StringBuilder2
fflib_ApplicationTest
✅ callingDomainFactoryShouldGiveRegisteredImplsAndMocks
✅ callingDomainFactoryWithContructorClassThatDoesNotSupportIConstructableShouldGiveException
✅ callingDomainFactoryWithGenericListShouldGiveException
✅ callingDomainFactoryWithIdsShouldGiveRegisteredImpls
✅ callingDomainFactoryWithInAccessableConstructorShouldGiveException
✅ callingDomainFactoryWithNoSObjectTypeShouldGiveException
✅ callingMockedUnitOfWorkWithCustomDML
✅ callingMockedUnitOfWorkWithCustomObjectTypesAndDML
✅ callingSelectorFactorySelectByIdWithEmptyListShouldGiveException
✅ callingSelectorFactorySelectByIdWithMixedIdTypeListShouldGiveException
✅ callingSelectorFactoryShouldGiveRegisteredImpls
✅ callingSelectoryFactorySelectByIdShouldReturnResults
✅ callingSelectoryFactorySselectByRelationshipPassRelatedIds
✅ callingServiceFactoryShouldGiveRegisteredImplsAndMockImpls
✅ callingUnitOfWorkFactoryShouldGivenStandardImplsAndMockImpls
✅ callingUnitOfWorkFactoryWithCustomTypesShouldGivenStandardImplsAndMockImpls
✅ callingUnitOfWorkWithCustomDML
✅ callingUnitOfWorkWithCustomObjectTypesAndDML
fflib_SObjectDomainTest
✅ itShouldReturnTheChangedRecordsBySObjectFields
✅ itShouldReturnTheChangedRecordsByStringFields
✅ testDisableTriggerEventsBehaviour
✅ testErrorLogging
✅ testGetChangedFieldsAsStrings
✅ testInsertValidationFailedWithoutDML
✅ testObjectSecurity
✅ testOnAfterUndeleteWithoutDML
✅ testOnBeforeDeleteWithoutDML
✅ testOnValidateBehaviorDefault
✅ testOnValidateBehaviorOld
✅ testRecursiveTriggerState
✅ testTriggerState
✅ testUpdateValidationFailedWithoutDML
✅ testValidationWithoutDML
fflib_SObjectSelectorTest
✅ testSetup
✅ testAddQueryFactorySubselect
✅ testAddQueryFactorySubselect2
✅ testAssertIsAccessible
✅ testCRUDOff
✅ testConfigureQueryFactoryFields
✅ testDefaultConfig
✅ testGetFieldListString
✅ testGetRelatedFieldListString
✅ testGetSObjectName
✅ testQueryLocatorById
✅ testSOQL
✅ testSOQL_defaultSorting
✅ testSelectSObjectsById
✅ testWithOrderingNullsLast
✅ testWithoutSorting
✅ toSOQL_When_PolymorphicSelectInMulticurrency_Expect_RelatedType
✅ toSOQL_When_PolymorphicSelect_Expect_RelatedType
✅ toSOQL_When_SystemModeAndChildRelationship_Expect_WellFormedSOQL
✅ toSOQL_When_SystemModeAndParentRelationshipAndDuplicateFields_Expect_WellFormedSOQL
✅ toSOQL_When_SystemModeAndUserCannnotReadField_Expect_Success
✅ toSOQL_When_SystemModeAndUserCannnotReadObject_Expect_Success
✅ toSOQL_When_SystemModePolymorphicSelect_Expect_RelatedType
✅ toSOQL_When_UserModeAndUserCannnotReadField_Expect_QueryException
✅ toSOQL_When_UserModeAndUserCannnotReadObject_Expect_QueryException
fflib_SObjectUnitOfWorkTest
✅ constructUserModeDML_When_AccessLevelSupplied_Expect_SameAccessLevel
✅ constructUserModeDML_When_DefaultConstructor_Expect_UserMode
✅ testAssertForEventSObjectType
✅ testAssertForEventSObjectType_ThrowExceptionOnNonEventObject
✅ testAssertForNonEventSObjectType
✅ testAssertForNonEventSObjectType_ThrowExceptionOnEventObject
✅ testAssertForSupportedSObjectType_throwExceptionOnUnsupportedType
✅ testDerivedUnitOfWork_CommitDMLFail
✅ testDerivedUnitOfWork_CommitDoWorkFail
✅ testDerivedUnitOfWork_CommitSuccess
✅ testRegisterDeleted
✅ testRegisterDirtyRecordsWithDirtyFields
✅ testRegisterDirtyRecordsWithDirtyFields_failing
✅ testRegisterDirty_ExpectReplacement
✅ testRegisterDirty_ThrowExceptionOnNewRecord
✅ testRegisterDirty_field
✅ testRegisterEmptyRecycleBin
✅ testRegisterNew_ThrowExceptionOnDirtyRecord
✅ testRegisterPermanentlyDeleted
✅ testRegisterUpsert
✅ testUnitOfWorkEmail
fflib_SObjectsTest
✅ itShouldClearTheField
✅ itShouldReturnFieldValues
✅ itShouldReturnRecordsIds
✅ itShouldReturnRecordsWithAllFieldValues
✅ itShouldReturnRecordsWithFieldValues
✅ itShouldReturnRecordsWithShippingCountry
✅ itShouldReturnRecordsWithoutAllFieldValues
✅ itShouldReturnRecordsWithoutFieldValues
✅ itShouldReturnTheDomainsType
✅ itShouldSetFieldValue
✅ itShouldSetFieldValueByCondition
✅ testDomainErrorLogging
✅ testErrorLogging
fflib_ObjectsTest
✅ itShouldContainAllTheObjects
✅ itShouldContainTheObject
✅ itShouldGetTheObjectType
✅ itShouldHaveAnEmptyDomain
✅ itShouldNotBeAnEmptyDomain
✅ itShouldNotContainTheObject
✅ itShouldNotContainTheObjects
✅ itShouldReturnTheCorrectType
fflib_QueryFactoryTest
✅ addChildQueriesWithChildRelationshipNoAccessibleCheck_fail
✅ addChildQueriesWithChildRelationshipNoAccessibleCheck_success
✅ addChildQueriesWithChildRelationshipObjCheckIsAccessible_success
✅ addChildQueriesWithChildRelationshipObj_success
✅ addChildQueriesWithChildRelationship_success
✅ addChildQueries_invalidChildRelationship
✅ addChildQueries_invalidChildRelationshipTooDeep
✅ addChildQueries_success
✅ addChildQuerySameRelationshipAgain_success
✅ checkFieldObjectReadSort_success
✅ checkFieldRead_fail
✅ checkObjectRead_fail
✅ deepCloneBasic
✅ deepCloneBasicNoChanges
✅ deepCloneSubquery
✅ deepCloneSubqueryNoChanges
✅ deterministic_toSOQL
✅ duplicateFieldSelection
✅ equalityCheck
✅ fieldSelections
✅ invalidCrossObjectField
✅ invalidFieldTests
✅ invalidField_nullToken
✅ invalidField_string
✅ invalidFields_noQueryField
✅ invalidFields_nullToken
✅ invalidFields_string
✅ nonReferenceField
✅ ordering
✅ queryFieldsNotEquals
✅ queryWith_noFields
✅ setOrdering_ReplacesPreviousOrderingsWithExpectedOrdering
✅ simpleFieldCondition
✅ simpleFieldSelection
✅ testSoql_allRows
✅ testSoql_unsortedSelectFields
fflib_SObjectDescribeTest
✅ FieldsMap
✅ GlobalDescribeMap
✅ NamespacedAttributeMap_implementations
✅ flushCache
✅ getAccountDescribes
✅ getDescribe_badInput
✅ rawGlobalDescribeCheck
✅ simpleAccountFieldDescribe
✅ simpleAccountFieldSetDescribe
✅ simpleAccountGetNameField
DomainProcessInjectionTest
✅ DomainProcessInjectionMethodTest
✅ accountInsertTwoCriteria
✅ accountUpdateTwoCriteria
✅ accountUpdateTwoCriteriaAsync
✅ verifyDomainProcessCoordinatorConstructorException
✅ verifyNewInstanceExceptionWithBadParams
✅ verifyNewInstanceExceptionWithNullParams
PlatformEventDistributorTest
✅ whenAT4DXImmediateMessagePublishedToEventBusTriggerHandlerProcessesEvent
✅ whenAT4DXMessagePublishedToEventBusTriggerHandlerProcessesEvent
✅ whenInvalidConsumerSuppliedExceptionThrown
✅ whenTriggerHandlerInvokedWithEventsWithoutCategoryOrEventNameFieldExceptionThrown
✅ whenTriggerHandlerInvokedWithMatchEventBus
✅ whenTriggerHandlerInvokedWithMatchEventBusAndCategory
✅ whenTriggerHandlerInvokedWithMatchEventBusAndCategoryAndEventName
✅ whenTriggerHandlerInvokedWithMatchEventBusAndEventName
✅ whenTriggerHandlerInvokedWithMatchEventBusWithAsynchronousSubscriber
fflib_QualifiedMethodTest
✅ equalsReturnsExpectedResults
✅ equalsReturnsExpectedResultsForHasDependentMocks
✅ hashCodeReturnsExpectedResults
✅ hashCodeReturnsExpectedResultsForHasDependentMocks
✅ toStringReturnsExpectedResult
di_PlatformCacheTest
✅ givenANewConfigSettingThenGetThatInstance
✅ givenCacheMapAddedThenGetKeys
✅ givenCachedBindingsClearThenGetEmpty
✅ givenDataInCachePartitionIsEnabledThenGetEmptyKeys
✅ givenDataInCachePartitionIsNotEnabledThenGetEmptyKeys
✅ givenDevNameAndSTypeThenGetHashAndKey
✅ givenInvalidDeveloperNameThenGetEmptyKeys
✅ givenInvalidSObjectTypeThenGetEmptyKeys
✅ givenKeyIndexNameThenGetKey
✅ givenLogMethodThenGetKeys
✅ givenNoDataInCachePartitionThenGetEmptyKeys
✅ givenNoPlatformCacheInstanceThenCreate
✅ givenPartitionNameSetThenGetNonNull
✅ givenPartitionTTLSetThenGetSeconds
✅ givenPlatformCacheConfigThenCreate
✅ givenReadOnlyAccessThenGetInstance
✅ givenStoringBindingIsTrueThenGet
✅ givenValidBindingThenAddBinding
✅ givenValidSTypeAndNameThenHash
✅ givenValidTSTypeAndNameThenHash
fflib_QualifiedMethodAndArgValuesTest
✅ equalsReturnsExpectedResults
ApplicationSObjectSelectorTest
✅ getSObjectFieldListTest
✅ selectionInjectionTest
ApplicationSObjectUnitOfWorkTest
✅ verifyApplicationSobjectUOWConstructorWithDML
✅ verifyGetDeletedRecordsByType
✅ verifyRegisterDirtyWithParentRecord
✅ verifyRegisterEmails
✅ verifyRegisterNewWithParentRecord
✅ verifyRegisterSingleRecordReturnDirtyRecordsByType
✅ verifyRegisterSingleRecordReturnsNewRecordsByType
✅ verifyRegisteredRecordListReturnDirtyRecordsByType
✅ verifyRegisteredRecordListReturnsNewRecordsByType
fflib_MethodArgValuesTest
✅ equalsReturnsExpectedResults
✅ hashCodeReturnsExpectedResults
fflib_MatcherDefinitionsTest
✅ constructDatetimeAfter_WithNullFromDatetime_ThrowsException
✅ constructDatetimeAfter_WithNullInclusive_ThrowsException
✅ constructDatetimeBefore_WithNullInclusive_ThrowsException
✅ constructDatetimeBefore_WithNullToDatetime_ThrowsException
✅ constructDatetimeBetween_WithNullFromDatetime_ThrowsException
✅ constructDatetimeBetween_WithNullInclusiveFrom_ThrowsException
✅ constructDatetimeBetween_WithNullInclusiveTo_ThrowsException
✅ constructDatetimeBetween_WithNullToDatetime_ThrowsException
✅ constructDecimalBetween_WithNullInclusiveLower_ThrowsException
✅ constructDecimalBetween_WithNullInclusiveUpper_ThrowsException
✅ constructDecimalBetween_WithNullLower_ThrowsException
✅ constructDecimalBetween_WithNullUpper_ThrowsException
✅ constructDecimalLessThan_WithNullInclusive_ThrowsException
✅ constructDecimalLessThan_WithNullToMatch_ThrowsException
✅ constructDecimalMoreThan_WithNullInclusive_ThrowsException
✅ constructDecimalMoreThan_WithNullToMatch_ThrowsException
✅ constructEq_WithNullArg_ThrowsException
✅ constructFieldSetEquivalentTo_WithNullFieldSet_ThrowsException
✅ constructRefEq_WithNullArg_ThrowsException
✅ constructSObjectOfType_WithNullArg_ThrowsException
✅ constructSObjectWithId_WithNullArg_ThrowsException
✅ constructSObjectWithName_WithNullArg_ThrowsException
✅ constructSObjectWith_WithEmptyArg_ThrowsException
✅ constructSObjectWith_WithNullArg_ThrowsException
✅ constructSObjectsWith_WithNullArg_ThrowsException
✅ constructStringContains_WithNullArg_ThrowsException
✅ constructStringEndsWith_WithNullArg_ThrowsException
✅ constructStringMatches_WithNullArg_ThrowsException
✅ constructStringStartsWith_WithNullArg_ThrowsException
✅ whenAnyBooleanMatchesShouldReturnCorrectResults
✅ whenAnyBooleanToStringReturnsExpectedString
✅ whenAnyDateMatchesShouldReturnCorrectResults
✅ whenAnyDateToStringReturnsExpectedString
✅ whenAnyDatetimeMatchesShouldReturnCorrectResults
✅ whenAnyDatetimeToStringReturnsExpectedString
✅ whenAnyDecimalMatchesShouldReturnCorrectResults
✅ whenAnyDecimalToStringReturnsExpectedString
✅ whenAnyDoubleMatchesShouldReturnCorrectResults
✅ whenAnyDoubleToStringReturnsExpectedString
✅ whenAnyFieldSetMatchesShouldReturnCorrectResults
✅ whenAnyFieldSetToStringReturnsExpectedString
✅ whenAnyIdMatchesShouldReturnCorrectResults
✅ whenAnyIdToStringReturnsExpectedString
✅ whenAnyIntegerMatchesShouldReturnCorrectResults
✅ whenAnyIntegerToStringReturnsExpectedString
✅ whenAnyListMatchesShouldReturnCorrectResults
✅ whenAnyListToStringReturnsExpectedString
✅ whenAnyLongMatchesShouldReturnCorrectResults
✅ whenAnyLongToStringReturnsExpectedString
✅ whenAnyObjectMatchesShouldReturnCorrectResults
✅ whenAnyObjectToStringReturnsExpectedString
✅ whenAnySObjectFieldMatchesShouldReturnCorrectResults
✅ whenAnySObjectFieldToStringReturnsExpectedString
✅ whenAnySObjectMatchesShouldReturnCorrectResults
✅ whenAnySObjectToStringReturnsExpectedString
✅ whenAnySObjectTypeMatchesShouldReturnCorrectResults
✅ whenAnySObjectTypeToStringReturnsExpectedString
✅ whenAnyStringMatchesShouldReturnCorrectResults
✅ whenAnyStringToStringReturnsExpectedString
✅ whenCombinedMatcherToStringReturnsExpectedString
✅ whenCombinedMatchesWithAllExpressionShouldReturnCorrectResults
✅ whenCombinedMatchesWithAtLeastOneExpressionShouldReturnCorrectResults
✅ whenCombinedMatchesWithNoneExpressionShouldReturnCorrectResults
✅ whenConstructingCombinedWithEmptyInternalMatchersShouldThrowException
✅ whenConstructingCombinedWithNullConnectiveExpressionShouldThrowException
✅ whenConstructingCombinedWithNullInternalMatchersShouldThrowException
✅ whenDatetimeAfterMatchesWithInclusiveShouldReturnCorrectResults
✅ whenDatetimeAfterMatchesWithoutInclusiveShouldReturnCorrectResults
✅ whenDatetimeAfterWithInclusiveToStringReturnsExpectedString
✅ whenDatetimeAfterWithNotInclusiveToStringReturnsExpectedString
✅ whenDatetimeBeforeMatchesWithInclusiveShouldReturnCorrectResults
✅ whenDatetimeBeforeMatchesWithoutInclusiveShouldReturnCorrectResults
✅ whenDatetimeBeforeWithInclusiveToStringReturnsExpectedString
✅ whenDatetimeBeforeWithNotInclusiveToStringReturnsExpectedString
✅ whenDatetimeBetweenMatchesWithInclusiveFromWithoutInclusiveToShouldReturnCorrectResults
✅ whenDatetimeBetweenMatchesWithInclusiveToWithoutInclusiveFromShouldReturnCorrectResults
✅ whenDatetimeBetweenWithInclusiveToStringReturnsExpectedString
✅ whenDatetimeBetweenWithNotInclusiveToStringReturnsExpectedString
✅ whenDecimalBetweenMatchesShouldReturnCorrectResults
✅ whenDecimalBetweenToStringReturnsExpectedString
✅ whenDecimalLessThanMatchesShouldReturnCorrectResults
✅ whenDecimalLessThanToStringReturnsExpectedString
✅ whenDecimalMoreThanMatchesShouldReturnCorrectResults
✅ whenDecimalMoreThanToStringReturnsExpectedString
✅ whenEqMatchesShouldReturnCorrectResults
✅ whenEqToStringShouldReturnExpectedString
✅ whenFieldSetEquivalentToMatchesShouldReturnCorrectResults
✅ whenFieldSetEquivalentToToStringReturnsExpectedString
✅ whenFieldSetEquivalentToWithoutFieldSetShouldNeverMatch
✅ whenIsBlankWithMatchesShouldReturnCorrectResults
✅ whenIsNotBlankWithMatchesShouldReturnCorrectResults
✅ whenIsNotNullMatchesShouldReturnCorrectResults
✅ whenIsNotNullToStringReturnsExpectedString
✅ whenIsNullMatchesShouldReturnCorrectResults
✅ whenIsNullToStringReturnsExpectedString
✅ whenJSONExceptionOccursStringifyShouldReturnsObjectToString
✅ whenListContainsMatchesShouldReturnCorrectResults
✅ whenListContainsToStringReturnsExpectedString
✅ whenListIsEmptyMatchesShouldReturnCorrectResults
✅ whenListIsEmptyToStringReturnsExpectedString
✅ whenRefEqMatchesShouldReturnCorrectResults
✅ whenRefEqToStringReturnsExpectedString
✅ whenSObjectOfTypeMatchesShouldReturnCorrectResults
✅ whenSObjectOfTypeToStringReturnsExpectedString
✅ whenSObjectWithIdMatchesShouldReturnCorrectResults
✅ whenSObjectWithIdToStringReturnsExpectedString
✅ whenSObjectWithMatchesShouldReturnCorrectResults
✅ whenSObjectWithNameMatchesShouldReturnCorrectResults
✅ whenSObjectWithNameToStringReturnsExpectedString
✅ whenSObjectWithToStringReturnsExpectedString
✅ whenSObjectsInAnyOrderWithMatchesShouldReturnCorrectResults
✅ whenSObjectsWithDifferentArityMatchesShouldReturnFalse
✅ whenSObjectsWithInOrderMatchesShouldReturnCorrectResults
✅ whenSObjectsWithToStringReturnsExpectedString
✅ whenStringContainsMatchesShouldReturnCorrectResults
✅ whenStringContainsToStringReturnsExpectedStrings
✅ whenStringEndsWithMatchesShouldReturnCorrectResults
✅ whenStringEndsWithToStringReturnsExpectedStrings
✅ whenStringIsBlankToStringReturnsExpectedStrings
✅ whenStringIsNotBlankToStringReturnsExpectedStrings
✅ whenStringMatchesMatchesShouldReturnCorrectResults
✅ whenStringMatchesToStringReturnsExpectedStrings
✅ whenStringStartsWithMatchesShouldReturnCorrectResults
✅ whenStringStartsWithToStringReturnsExpectedStrings
di_FlowTest
✅ givenNullInputWhenObjectCreatedThenSetInitialized
✅ givenStringValueWhenOutputThenStringAddedToSet
✅ givenVariableNameWhenRequiredThenValueAddedToSet
di_InjectorCMPFlowProxyControllerTest
✅ givenValueWhenGetInjectThenThrowException
di_InjectorComponentControllerTest
✅ givenApexPageComponentGetInjectorIsValid
✅ givenFlowNameWhenGetInjectorFlowProxyInstanceThenMethodCall
✅ givenLightningComponentGetBindingId
✅ givenWrongBindingNameValueWhenGetInjectThenThrowException
AbstractSelectorMethodInjectableTest
✅ verifyAbstractSelectorMethodInjection
AbstractSelectorQueryLocatorInjectblTest
✅ verifyAbstractSelectorQueryLocatorInjection
di_InjectorControllerTest
✅ givenStandardControllerWhenObjectCreatedThenConstructorCalled
di_InjectorTest
✅ givenBindingsWithAlternateObjectNameThenBindingIsReturned
✅ givenInjectorWithBindingsThenBindingIsReturned
✅ givenInstanceNameThenGetException
✅ givenInstanceThenGetThatInstance
✅ givenListOfModulesBindThenGetCount
✅ givenNoBindingsGetInstanceShouldThrowException
✅ givenNullParamterInGetInstanceThenThrowException
✅ givenNullSTypeParamterInGetInstanceThenThrowException
✅ test
✅ whenDeveloperNameIsEmptyThenGetInstanceShouldThrowException
ApplicationFactoryTest
✅ Application_Domain_Constructor2Test
✅ Application_Domain_ConstructorTest
✅ Application_Domain_MockDomainConstructor2Test
✅ Application_Domain_MockDomainConstructorTest
✅ Application_Selector_HappyPathTest
✅ Application_Selector_PrioritizationTest
✅ Application_Selector_SelectByIdHelperTest
✅ Application_Selector_SelectByRelationshipTest
✅ Application_Selector_SetMockTest
✅ Application_Service_HappyPathTest
✅ Application_Service_MockServiceTest
✅ Application_Service_MultiServiceTest
✅ Application_UnitOfWork_HappyPathTest
fflib_AnswerTest
✅ thatAnswerOnlyForTheMethodStubbedWithAnswer
✅ thatAnswerOnlyForTheStubbedParameter
✅ thatAnswerToDifferentVoidMethods
✅ thatAnswerToVoidAndNotVoidMethods
✅ thatAnswerToVoidMethod
✅ thatAnswersWithException
✅ thatArgumentListEmptyForMethodWithNoArgument
✅ thatExceptionIsThrownWhenAccessNegativeIndexArgument
✅ thatExceptionIsThrownWhenAccessOutOfIndexArgument
✅ thatMethodsParametersAreAccessible
✅ thatMethodsParametersAreAccessibleWhenCalledWithMatchers
✅ thatMultipleAnswersAreHandled
✅ thatStoresMethodIntoInvocationOnMock
✅ thatStoresMockInstanceIntoInvocationOnMock
PlatformEventDistributorDIModuleTest
✅ whenPlatformEventSubscriptionConsumerBlankExceptionThrown
✅ whenPlatformEventSubscriptionCustomMetadataPresentVerifyForceDIBinding
✅ whenPlatformEventSubscriptionEventBusBlankExceptionThrown
di_ModuleTest
✅ givenBadBindingTypeThenGetModuleException
✅ givenBindingInModuleWhenSetTypeThenGetModule
✅ givenModuleWhenSettingValuesThenGet
fflib_SystemTest
✅ assertEquals_WithCombinedMatcher_ShouldPass
✅ assertEquals_WithCustomMessage_WithCombinedMatcher_ShouldPass
✅ assertEquals_WithCustomMessage_WithMatch_ShouldPass
✅ assertEquals_WithCustomMessage_WithMismatch_ShouldThrowException
✅ assertEquals_WithCustomMessage_WithNoMatchers_ShouldThrowException
✅ assertEquals_WithCustomMessage_WithTooManyMatchers_ShouldThrowException
✅ assertEquals_WithMatch_ShouldPass
✅ assertEquals_WithMismatch_ShouldThrowException
✅ assertEquals_WithNoMatchers_ShouldThrowException
✅ assertEquals_WithTooManyMatchers_ShouldThrowException
fflib_ArgumentCaptorTest
✅ thatArgumentValueIsCaptured
✅ thatArgumentValueIsCapturedWithInOrderVerification
✅ thatCanHandleMultipleCapturesInOneMethodCall
✅ thatCanHandleMultipleCapturesInOneMethodCallWithInOrderVerification
✅ thatCanPerformFurtherAssertionsOnCapturedArgumentValue
✅ thatCanPerformFurtherAssertionsOnCapturedArgumentValueWithInOrderVerification
✅ thatCaptureAllArguments
✅ thatCaptureAllArgumentsForTheVerifiedMethods
✅ thatCaptureAllArgumentsForTheVerifiedMethodsWithInOrderVerification
✅ thatCaptureAllArgumentsFromMultipleMethods
✅ thatCaptureAllArgumentsFromMultipleMethodsWithInOrderVerification
✅ thatCaptureAllArgumentsWithInOrderVerification
✅ thatCaptureAllArgumentswhenMethodIsCalledWithTheSameArgument
✅ thatCaptureArgumentFromRequestedParameter
✅ thatCaptureArgumentFromRequestedParameterWithInOrderVerification
✅ thatCaptureArgumentOnlyFromVerifiedMethod
✅ thatCaptureArgumentOnlyFromVerifiedMethodWithInOrderVerification
✅ thatCaptureLastArgument
✅ thatCaptureLastArgumentWithInOrderVerification
✅ thatCaptureOnlyMethodsThatMatchesWithOtherMatcherAsWell
✅ thatCaptureOnlyMethodsThatMatchesWithOtherMatcherAsWellWithInOrderVerification
✅ thatDoesNotCaptureAnythingWhenCaptorIsWrappedInAMatcher
✅ thatDoesNotCaptureAnythingWhenCaptorIsWrappedInAMatcherWithInOrderVerification
✅ thatDoesNotCaptureIfNotVerified
✅ thatDoesNotCaptureIfNotVerifiedWithInOrderVerification
fflib_ApexMocksUtilsTest
✅ makeRelationship_GenericOverload_ReturnsObjectsWithRelationFieldSet
✅ makeRelationship_GenericOverload_ThrowsErrorOnInvalidChildType
✅ makeRelationship_GenericOverload_ThrowsErrorOnInvalidFieldName
✅ makeRelationship_GenericOverload_ThrowsErrorOnInvalidParentType
✅ makeRelationship_returnsObjectsWithRelationFieldSet
✅ setReadOnlyFields_CreatedByIdSetToCurrentUserId_IdFieldSetSuccessfully
✅ setReadOnlyFields_IsDeletedSetOnAccount_BooleanFieldSetSuccessfully
✅ setReadOnlyFields_LastReferencedDateSetOnAccount_DateTimeFieldSetSuccessfully
✅ setReadOnlyFields_PolymorphicRelationJoin_FieldSetSuccessfully
fflib_ApexMocksTest
✅ stubAndVerifyMethodCallsWithNoArguments
✅ thatExceptionIsthrownWhenReturnMultiPassEmptyList
✅ thatExceptionIsthrownWhenReturnMultiPassNullList
✅ thatExceptionIsthrownWhenStubbingIsNotDone
✅ thatExceptionIsthrownWhenThrowMultiPassEmptyList
✅ thatExceptionIsthrownWhenThrowMultiPassNullList
✅ thatMultipleInstancesCanBeMockedDependently
✅ thatMultipleInstancesCanBeMockedIndependently
✅ thatMultipleVoidMethodsThrowsMultipleExceptions
✅ thatNullCanBeUsedAsExceptionvalue
✅ thatNullCanBeUsedAsReturnValue
✅ thatStubbingCanBeChainedFirstValueThenException
✅ thatStubbingMultipleMethodsCanBeChainedFirstExceptionThenValue
✅ thatStubbingMultipleMethodsCanBeChainedFirstValueThenException
✅ thatStubbingMultipleTimesOverridePreviousThenReturnMultiWithMultiExceptions
✅ thatStubbingMultipleTimesOverridePreviousThenReturnMultiWithMultiValue
✅ thatStubbingMultipleTimesOverridePreviousThenReturnMultiWithSingleException
✅ thatStubbingMultipleTimesOverridePreviousThenReturnMultiWithSingleValue
✅ thatStubbingMultipleTimesOverridePreviousThenReturnWithMultiExceptions
✅ thatStubbingMultipleTimesOverridePreviousThenReturnWithMultiValues
✅ thatStubbingMultipleTimesOverridePreviousThenReturnWithSingleException
✅ thatStubbingMultipleTimesOverridePreviousThenReturnWithSingleValue
✅ thatStubbingMultipleTimesOverridePreviousThenThrowMultiWithMultiExceptions
✅ thatStubbingMultipleTimesOverridePreviousThenThrowMultiWithMultiValue
✅ thatStubbingMultipleTimesOverridePreviousThenThrowMultiWithSingleException
✅ thatStubbingMultipleTimesOverridePreviousThenThrowMultiWithSingleValue
✅ thatStubbingMultipleTimesOverridePreviousThenThrowWithMultiExceptions
✅ thatStubbingMultipleTimesOverridePreviousThenThrowWithMultiValues
✅ thatStubbingMultipleTimesOverridePreviousThenThrowWithSingleException
✅ thatStubbingMultipleTimesOverridePreviousThenThrowWithSingleValue
✅ thatStubbingMutipleTimesVoidMethodThrowsMultipleExceptionsOverride
✅ thatStubbingMutipleTimesVoidMethodThrowsMultipleExceptionsOverrideWithSingleException
✅ thatStubbingReturnsAndThrowsDifferentValuesAndExceptionsForDifferentCalls
✅ thatStubbingReturnsDifferentValuesForDifferentCalls
✅ thatStubbingReturnsDifferentValuesForDifferentCallsAndRepeatLastValuesForFurtherCalls
✅ thatStubbingThrowsAndReturnsDifferentExceptionsAndValuesForDifferentCalls
✅ thatStubbingThrowsDifferentExceptionsForDifferentCalls
✅ thatStubbingThrowsDifferentExceptionsForDifferentCallsAndRepeatLastExceptionForFurtherCalls
✅ thatToStringReturnsSimpleStringValue
✅ thatVoidMethodThrowsMultipleExceptions
✅ verifyMethodCallWhenNoCallsBeenMadeForType
✅ verifyMethodCallsWithSameNameButDifferentArgumentTypes
✅ verifyMethodNotCalled
✅ verifyMultipleMethodCallsWithDifferentSingleArgument
✅ verifyMultipleMethodCallsWithSameSingleArgument
✅ verifySingleMethodCallWithMultipleArguments
✅ verifySingleMethodCallWithNoArguments
✅ verifySingleMethodCallWithSingleArgument
✅ whenMockIsGeneratedCanStubVerify
✅ whenMockIsGeneratedCanVerify
✅ whenSetDoThrowWhenExceptionsValuesAreSet
✅ whenStubCallWithNoArgumentsShouldReturnStubbedValue
✅ whenStubCustomMatchersCanBeUsed
✅ whenStubExceptionSameMethodWithMatchersAndNonMatchersShouldStubInOrder
✅ whenStubExceptionTheExceptionShouldBeThrown
✅ whenStubExceptionWithMatchersShouldThrowException
✅ whenStubMultipleCallsWithMatchersShouldReturnExpectedValues
✅ whenStubMultipleCallsWithMultipleArgumentShouldReturnStubbedValues
✅ whenStubMultipleCallsWithSingleArgumentShouldReturnStubbedValues
✅ whenStubMultipleVoidMethodsWithExceptionsThenExceptionsShouldBeThrown
✅ whenStubNullConcreteArgValueCorrectValueIsReturned
✅ whenStubSameCallWithDifferentArgumentValueShouldReturnLastStubbedValue
✅ whenStubSameMethodWithMatchersAndNonMatchersShouldStubInOrder
✅ whenStubSingleCallWithNullReturnValueItShouldReturnNull
✅ whenStubSingleCallWithSingleArgumentShouldReturnStubbedValue
✅ whenStubVoidMethodWithExceptionAndCallMethodTwiceThenExceptionShouldBeThrownTwice
✅ whenStubVoidMethodWithExceptionThenExceptionShouldBeThrown
✅ whenStubWithMatcherAndNonMatcherArgumentsShouldThrowException
✅ whenVerifyCustomMatchersCanBeUsed
✅ whenVerifyMethodNeverCalledMatchersAreReset
✅ whenVerifyMultipleCallsWithMatchersShouldReturnCorrectMethodCallCounts
✅ whenVerifyWithCombinedMatchersShouldReturnCorrectMethodCallCounts
✅ whenVerifyWithMatcherAndNonMatcherArgumentsShouldThrowException
fflib_AnyOrderTest
✅ thatBetweenThrownExceptionIfCalledLessThanAtLeastNumberOfTimes
✅ thatBetweenThrownExceptionIfCalledLessThanAtLeastNumberOfTimesWithMatchers
✅ thatBetweenThrownExceptionIfCalledMoreThanAtMostNumberOfTimes
✅ thatBetweenThrownExceptionIfCalledMoreThanAtMostNumberOfTimesWithMatchers
✅ thatCustomMessageIsAdded
✅ thatThrownExceptionIfCalledLessThanAtLeastNumberOfTimes
✅ thatThrownExceptionIfCalledLessThanAtLeastNumberOfTimesWithMatchers
✅ thatThrownExceptionIfCalledLessThanAtLeastOnce
✅ thatThrownExceptionIfCalledLessThanAtLeastOnceNumberOfTimes
✅ thatThrownExceptionIfCalledLessThanAtLeastOnceNumberOfTimesWithMatchers
✅ thatThrownExceptionIfCalledLessThanAtLeastOnceWithMatchers
✅ thatThrownExceptionIfCalledMoreThanAtMostNumberOfTimes
✅ thatThrownExceptionIfCalledMoreThanAtMostNumberOfTimesWithMatchers
✅ thatVerifiesAtLeastNumberOfTimes
✅ thatVerifiesAtLeastNumberOfTimesWhenIsCalledMoreTimes
✅ thatVerifiesAtLeastNumberOfTimesWhenIsCalledMoreTimesWithMatchers
✅ thatVerifiesAtLeastNumberOfTimesWithMatchers
✅ thatVerifiesAtLeastOnce
✅ thatVerifiesAtLeastOnceNumberOfTimes
✅ thatVerifiesAtLeastOnceNumberOfTimesWhenIsCalledMoreTimes
✅ thatVerifiesAtLeastOnceNumberOfTimesWhenIsCalledMoreTimesWithMatchers
✅ thatVerifiesAtLeastOnceNumberOfTimesWithMatchers
✅ thatVerifiesAtLeastOnceWhenIsCalledMoreTimes
✅ thatVerifiesAtLeastOnceWhenIsCalledMoreTimesWithMatchers
✅ thatVerifiesAtLeastOnceWithMatchers
✅ thatVerifiesAtMostNumberOfTimes
✅ thatVerifiesAtMostNumberOfTimesWithMatchers
✅ thatVerifiesAtMostSameNumberOfTimes
✅ thatVerifiesAtMostSameNumberOfTimesWithMatchers
✅ thatVerifiesBetweenNumberOfTimes
✅ thatVerifiesBetweenNumberOfTimesWithMatchers
✅ thatVerifyNeverFailsWhenCalledMoreTimes
✅ thatVerifyNeverFailsWhenCalledMoreTimesWithMatchers
✅ thatVerifyTimesMethodFailsWhenCalledLessTimes
✅ thatVerifyTimesMethodFailsWhenCalledLessTimesWithMatchers
✅ thatVerifyTimesMethodFailsWhenCalledMoreTimes
✅ thatVerifyTimesMethodFailsWhenCalledMoreTimesWithMatchers
✅ verifyMethodCallWhenNoCallsBeenMadeForType
✅ verifyMethodNotCalled
✅ verifyMultipleMethodCallsWithSameSingleArgument
✅ verifyNeverMethodHasBeenNotCalledWithMatchers
✅ verifyNeverMethodHasNotBeenCalled
✅ verifySingleMethodCallWithMultipleArguments
✅ verifyTimesMethodHasBeenCalled
✅ verifyTimesMethodHasBeenCalledWithMatchers
✅ whenVerifyCustomMatchersCanBeUsed
✅ whenVerifyMethodNeverCalledMatchersAreReset
✅ whenVerifyMultipleCallsWithMatchersShouldReturnCorrectMethodCallCounts
✅ whenVerifyWithCombinedMatchersShouldReturnCorrectMethodCallCounts
di_BindingConfigWrapperTest
✅ givenBindingWrapperThenExtractAndValidate
✅ givenBindingWrapperWithBindingNameExpectDeveloperNameEqualsBindingName
✅ givenBindingWrapperWithMDTThenExtractAndValidate
di_BindingParamTest
✅ givenBooleansWhenGetParameterThenGetValues
✅ givenDateTimesWhenGetParameterThenGetValues
✅ givenDatesWhenGetParameterThenGetValues
✅ givenDecimalsWhenGetParameterThenGetValues
✅ givenNullInputWhenGetParameterThenGetNullValue
✅ givenStringsWhenGetParameterThenGetValues
✅ givenUnknownKeyWhenGetParameterThenGetNullValue
di_BindingTest
✅ givenApexBindingWhenGetInstanceThenInstance
✅ givenApexBindingWhenGetInstanceWithParamThenInstanceWithParam
✅ givenApexBindingWhenGetNewInstanceThenNewInstance
✅ givenApexBindingsWithDeveloperNamesWhenSortThenReturnSortedBindingsList
✅ givenApexBindingsWithSequenceAndWithoutObjectWhenSortThenReturnSortedBindingsList
✅ givenApexBindingsWithSequenceWhenSortThenReturnSortedBindingsList
✅ givenApexBindingsWithSobjectTypesWhenSortThenReturnSortedBindingsList
✅ givenIncorrectApexBindingWhenGetInstanceThenThrowException
✅ shouldConvertBindingToStringWhenObjectIsEmptyAndSequenceIsProvided
fflib_MatchTest
✅ allOfWith2ArgsRegistersCorrectMatcherType
✅ allOfWith3ArgsRegistersCorrectMatcherType
✅ allOfWith4ArgsRegistersCorrectMatcherType
✅ allOfWithEmptyArgsThrowsException
✅ allOfWithListArgsRegistersCorrectMatcherType
✅ allOfWithNoArgsThrowsException
✅ allOfWithoutRegisteringInnerMatchersThrowsException
✅ anyBooleanRegistersCorrectMatcherType
✅ anyDateRegistersCorrectMatcherType
✅ anyDatetimeRegistersCorrectMatcherType
✅ anyDecimalRegistersCorrectMatcherType
✅ anyDoubleRegistersCorrectMatcherType
✅ anyFieldSetRegistersCorrectMatcherType
✅ anyIdRegistersCorrectMatcherType
✅ anyIntegerRegistersCorrectMatcherType
✅ anyListRegistersCorrectMatcherType
✅ anyLongRegistersCorrectMatcherType
✅ anyObjectRegistersCorrectMatcherType
✅ anyOfWith2ArgsRegistersCorrectMatcherType
✅ anyOfWith3ArgsRegistersCorrectMatcherType
✅ anyOfWith4ArgsRegistersCorrectMatcherType
✅ anyOfWithListArgsRegistersCorrectMatcherType
✅ anySObjectFieldRegistersCorrectMatcherType
✅ anySObjectRegistersCorrectMatcherType
✅ anySObjectTypeRegistersCorrectMatcherType
✅ anyStringRegistersCorrectMatcherType
✅ dateAfterRegistersCorrectMatcherType
✅ dateBeforeRegistersCorrectMatcherType
✅ dateBetweenRegistersCorrectMatcherType
✅ datetimeAfterRegistersCorrectMatcherType
✅ datetimeBeforeRegistersCorrectMatcherType
✅ datetimeBetweenRegistersCorrectMatcherType
✅ decimalBetweenRegistersCorrectMatcherType
✅ decimalLessThanRegistersCorrectMatcherType
✅ decimalMoreThanRegistersCorrectMatcherType
✅ doubleBetweenRegistersCorrectMatcherType
✅ doubleLessThanRegistersCorrectMatcherType
✅ doubleMoreThanRegistersCorrectMatcherType
✅ eqBooleanRegistersCorrectMatcherType
✅ eqDateRegistersCorrectMatcherType
✅ eqDatetimeRegistersCorrectMatcherType
✅ eqDecimalRegistersCorrectMatcherType
✅ eqDoubleRegistersCorrectMatcherType
✅ eqIdRegistersCorrectMatcherType
✅ eqIntegerRegistersCorrectMatcherType
✅ eqListRegistersCorrectMatcherType
✅ eqLongRegistersCorrectMatcherType
✅ eqRegistersCorrectMatcherType
✅ eqSObjectFieldRegistersCorrectMatcherType
✅ eqSObjectTypeRegistersCorrectMatcherType
✅ eqStringRegistersCorrectMatcherType
✅ fieldSetEquivalentToRegistersCorrectMatcherType
✅ fieldSetEquivalentWithNullFieldSetThrowsException
✅ integerBetweenRegistersCorrectMatcherType
✅ integerLessThanRegistersCorrectMatcherType
✅ integerMoreThanRegistersCorrectMatcherType
✅ isNotNullRegistersCorrectMatcherType
✅ isNotRegistersCorrectMatcherType
✅ isNullRegistersCorrectMatcherType
✅ listContainsRegistersCorrectMatcherType
✅ listIsEmptyRegistersCorrectMatcherType
✅ longBetweenRegistersCorrectMatcherType
✅ longLessThanRegistersCorrectMatcherType
✅ longMoreThanRegistersCorrectMatcherType
✅ noneOfWith2ArgsRegistersCorrectMatcherType
✅ noneOfWith3ArgsRegistersCorrectMatcherType
✅ noneOfWith4ArgsRegistersCorrectMatcherType
✅ noneOfWithListArgsRegistersCorrectMatcherType
✅ refEqRegistersCorrectMatcherType
✅ sObjectOfTypeRegistersCorrectMatcherType
✅ sObjectWithIdRegistersCorrectMatcherType
✅ sObjectWithNameRegistersCorrectMatcherType
✅ sObjectWithRegistersCorrectMatcherType
✅ sObjectsWithMatchInOrderRegistersCorrectMatcherType
✅ sObjectsWithRegistersCorrectMatcherType
✅ stringContainsRegistersCorrectMatcherType
✅ stringEndsWithRegistersCorrectMatcherType
✅ stringIsBlankRegistersCorrectMatcherType
✅ stringIsNotBlankRegistersCorrectMatcherType
✅ stringMatchesRegistersCorrectMatcherType
✅ stringStartsWithRegistersCorrectMatcherType
✅ whenMatchesAllArgsWithDifferentSizeArgValuesAndMatchersThrowsException
✅ whenMatchesAllArgsWithManyMatchesReturnsTrue
✅ whenMatchesAllArgsWithManyMismatchesReturnsFalse
✅ whenMatchesAllArgsWithMatchesAndMismatchesReturnsFalse
✅ whenMatchesAllArgsWithNullMatchersThrowsException
✅ whenMatchesAllArgsWithNullMethodArgsArgValuesThrowsException
✅ whenMatchesAllArgsWithNullMethodArgsThrowsException
✅ whenMatchesAllArgsWithOneMatchReturnsTrue
✅ whenMatchesAllArgsWithOneMismatchReturnsFalse
✅ whenMatchesWithOneMatcherRegistersMatcher
✅ whenMatchesWithOneMatcherReturnsNull
✅ whenMatchesWithOneMatcherSetsMatchingToTrue
fflib_InheritorTest
✅ canInstantiateMultipleInterfaceInheritor
✅ canStubMultipleInterfaceInheritor
fflib_InOrderTest
✅ thatMixedVerificationDoNotInterfierWithOtherImplementationChecking
✅ thatStrictVerificationCanBeEnforced
✅ thatStrictVerificationCanBeEnforcedWithOldNotation
✅ thatStrictVerificationCanBeEnforcedWithOldNotationUsingDefaultTimesOne
✅ thatStrictVerificationCanBePerformed
✅ thatTimesOneIsTheDefaultVerification
✅ thatVerifyAtLeastConsumeAllTheInstances
✅ thatVerifyAtLeastConsumeAllTheInstancesForOnlyTheMethodVerified
✅ thatVerifyAtLeastConsumesAllTheInstances2
✅ thatVerifyAtLeastOnce
✅ thatVerifyAtLeastOnceConsumesAllTheInstances
✅ thatVerifyAtLeastOnceConsumesInstancesUntilLastMethodVerified
✅ thatVerifyAtLeastOnceThrowsErrorIfCalledLessTimes
✅ thatVerifyAtLeastPassWithMoreCallsThenAsserted
✅ thatVerifyAtLeastPassWithSameCallsOfAssertion
✅ thatVerifyAtLeastThrowsErrorIfCalledLessTimes
✅ thatVerifyAtMostThrowsExceptionBecauseNotImplemented
✅ thatVerifyBetweenThrowsExceptionBecauseNotImplemented
✅ thatVerifyInOrderAllTheMethodsCalled
✅ thatVerifyInOrderCallMethodWithMatches
✅ thatVerifyInOrderCallMethodWithMatchesFailsIfVerifyACallAlreadyInTheMatcher
✅ thatVerifyInOrderCallMethodWithMultipleMatches
✅ thatVerifyInOrderCallMethodWithMultipleMatchesMixed
✅ thatVerifyInOrderCallMethodWithMultipleMatchesMixedFailWhenMatcherHaveAlreadyVerifiedMethod
✅ thatVerifyInOrderCanHandleMixedInOrderInstance
✅ thatVerifyInOrderCanHandleMultipleMethodsCalls
✅ thatVerifyInOrderCanHandleMultipleMethodsCallsAndNotFailsIfVerifyCountIsGreaterThenExpected
✅ thatVerifyInOrderCanHandleMultipleMethodsCallsButFailsIfVerifyCountIsLessThenExpected
✅ thatVerifyInOrderCanHandleMultipleMocks
✅ thatVerifyInOrderCanSkipMethodsCalledUntilFindTheOneThatNeedsVerify
✅ thatVerifyInOrderDifferentMethodsCalledWithSameArguments
✅ thatVerifyInOrderDifferentMethodsCalledWithSameArgumentsDoubleCallFail
✅ thatVerifyInOrderDifferentMethodsCalledWithSameArgumentsOrderFail
✅ thatVerifyInOrderThrownExceptionIfVerifyMockInstanceNotInTheSet
✅ thatVerifyInOrderThrownExceptionWithCustomMessage
✅ thatVerifyNever
✅ thatVerifyNeverFailsWhenCalled
✅ thatVerifyNeverFailsWhenCalledWithMatchers
✅ thatVerifyNeverWithMatchers
✅ thatVerifyNoInteractionsFails
✅ thatVerifyNoInteractionsPass
✅ thatVerifyNoMoreInteractionsFails
✅ thatVerifyNoMoreInteractionsFailsWhenNoInteracionOccurs
✅ thatVerifyNoMoreInteractionsFailsWhenOnLyOneMethodLeft
✅ thatVerifyNoMoreInteractionsPass
✅ thatVerifyThrowsExceptionWhenCallsIsInvochedFromStandardMock
✅ thatVerifyTimes
✅ thatVerifyTimesPassWhenAnotherMethodIsCalledBetweenMethodsCalls
✅ thatVerifyTimesPassWhenAnotherMethodIsCalledBetweenMethodsCalls2
✅ thatVerifyTimesPassWhenAnotherMethodIsCalledBetweenMethodsCalls3
✅ thatVerifyTimesPassWhenAnotherMethodIsCalledBetweenMethodsCalls4
✅ thatVerifyTimesThrowsExceptionIfCalledLessTimesThanExpected
✅ thatVerifyTimesThrowsExceptionIfCalledMoreTimesThanExpected
✅ thatVerifyTimesThrowsExceptionWhenAnotherMethodIsCalledBetweenMethodsCalls
✅ thatWithOldNotation
✅ thatWithOldNotationPassWhenAnotherMethodIsCalledBetweenMethodsCalls
✅ thatWithOldNotationThrowsExceptionIfCalledLessTimesThanExpected
✅ thatWithOldNotationThrowsExceptionIfCalledMoreTimesThanExpected
✅ thatWithOldNotationThrowsExceptionWhenAnotherMethodIsCalledBetweenMethodsCalls
✅ verifyAtLeastAndCapture
✅ verifyCallsAndCapture
✅ verifyTimesAndCaptor
fflib_IDGeneratorTest
✅ itShouldGenerateValidIDs
```

File diff suppressed because it is too large Load diff

View file

@ -2,9 +2,11 @@
exports[`dart-json tests matches report snapshot 1`] = `
TestRunResult {
"coveragePercentage": undefined,
"path": "fixtures/dart-json.json",
"suites": [
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "Test 1",
@ -72,6 +74,7 @@ test\\main_test.dart 17:9 main.<fn>.<fn>.<fn>
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -107,9 +110,11 @@ test\\main_test.dart 17:9 main.<fn>.<fn>.<fn>
exports[`dart-json tests report from rrousselGit/provider test results matches snapshot 1`] = `
TestRunResult {
"coveragePercentage": undefined,
"path": "fixtures/external/flutter/provider-test-results.json",
"suites": [
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "valueListenableProvider",
@ -178,6 +183,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "ListenableProvider",
@ -295,6 +301,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "consumer",
@ -439,6 +446,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "",
@ -515,6 +523,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "ChangeNotifierProvider",
@ -690,6 +699,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "MultiProvider",
@ -719,6 +729,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "",
@ -783,6 +794,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "",
@ -985,6 +997,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "",
@ -1014,6 +1027,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "",
@ -1090,6 +1104,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "",
@ -1177,6 +1192,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "",
@ -1699,6 +1715,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "ListenableProxyProvider",
@ -1787,6 +1804,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "",
@ -1900,6 +1918,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "",
@ -1935,6 +1954,7 @@ Unexpected number of calls
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "ProxyProvider",

View file

@ -2,9 +2,11 @@
exports[`dotnet-nunit tests report from ./reports/dotnet test results matches snapshot 1`] = `
TestRunResult {
"coveragePercentage": undefined,
"path": "fixtures/dotnet-nunit.xml",
"suites": [
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "CalculatorTests",

View file

@ -2,9 +2,11 @@
exports[`dotnet-trx tests matches report snapshot 1`] = `
TestRunResult {
"coveragePercentage": undefined,
"path": "fixtures/dotnet-trx.trx",
"suites": [
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -131,9 +133,11 @@ Actual: False",
exports[`dotnet-trx tests report from FluentValidation test results matches snapshot 1`] = `
TestRunResult {
"coveragePercentage": undefined,
"path": "fixtures/external/FluentValidation.Tests.trx",
"suites": [
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -355,6 +359,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -396,6 +401,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -419,6 +425,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -658,6 +665,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -747,6 +755,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -776,6 +785,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -799,6 +809,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -906,6 +917,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -1019,6 +1031,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -1138,6 +1151,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -1161,6 +1175,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -1190,6 +1205,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -1237,6 +1253,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -1308,6 +1325,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -1499,6 +1517,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -1726,6 +1745,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -1791,6 +1811,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -1874,6 +1895,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -1945,6 +1967,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -1992,6 +2015,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -2117,6 +2141,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -2152,6 +2177,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -2367,6 +2393,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -2462,6 +2489,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -2551,6 +2579,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -2670,6 +2699,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -2747,6 +2777,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -2764,6 +2795,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -2901,6 +2933,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3008,6 +3041,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3097,6 +3131,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3204,6 +3239,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3251,6 +3287,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3274,6 +3311,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3339,6 +3377,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3410,6 +3449,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3433,6 +3473,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3462,6 +3503,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3533,6 +3575,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3610,6 +3653,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3651,6 +3695,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3692,6 +3737,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3763,6 +3809,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3804,6 +3851,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3857,6 +3905,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -3958,6 +4007,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -4143,6 +4193,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -4238,6 +4289,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -4375,6 +4427,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -4422,6 +4475,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -4685,6 +4739,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -4702,6 +4757,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -4773,6 +4829,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -4802,6 +4859,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -4837,6 +4895,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -4890,6 +4949,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -4925,6 +4985,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -5020,6 +5081,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -5079,6 +5141,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -5120,6 +5183,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -5191,6 +5255,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -5646,9 +5711,11 @@ TestRunResult {
exports[`dotnet-trx tests report from SilentNotes test results matches snapshot 1`] = `
TestRunResult {
"coveragePercentage": undefined,
"path": "fixtures/external/SilentNotes.trx",
"suites": [
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -5696,6 +5763,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -5737,6 +5805,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -5790,6 +5859,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -5813,6 +5883,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -5848,6 +5919,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -5883,6 +5955,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -5924,6 +5997,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -5989,6 +6063,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -6018,6 +6093,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -6083,6 +6159,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -6124,6 +6201,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -6177,6 +6255,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -2,9 +2,11 @@
exports[`mocha-json tests report from ./reports/mocha-json test results matches snapshot 1`] = `
TestRunResult {
"coveragePercentage": undefined,
"path": "fixtures/mocha-json.json",
"suites": [
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "Test 1",
@ -78,6 +80,7 @@ false !== true
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": null,
@ -114,9 +117,11 @@ false !== true
exports[`mocha-json tests report from mochajs/mocha test results matches snapshot 1`] = `
TestRunResult {
"coveragePercentage": undefined,
"path": "fixtures/external/mocha/mocha-test-results.json",
"suites": [
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "class BufferedWorkerPool constructor",
@ -267,6 +272,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "cli/config findConfig()",
@ -378,6 +384,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "node-flags impliesNoTimeouts()",
@ -1044,6 +1051,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "options loadOptions() "extension" handling when user does not supply "extension" option",
@ -1366,6 +1374,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "helpers list() when given a comma-delimited string",
@ -1461,6 +1470,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "command run builder array type",
@ -1727,6 +1737,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "Mocha instance method addFile()",
@ -1962,6 +1973,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "parallel-buffered-runner ParallelBufferedRunner constructor",
@ -2162,6 +2174,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "ParallelBuffered constructor",
@ -2224,6 +2237,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "serializer function deserialize when passed a non-object value",
@ -2635,6 +2649,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "stackTraceFilter() on browser",
@ -2692,6 +2707,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "utils function canonicalType()",
@ -2743,6 +2759,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "worker when run as main process",
@ -2894,6 +2911,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "Context nested",
@ -2978,6 +2996,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "durations when fast",
@ -3017,6 +3036,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "Errors createForbiddenExclusivityError() when Mocha instance is not running in a worker process",
@ -3146,6 +3166,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "global leaks",
@ -3181,6 +3202,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "Mocha .grep()",
@ -3255,6 +3277,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "async hooks",
@ -3284,6 +3307,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "serial nested",
@ -3324,6 +3348,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "serial hooks",
@ -3353,6 +3378,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "hook timeout",
@ -3370,6 +3396,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "Hook error",
@ -3410,6 +3437,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "Mocha constructor",
@ -4517,6 +4545,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "overspecified asynchronous resolution method",
@ -4534,6 +4563,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "parseQuery()",
@ -4557,6 +4587,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "plugin module class PluginLoader constructor when passed custom plugins",
@ -4985,6 +5016,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "using imported describe",
@ -5002,6 +5034,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "root",
@ -5019,6 +5052,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "Runnable(title, fn) .run(fn) if async",
@ -5570,6 +5604,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "Runner instance method _uncaught() when called with a non-Runner context",
@ -6218,6 +6253,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "Suite instance method addSuite()",
@ -6731,6 +6767,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "Test .clone()",
@ -6847,6 +6884,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "a test that throws non-extensible",
@ -6922,6 +6960,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "timeouts",
@ -7011,6 +7050,7 @@ TestRunResult {
"totalTime": undefined,
},
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "lib/utils canonicalType()",

View file

@ -2,9 +2,11 @@
exports[`rspec-json tests report from ./reports/rspec-json test results matches snapshot 1`] = `
TestRunResult {
"coveragePercentage": undefined,
"path": "fixtures/rspec-json.json",
"suites": [
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "CheckEnvVars#call when all env vars are defined behaves like success load",

View file

@ -2,9 +2,11 @@
exports[`swift-xunit tests report from swift test results matches snapshot 1`] = `
TestRunResult {
"coveragePercentage": undefined,
"path": "fixtures/swift-xunit.xml",
"suites": [
TestSuiteResult {
"coveragePercentage": undefined,
"groups": [
TestGroupResult {
"name": "AcmeLibTests.AcmeLibTests",

View file

@ -2,12 +2,12 @@
"result": {
"summary": {
"failRate": "0%",
"failing": 0,
"failing": 1,
"hostname": "https://scratch.my.salesforce.com",
"orgId": "00DOy000005q2CXMAY",
"outcome": "Passed",
"passRate": "100%",
"passing": 736,
"passing": 735,
"skipped": 0,
"testRunId": "707Oy00000Tp86T",
"testStartTime": "2024-07-11T16:27:20.000Z",
@ -16,17 +16,19 @@
"username": "test@example.com",
"commandTime": "474 ms",
"testExecutionTime": "26480 ms",
"testTotalTime": "26480 ms"
"testTotalTime": "26480 ms",
"orgWideCoverage": "81%",
"testRunCoverage": "85%"
},
"tests": [
{
"Id": "07MOy000007kEKWMA2",
"QueueItemId": "709Oy000006AA2fIAG",
"StackTrace": null,
"Message": null,
"Message": "Validation Errors While Saving Record(s)",
"AsyncApexJobId": "707Oy00000Tp86TIAR",
"MethodName": "testSetup",
"Outcome": "Pass",
"Outcome": "Fail",
"ApexClass": {
"Id": "01pOy000002qAfKIAU",
"Name": "fflib_SecurityUtilsTest",

View file

@ -1,10 +1,61 @@
import {ParseOptions, TestParser} from '../../test-parser'
import {TestRunResult} from '../../test-results'
import {TestCaseError, TestCaseResult, TestExecutionResult, TestGroupResult, TestRunResult, TestSuiteResult} from '../../test-results'
import {ApexTestReport} from './apex-json-types'
export class ApexJsonParser implements TestParser {
constructor(readonly options: ParseOptions) {}
async parse(path: string, content: string): Promise<TestRunResult> {
throw new Error('Method not implemented.')
const report = await this.getReport(path, content)
return this.getTestRunResult(path, report)
}
private async getReport(path: string, content: string): Promise<ApexTestReport> {
try {
return JSON.parse(content) as ApexTestReport
} catch (e) {
throw new Error(`Invalid JSON at ${path}\n\n${e}`)
}
}
private getTestRunResult(path: string, report: ApexTestReport): TestRunResult {
const time = report.result.summary.testTotalTime
const timeAsNumber = Number.parseInt(time, 10)
// group tests by test.ApexClass.Name
const groupsMap: Map<string, TestCaseResult[]> = report.result.tests.reduce((map, test) => {
const key = test.ApexClass.Name
const testResults = map.get(key) || []
let result: TestExecutionResult = 'skipped'
if (test.Outcome === 'Pass') {
result = 'success'
} else if (test.Outcome === 'Fail') {
result = 'failed'
}
const testCaseError: TestCaseError | undefined = test.Message ? {details: test.Message} : undefined
const testResult = new TestCaseResult(test.MethodName, result, test.RunTime, testCaseError)
testResults.push(testResult)
map.set(key, testResults)
return map
}, new Map<string, TestCaseResult[]>())
const groups: TestGroupResult[] = []
for (const [name, tests] of groupsMap) {
const suite = new TestGroupResult(name, tests)
groups.push(suite)
}
const coverageString = report.result.summary.testRunCoverage
const coverage = coverageString ? Number.parseInt(coverageString.replace('%', ''), 10) : undefined
const suite = new TestSuiteResult('Apex Tests', groups, timeAsNumber, coverage)
return new TestRunResult(path, [suite], timeAsNumber, coverage)
}
}

View file

@ -1,4 +1,4 @@
export interface RootObject {
export interface ApexTestReport {
result: Result
}
@ -55,7 +55,7 @@ export interface Test {
Id: string
QueueItemId: string
StackTrace: null
Message: null
Message: string | null
AsyncApexJobId: string
MethodName: string
Outcome: string

View file

@ -149,6 +149,16 @@ function getTestRunsReport(testRuns: TestRunResult[], options: ReportOptions): s
sections.push(` `)
}
const shouldShowCoverage = testRuns.some(tr => tr.coverage !== undefined)
const columnNames = ['Report', 'Passed', 'Failed', 'Skipped', 'Time']
const columnAligns = [Align.Left, Align.Right, Align.Right, Align.Right, Align.Right]
if (shouldShowCoverage) {
columnNames.push('Coverage')
columnAligns.push(Align.Right)
}
if (testRuns.length > 0 || options.onlySummary) {
const tableData = testRuns
.filter(tr => tr.passed > 0 || tr.failed > 0 || tr.skipped > 0)
@ -158,14 +168,16 @@ function getTestRunsReport(testRuns: TestRunResult[], options: ReportOptions): s
const passed = tr.passed > 0 ? `${tr.passed} ${Icon.success}` : ''
const failed = tr.failed > 0 ? `${tr.failed} ${Icon.fail}` : ''
const skipped = tr.skipped > 0 ? `${tr.skipped} ${Icon.skip}` : ''
if (shouldShowCoverage) {
const coverage = tr.coverage !== undefined ? tr.coverage + '%' : ''
return [name, passed, failed, skipped, time, coverage]
}
return [name, passed, failed, skipped, time]
})
const resultsTable = table(
['Report', 'Passed', 'Failed', 'Skipped', 'Time'],
[Align.Left, Align.Right, Align.Right, Align.Right, Align.Right],
...tableData
)
const resultsTable = table(columnNames, columnAligns, ...tableData)
sections.push(resultsTable)
}
@ -198,9 +210,19 @@ function getSuitesReport(tr: TestRunResult, runIndex: number, options: ReportOpt
sections.push(headingLine2)
if (suites.length > 0) {
const shouldShowCoverage = suites.some(s => s.coverage !== undefined)
const columnNames = ['Test suite', 'Passed', 'Failed', 'Skipped', 'Time']
const columnAligns = [Align.Left, Align.Right, Align.Right, Align.Right, Align.Right]
if (shouldShowCoverage) {
columnNames.push('Coverage')
columnAligns.push(Align.Right)
}
const suitesTable = table(
['Test suite', 'Passed', 'Failed', 'Skipped', 'Time'],
[Align.Left, Align.Right, Align.Right, Align.Right, Align.Right],
columnNames,
columnAligns,
...suites.map((s, suiteIndex) => {
const tsTime = formatTime(s.time)
const tsName = s.name
@ -210,6 +232,13 @@ function getSuitesReport(tr: TestRunResult, runIndex: number, options: ReportOpt
const passed = s.passed > 0 ? `${s.passed} ${Icon.success}` : ''
const failed = s.failed > 0 ? `${s.failed} ${Icon.fail}` : ''
const skipped = s.skipped > 0 ? `${s.skipped} ${Icon.skip}` : ''
const coverage = s.coverage !== undefined ? s.coverage + '%' : ''
if (shouldShowCoverage) {
return [tsNameLink, passed, failed, skipped, tsTime, coverage]
}
return [tsNameLink, passed, failed, skipped, tsTime]
})
)

View file

@ -4,7 +4,8 @@ export class TestRunResult {
constructor(
readonly path: string,
readonly suites: TestSuiteResult[],
private totalTime?: number
private totalTime?: number,
private coveragePercentage?: number
) {}
get tests(): number {
@ -25,6 +26,10 @@ export class TestRunResult {
return this.totalTime ?? this.suites.reduce((sum, g) => sum + g.time, 0)
}
get coverage(): number | undefined {
return this.coveragePercentage
}
get result(): TestExecutionResult {
return this.suites.some(t => t.result === 'failed') ? 'failed' : 'success'
}
@ -47,7 +52,8 @@ export class TestSuiteResult {
constructor(
readonly name: string,
readonly groups: TestGroupResult[],
private totalTime?: number
private totalTime?: number,
private coveragePercentage?: number
) {}
get tests(): number {
@ -66,6 +72,9 @@ export class TestSuiteResult {
get time(): number {
return this.totalTime ?? this.groups.reduce((sum, g) => sum + g.time, 0)
}
get coverage(): number | undefined {
return this.coveragePercentage
}
get result(): TestExecutionResult {
return this.groups.some(t => t.result === 'failed') ? 'failed' : 'success'