Add new test files to IGListKit

Summary: This diff adds several new test classes to IGListKit's test suite, covering a variety of objects and use cases that weren't covered before.

Reviewed By: candance

Differential Revision: D45004015

fbshipit-source-id: 5e6cc3f56e62328173657c09c955c320e6067936
This commit is contained in:
Tim Oliver 2023-04-17 20:41:49 -07:00 committed by Facebook GitHub Bot
parent 08a1d83652
commit 965025d2d3
5 changed files with 503 additions and 96 deletions

View file

@ -29,7 +29,6 @@
16B71CEE22B0A08400FE96ED /* IGTestInvalidateLayoutDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 16B71CE822B0A08300FE96ED /* IGTestInvalidateLayoutDataSource.m */; };
16B71CEF22B0A08400FE96ED /* IGTestInvalidateLayoutObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 16B71CEA22B0A08300FE96ED /* IGTestInvalidateLayoutObject.m */; };
16B71CF022B0A08400FE96ED /* IGTestInvalidateLayoutObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 16B71CEA22B0A08300FE96ED /* IGTestInvalidateLayoutObject.m */; };
262373C2015556E71A70FA30 /* Pods_IGListKit_tvOSTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E980179F5E885E417EB20D55 /* Pods_IGListKit_tvOSTests.framework */; };
26271C8A1DAE94E40073E116 /* IGTestSingleNibItemDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 26271C891DAE94E40073E116 /* IGTestSingleNibItemDataSource.m */; };
26271C8C1DAE96740073E116 /* IGListSingleNibItemControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 26271C8B1DAE96740073E116 /* IGListSingleNibItemControllerTests.m */; };
290DF3771E9323E6009FE456 /* IGListDebuggerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 290DF3761E9323E6009FE456 /* IGListDebuggerTests.m */; };
@ -416,7 +415,6 @@
BA4A65252760278F00FA5750 /* ListValueSectionController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA4A65222760278F00FA5750 /* ListValueSectionController.swift */; };
BA4A65262760278F00FA5750 /* ListIdentifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA4A65232760278F00FA5750 /* ListIdentifiable.swift */; };
BA4A65272760278F00FA5750 /* ListIdentifiable.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA4A65232760278F00FA5750 /* ListIdentifiable.swift */; };
DD468D380BBF350ACE7EA28B /* Pods_IGListKitTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1AB7195278D0BBB5DA88D36F /* Pods_IGListKitTests.framework */; };
E03DEA83255C9AAC00ACCAFC /* IGListTransitionData.h in Headers */ = {isa = PBXBuildFile; fileRef = 57B22E692502AAB10055DC2F /* IGListTransitionData.h */; settings = {ATTRIBUTES = (Public, ); }; };
E03DEA8F255C9AB200ACCAFC /* IGListTransitionData.m in Sources */ = {isa = PBXBuildFile; fileRef = 57B22E662502AAB10055DC2F /* IGListTransitionData.m */; };
E56B7B3420A9D7100071010C /* IGListCollectionScrollingTraitsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E56B7B3320A9D7100071010C /* IGListCollectionScrollingTraitsTests.m */; };
@ -425,6 +423,18 @@
F1855A4C29BC565600558D18 /* IGListDiffDescriptionStringTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F1855A4B29BC565600558D18 /* IGListDiffDescriptionStringTests.m */; };
F1855A4D29BC565600558D18 /* IGListDiffDescriptionStringTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F1855A4B29BC565600558D18 /* IGListDiffDescriptionStringTests.m */; };
F1855A4E29BC565600558D18 /* IGListDiffDescriptionStringTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F1855A4B29BC565600558D18 /* IGListDiffDescriptionStringTests.m */; };
F1E6302329EA43080060B4D6 /* IGListSectionControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E6302229EA43080060B4D6 /* IGListSectionControllerTests.m */; };
F1E6302429EA43080060B4D6 /* IGListSectionControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F1E6302229EA43080060B4D6 /* IGListSectionControllerTests.m */; };
F1ED68B329E9B3B9003744F8 /* IGListInteractiveMovingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F1ED68AE29E9B3B9003744F8 /* IGListInteractiveMovingTests.m */; };
F1ED68B529E9B3B9003744F8 /* IGListDebugDescriptionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F1ED68AF29E9B3B9003744F8 /* IGListDebugDescriptionTests.m */; };
F1ED68B729E9B3B9003744F8 /* IGListTransactionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F1ED68B029E9B3B9003744F8 /* IGListTransactionTests.m */; };
F1ED68B929E9B3B9003744F8 /* IGListSingleSectionControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F1ED68B129E9B3B9003744F8 /* IGListSingleSectionControllerTests.m */; };
F1ED68BA29E9B404003744F8 /* IGListInteractiveMovingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F1ED68AE29E9B3B9003744F8 /* IGListInteractiveMovingTests.m */; };
F1ED68BB29E9B40A003744F8 /* IGListGenericSectionControllerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 29DA5CA21EA7C72400113926 /* IGListGenericSectionControllerTests.m */; };
F1ED68BC29E9B411003744F8 /* IGListDebuggerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 290DF3761E9323E6009FE456 /* IGListDebuggerTests.m */; };
F1ED68BD29E9B415003744F8 /* IGListDebugDescriptionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F1ED68AF29E9B3B9003744F8 /* IGListDebugDescriptionTests.m */; };
F1ED68BE29E9B41A003744F8 /* IGListContentInsetTests.m in Sources */ = {isa = PBXBuildFile; fileRef = E8D312DF1FC472A60009FA2F /* IGListContentInsetTests.m */; };
F1ED68BF29E9B443003744F8 /* IGListTransactionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F1ED68B029E9B3B9003744F8 /* IGListTransactionTests.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -497,7 +507,6 @@
16B71CE822B0A08300FE96ED /* IGTestInvalidateLayoutDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGTestInvalidateLayoutDataSource.m; sourceTree = "<group>"; };
16B71CE922B0A08300FE96ED /* IGTestInvalidateLayoutObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGTestInvalidateLayoutObject.h; sourceTree = "<group>"; };
16B71CEA22B0A08300FE96ED /* IGTestInvalidateLayoutObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGTestInvalidateLayoutObject.m; sourceTree = "<group>"; };
1AB7195278D0BBB5DA88D36F /* Pods_IGListKitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_IGListKitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
26271C881DAE94E40073E116 /* IGTestSingleNibItemDataSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IGTestSingleNibItemDataSource.h; sourceTree = "<group>"; };
26271C891DAE94E40073E116 /* IGTestSingleNibItemDataSource.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGTestSingleNibItemDataSource.m; sourceTree = "<group>"; };
26271C8B1DAE96740073E116 /* IGListSingleNibItemControllerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListSingleNibItemControllerTests.m; sourceTree = "<group>"; };
@ -731,8 +740,12 @@
DD3152AC1DE227FA00AC9D2C /* IGListKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IGListKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E56B7B3320A9D7100071010C /* IGListCollectionScrollingTraitsTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListCollectionScrollingTraitsTests.m; sourceTree = "<group>"; };
E8D312DF1FC472A60009FA2F /* IGListContentInsetTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IGListContentInsetTests.m; sourceTree = "<group>"; };
E980179F5E885E417EB20D55 /* Pods_IGListKit_tvOSTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_IGListKit_tvOSTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
F1855A4B29BC565600558D18 /* IGListDiffDescriptionStringTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListDiffDescriptionStringTests.m; sourceTree = "<group>"; };
F1E6302229EA43080060B4D6 /* IGListSectionControllerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListSectionControllerTests.m; sourceTree = "<group>"; };
F1ED68AE29E9B3B9003744F8 /* IGListInteractiveMovingTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListInteractiveMovingTests.m; sourceTree = "<group>"; };
F1ED68AF29E9B3B9003744F8 /* IGListDebugDescriptionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListDebugDescriptionTests.m; sourceTree = "<group>"; };
F1ED68B029E9B3B9003744F8 /* IGListTransactionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListTransactionTests.m; sourceTree = "<group>"; };
F1ED68B129E9B3B9003744F8 /* IGListSingleSectionControllerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IGListSingleSectionControllerTests.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -784,7 +797,6 @@
buildActionMask = 2147483647;
files = (
885FE1DD1DC51A0D009CE2B4 /* IGListKit.framework in Frameworks */,
262373C2015556E71A70FA30 /* Pods_IGListKit_tvOSTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -801,7 +813,6 @@
buildActionMask = 2147483647;
files = (
887D0B401D870D7F009E01F7 /* IGListKit.framework in Frameworks */,
DD468D380BBF350ACE7EA28B /* Pods_IGListKitTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -845,15 +856,6 @@
path = Assets;
sourceTree = "<group>";
};
41882EBBC340173A8053E3AF /* Frameworks */ = {
isa = PBXGroup;
children = (
E980179F5E885E417EB20D55 /* Pods_IGListKit_tvOSTests.framework */,
1AB7195278D0BBB5DA88D36F /* Pods_IGListKitTests.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
7A02CEC6236150C400B49FAE /* IGListKit */ = {
isa = PBXGroup;
children = (
@ -1102,7 +1104,6 @@
887D0B2C1D870D7E009E01F7 = {
isa = PBXGroup;
children = (
41882EBBC340173A8053E3AF /* Frameworks */,
887D0B371D870D7E009E01F7 /* Products */,
0B3B927E1E08D7F5008390ED /* Source */,
887D0B551D870E1E009E01F7 /* Tests */,
@ -1140,8 +1141,10 @@
88144EE51D870EDC007C7F66 /* IGListBatchUpdateDataTests.m */,
298DD9CD1E3ADD1400F76F50 /* IGListBindingSectionControllerTests.m */,
E56B7B3320A9D7100071010C /* IGListCollectionScrollingTraitsTests.m */,
F1ED68B129E9B3B9003744F8 /* IGListSingleSectionControllerTests.m */,
298DDA231E3B15EE00F76F50 /* IGListCollectionViewLayoutTests.m */,
E8D312DF1FC472A60009FA2F /* IGListContentInsetTests.m */,
F1ED68AF29E9B3B9003744F8 /* IGListDebugDescriptionTests.m */,
290DF3761E9323E6009FE456 /* IGListDebuggerTests.m */,
F1855A4B29BC565600558D18 /* IGListDiffDescriptionStringTests.m */,
294AC6311DDE4C19002FCE5D /* IGListDiffResultTests.m */,
@ -1149,7 +1152,9 @@
88144EE81D870EDC007C7F66 /* IGListDiffTests.m */,
88144EE91D870EDC007C7F66 /* IGListDisplayHandlerTests.m */,
29DA5CA21EA7C72400113926 /* IGListGenericSectionControllerTests.m */,
F1ED68AE29E9B3B9003744F8 /* IGListInteractiveMovingTests.m */,
88144EEB1D870EDC007C7F66 /* IGListKitTests-Bridging-Header.h */,
F1E6302229EA43080060B4D6 /* IGListSectionControllerTests.m */,
829D7BA81DD1816400549816 /* IGListSectionMapTests.m */,
26271C8B1DAE96740073E116 /* IGListSingleNibItemControllerTests.m */,
88144EED1D870EDC007C7F66 /* IGListSingleSectionControllerTests.m */,
@ -1157,6 +1162,7 @@
29DA5CA91EA7D39B00113926 /* IGListTestCase.h */,
29DA5CA61EA7D37000113926 /* IGListTestCase.m */,
29DA5CAA1EA7D3FF00113926 /* IGListTestHelpers.h */,
F1ED68B029E9B3B9003744F8 /* IGListTransactionTests.m */,
88144EEF1D870EDC007C7F66 /* IGListWorkingRangeHandlerTests.m */,
2997D4961DF5FC0B005A5DD2 /* IGReloadDataUpdaterTests.m */,
887D0B571D870E1E009E01F7 /* Info.plist */,
@ -1519,11 +1525,9 @@
isa = PBXNativeTarget;
buildConfigurationList = 885FE1EA1DC51A0D009CE2B4 /* Build configuration list for PBXNativeTarget "IGListKit-tvOSTests" */;
buildPhases = (
9B12CED6C1A4A7B9137C8C52 /* [CP] Check Pods Manifest.lock */,
885FE1D81DC51A0D009CE2B4 /* Sources */,
885FE1D91DC51A0D009CE2B4 /* Frameworks */,
885FE1DA1DC51A0D009CE2B4 /* Resources */,
1C5FA70E034CFACCF4FD0854 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@ -1557,11 +1561,9 @@
isa = PBXNativeTarget;
buildConfigurationList = 887D0B4D1D870D7F009E01F7 /* Build configuration list for PBXNativeTarget "IGListKitTests" */;
buildPhases = (
9B9AB53579E3C2BBEEBC3548 /* [CP] Check Pods Manifest.lock */,
887D0B3B1D870D7F009E01F7 /* Sources */,
887D0B3C1D870D7F009E01F7 /* Frameworks */,
887D0B3D1D870D7F009E01F7 /* Resources */,
21587AA7E74BD876C049E30D /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
@ -1569,8 +1571,6 @@
887D0B421D870D7F009E01F7 /* PBXTargetDependency */,
);
name = IGListKitTests;
packageProductDependencies = (
);
productName = IGListKitTests;
productReference = 887D0B3F1D870D7F009E01F7 /* IGListKitTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
@ -1681,8 +1681,6 @@
en,
);
mainGroup = 887D0B2C1D870D7E009E01F7;
packageReferences = (
);
productRefGroup = 887D0B371D870D7E009E01F7 /* Products */;
projectDirPath = "";
projectRoot = "";
@ -1747,78 +1745,6 @@
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
1C5FA70E034CFACCF4FD0854 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-IGListKit-tvOSTests/Pods-IGListKit-tvOSTests-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/OCMock-tvOS/OCMock.framework",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OCMock.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-IGListKit-tvOSTests/Pods-IGListKit-tvOSTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
21587AA7E74BD876C049E30D /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-IGListKitTests/Pods-IGListKitTests-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/OCMock-iOS/OCMock.framework",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OCMock.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-IGListKitTests/Pods-IGListKitTests-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
9B12CED6C1A4A7B9137C8C52 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-IGListKit-tvOSTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
9B9AB53579E3C2BBEEBC3548 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-IGListKitTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
F105D9AE29B7193000B7F361 /* SwiftLint */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
@ -1977,6 +1903,7 @@
29C474901DDF460500AE68CE /* IGListSectionMapTests.m in Sources */,
29C579321DE0DA8A003A149B /* IGTestStoryboardSupplementarySource.m in Sources */,
298DDA131E3AE3F100F76F50 /* IGTestDiffingDataSource.m in Sources */,
F1ED68B329E9B3B9003744F8 /* IGListInteractiveMovingTests.m in Sources */,
29C5792F1DE0DA8A003A149B /* IGListTestAdapterStoryboardDataSource.m in Sources */,
885FE23B1DC51B86009CE2B4 /* IGListTestUICollectionViewDataSource.m in Sources */,
885FE23D1DC51B86009CE2B4 /* IGTestDelegateController.m in Sources */,
@ -1991,24 +1918,30 @@
298DDA001E3AE28000F76F50 /* IGTestDiffingObject.m in Sources */,
29C579331DE0DA8A003A149B /* IGTestStoryboardSupplementaryView.m in Sources */,
16B71CF022B0A08400FE96ED /* IGTestInvalidateLayoutObject.m in Sources */,
F1ED68BB29E9B40A003744F8 /* IGListGenericSectionControllerTests.m in Sources */,
16B71CEC22B0A08400FE96ED /* IGTestInvalidateLayoutSectionController.m in Sources */,
2995409F1F588C9500F647CF /* IGTestBindingWithoutDeselectionDelegate.m in Sources */,
885FE2401DC51B86009CE2B4 /* IGTestSingleItemDataSource.m in Sources */,
885FE2451DC51B86009CE2B4 /* IGTestStoryboardCell.m in Sources */,
F1E6302429EA43080060B4D6 /* IGListSectionControllerTests.m in Sources */,
16B71CEE22B0A08400FE96ED /* IGTestInvalidateLayoutDataSource.m in Sources */,
298DD9CF1E3ADD1400F76F50 /* IGListBindingSectionControllerTests.m in Sources */,
885FE22F1DC51B76009CE2B4 /* IGListDiffSwiftTests.swift in Sources */,
885FE23F1DC51B86009CE2B4 /* IGTestObject.m in Sources */,
F1ED68B929E9B3B9003744F8 /* IGListSingleSectionControllerTests.m in Sources */,
F1855A4D29BC565600558D18 /* IGListDiffDescriptionStringTests.m in Sources */,
828540511DE40D2D00118B94 /* IGListTestAdapterHorizontalDataSource.m in Sources */,
885FE2371DC51B76009CE2B4 /* IGListWorkingRangeHandlerTests.m in Sources */,
8285404D1DE40C6E00118B94 /* IGListTestHorizontalSection.m in Sources */,
298DDA061E3AE2B000F76F50 /* IGTestNumberBindableCell.m in Sources */,
885FE2381DC51B86009CE2B4 /* IGListTestAdapterDataSource.m in Sources */,
F1ED68B529E9B3B9003744F8 /* IGListDebugDescriptionTests.m in Sources */,
885FE2341DC51B76009CE2B4 /* IGListSingleNibItemControllerTests.m in Sources */,
0B40C5F31E01CB8200378109 /* IGReloadDataUpdaterTests.m in Sources */,
885FE2391DC51B86009CE2B4 /* IGListTestOffsettingLayout.m in Sources */,
29C4748F1DDF460500AE68CE /* IGListDiffResultTests.m in Sources */,
F1ED68B729E9B3B9003744F8 /* IGListTransactionTests.m in Sources */,
F1ED68BE29E9B41A003744F8 /* IGListContentInsetTests.m in Sources */,
885FE2421DC51B86009CE2B4 /* IGTestSingleStoryboardItemDataSource.m in Sources */,
885FE2301DC51B76009CE2B4 /* IGListDiffTests.m in Sources */,
885FE22E1DC51B76009CE2B4 /* IGListBatchUpdateDataTests.m in Sources */,
@ -2027,6 +1960,7 @@
6A9EB3621F841E5D0070C572 /* IGTestSingleWithoutDeselectionDelegate.m in Sources */,
885FE2461DC51B86009CE2B4 /* IGTestSupplementarySource.m in Sources */,
885FE2431DC51B86009CE2B4 /* IGTestStoryboardViewController.m in Sources */,
F1ED68BC29E9B411003744F8 /* IGListDebuggerTests.m in Sources */,
885FE23A1DC51B86009CE2B4 /* IGListTestSection.m in Sources */,
29C579301DE0DA8A003A149B /* IGListTestStoryboardSection.m in Sources */,
885FE23E1DC51B86009CE2B4 /* IGTestDelegateDataSource.m in Sources */,
@ -2086,6 +2020,7 @@
298DDA141E3AE3F300F76F50 /* IGTestDiffingDataSource.m in Sources */,
8240C7F51DC2D99300B3AAE7 /* IGTestStoryboardSupplementarySource.m in Sources */,
88144F1B1D870EDC007C7F66 /* IGTestSingleItemDataSource.m in Sources */,
F1E6302329EA43080060B4D6 /* IGListSectionControllerTests.m in Sources */,
88144F171D870EDC007C7F66 /* IGTestCell.m in Sources */,
298DDA241E3B15EE00F76F50 /* IGListCollectionViewLayoutTests.m in Sources */,
821BC4C01DB8C9D500172ED0 /* IGListSingleStoryboardItemControllerTests.m in Sources */,
@ -2095,7 +2030,9 @@
298DDA011E3AE28000F76F50 /* IGTestDiffingObject.m in Sources */,
88144F131D870EDC007C7F66 /* IGListTestAdapterDataSource.m in Sources */,
88144F071D870EDC007C7F66 /* IGListAdapterE2ETests.m in Sources */,
F1ED68BA29E9B404003744F8 /* IGListInteractiveMovingTests.m in Sources */,
88144F1A1D870EDC007C7F66 /* IGTestObject.m in Sources */,
F1ED68BF29E9B443003744F8 /* IGListTransactionTests.m in Sources */,
298DD9CE1E3ADD1400F76F50 /* IGListBindingSectionControllerTests.m in Sources */,
88144F0B1D870EDC007C7F66 /* IGListDiffSwiftTests.swift in Sources */,
88144F191D870EDC007C7F66 /* IGTestDelegateDataSource.m in Sources */,
@ -2110,6 +2047,7 @@
2997D4971DF5FC0B005A5DD2 /* IGReloadDataUpdaterTests.m in Sources */,
13DF01771FA1000E0092A320 /* IGTestReorderableSection.m in Sources */,
829D7BAA1DD1819000549816 /* IGListSectionMapTests.m in Sources */,
F1ED68BD29E9B415003744F8 /* IGListDebugDescriptionTests.m in Sources */,
E56B7B3420A9D7100071010C /* IGListCollectionScrollingTraitsTests.m in Sources */,
16B71CEB22B0A08400FE96ED /* IGTestInvalidateLayoutSectionController.m in Sources */,
29C5792E1DE0DA89003A149B /* IGTestNibSupplementaryView.m in Sources */,
@ -2602,6 +2540,11 @@
buildSettings = {
CODE_SIGN_STYLE = Manual;
DEVELOPMENT_TEAM = "";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
"NS_BLOCK_ASSERTIONS=1",
);
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
GCC_WARN_SHADOW = YES;
INFOPLIST_FILE = Tests/Info.plist;
@ -2946,6 +2889,11 @@
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Manual;
DEVELOPMENT_TEAM = "";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
"NS_BLOCK_ASSERTIONS=1",
);
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
GCC_WARN_SHADOW = YES;
INFOPLIST_FILE = Tests/Info.plist;
@ -2996,6 +2944,11 @@
CODE_SIGN_STYLE = Manual;
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = "";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
"NS_BLOCK_ASSERTIONS=1",
);
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
GCC_WARN_SHADOW = YES;
INFOPLIST_FILE = Tests/Info.plist;

View file

@ -0,0 +1,112 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import <XCTest/XCTest.h>
#import <IGListKit/IGListKit.h>
#import <OCMock/OCMock.h>
#import "IGListAdapter+DebugDescription.h"
#import "IGListAdapterUpdater+DebugDescription.h"
#import "IGListAdapterUpdaterInternal.h"
#import "IGListAdapterInternal.h"
#import "IGListBatchUpdateData+DebugDescription.h"
#import "IGListMoveIndexInternal.h"
#import "IGListMoveIndexPathINternal.h"
#import "IGListTestAdapterDataSource.h"
#import "IGListTestCase.h"
#import "IGListUpdateTransactable.h"
#import "IGTestDelegateDataSource.h"
#import "IGTestObject.h"
@interface IGListAdapterUpdater (DebugDescriptionTests)
- (void)setTransaction:(id<IGListUpdateTransactable>)transaction;
@end
@interface IGListBindingSectionController (DebugDescriptionTests)
- (void)setViewModels:(NSArray<id<IGListDiffable>> *)viewModels;
@end
@interface IGListDebugDescriptionTests : IGListTestCase
@end
@implementation IGListDebugDescriptionTests
- (void)setUp {
self.dataSource = [IGListTestAdapterDataSource new];
[super setUp];
}
- (void)test_withListAdapter_thatDebugDescriptionIsValid {
self.dataSource.objects = @[@1, @2, @3];
IGListAdapter *adapter = [[IGListAdapter alloc] initWithUpdater:[IGListAdapterUpdater new] viewController:nil];
adapter.collectionView = self.collectionView;
adapter.dataSource = self.dataSource;
[adapter.registeredCellIdentifiers addObject:@"IGCellIdentifier"];
[adapter.registeredNibNames addObject:@"IGCellNibName"];
[adapter.registeredSupplementaryViewIdentifiers addObject:@"IGSupplementaryViewIdentifier"];
[adapter.registeredSupplementaryViewNibNames addObject:@"IGSupplementaryNibName"];
IGListBindingSectionController *bindingSectionController = [[IGListBindingSectionController alloc] init];
bindingSectionController.viewModels = @[[[IGTestObject alloc] initWithKey:@"Key" value:@(1)]];
adapter.previousSectionMap = [[IGListSectionMap alloc] initWithMapTable:[NSMapTable strongToStrongObjectsMapTable]];
[adapter.previousSectionMap updateWithObjects:@[@1] sectionControllers:@[bindingSectionController]];
XCTAssertTrue(adapter.debugDescriptionLines.count > 0);
XCTAssertTrue(adapter.debugDescription.length > 0);
}
- (void)test_withListAdapterUpdater_thatDebugDescriptionIsValid {
id transactionMock = [OCMockObject mockForProtocol:@protocol(IGListUpdateTransactable)];
IGListAdapterUpdater *updater = [IGListAdapterUpdater new];
[updater setTransaction:transactionMock];
[[[transactionMock expect] andReturnValue:@(IGListBatchUpdateStateIdle)] state];
XCTAssertTrue(updater.debugDescriptionLines.count > 0);
[[[transactionMock expect] andReturnValue:@(IGListBatchUpdateStateQueuedBatchUpdate)] state];
XCTAssertTrue(updater.debugDescriptionLines.count > 0);
[[[transactionMock expect] andReturnValue:@(IGListBatchUpdateStateExecutingBatchUpdateBlock)] state];
XCTAssertTrue(updater.debugDescriptionLines.count > 0);
[[[transactionMock expect] andReturnValue:@(IGListBatchUpdateStateExecutedBatchUpdateBlock)] state];
XCTAssertTrue(updater.debugDescriptionLines.count > 0);
}
- (void)test_withBatchUpdateData_thatDebugDescriptionIsValid {
NSMutableIndexSet *insertSections = [NSMutableIndexSet indexSet];
[insertSections addIndex:0];
[insertSections addIndex:1];
NSIndexSet *deleteSections = [NSIndexSet indexSetWithIndex:5];
IGListMoveIndex *moveSections = [[IGListMoveIndex alloc] initWithFrom:3 to:4];
NSIndexPath *insertIndexPaths = [NSIndexPath indexPathForItem:0 inSection:0];
NSIndexPath *deleteIndexPaths = [NSIndexPath indexPathForItem:0 inSection:0];
IGListMoveIndexPath *moveIndexPaths = [[IGListMoveIndexPath alloc] initWithFrom:[NSIndexPath indexPathForItem:0 inSection:6]
to:[NSIndexPath indexPathForItem:1 inSection:6]];
IGListBatchUpdateData *data = [[IGListBatchUpdateData alloc] initWithInsertSections:insertSections
deleteSections:deleteSections
moveSections:[NSSet setWithObject:moveSections]
insertIndexPaths:@[insertIndexPaths]
deleteIndexPaths:@[deleteIndexPaths]
updateIndexPaths:@[]
moveIndexPaths:@[moveIndexPaths]];
XCTAssertTrue(data.debugDescriptionLines.count > 0);
}
@end

View file

@ -0,0 +1,130 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import <XCTest/XCTest.h>
#import <OCMock/OCMock.h>
#import "IGTestObject.h"
#import "IGListTestCase.h"
#import "IGTestDelegateDataSource.h"
#import "UICollectionViewLayout+InteractiveReordering.h"
@interface UICollectionViewLayout (Tests)
- (void)ig_invalidateAccessoryElementsWithSupplementaryIndexPaths:(NSDictionary<NSString *, NSArray<NSIndexPath *> *> *)supplementaryIndexPaths
decorationIndexPaths:(NSDictionary<NSString *, NSArray<NSIndexPath *> *> *)decorationIndexPaths
inContext:(UICollectionViewLayoutInvalidationContext *)context;
@end
@interface IGListInteractiveMovingTests : IGListTestCase
@end
@implementation IGListInteractiveMovingTests
- (void)setUp {
self.workingRangeSize = 2;
self.dataSource = [IGTestDelegateDataSource new];
[super setUp];
}
- (void)test_withDetachedLayout_whenQueryingForInteractiveMovingItem_thatOriginalIndexPathIsReturned {
UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout new];
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:1 inSection:1];
NSIndexPath *targetIndexPath = [layout targetIndexPathForInteractivelyMovingItem:indexPath
withPosition:CGPointMake(100, 100)];
XCTAssertEqual(indexPath.item, targetIndexPath.item);
XCTAssertEqual(indexPath.section, targetIndexPath.section);
}
- (void)test_withDetachedLayout_thatCleanupInvalidationContextExitsEarly {
UICollectionViewFlowLayout *layout = [UICollectionViewFlowLayout new];
NSIndexPath *sourceIndexPath = [NSIndexPath indexPathForItem:1 inSection:1];
NSIndexPath *targetIndexPath = [NSIndexPath indexPathForItem:1 inSection:1];
UICollectionViewLayoutInvalidationContext *context = [layout invalidationContextForInteractivelyMovingItems:@[targetIndexPath]
withTargetPosition:CGPointMake(0, 0)
previousIndexPaths:@[sourceIndexPath]
previousPosition:CGPointZero];
XCTAssertTrue(context.invalidatedItemIndexPaths.count > 0);
}
- (void)test_whenCollectionViewIsSet_thatTargetIndexPathIsValid {
[self setupWithObjects:@[genTestObject(@1, @2)]];
UICollectionViewLayout *layout = self.collectionView.collectionViewLayout;
NSIndexPath *indexPath = [NSIndexPath indexPathForItem:1 inSection:1];
NSIndexPath *targetIndexPath = [layout targetIndexPathForInteractivelyMovingItem:indexPath
withPosition:CGPointMake(100, 100)];
XCTAssertEqual(indexPath.item, targetIndexPath.item);
XCTAssertEqual(indexPath.section, targetIndexPath.section);
}
- (void)test_whenCollectionViewIsSet_thatInvalidationContextForInteractivelyMovingItemsPasses {
[self setupWithObjects:@[genTestObject(@1, @2), genTestObject(@4, @5)]];
UICollectionViewLayout *layout = self.collectionView.collectionViewLayout;
NSIndexPath *sourceIndexPath = [NSIndexPath indexPathForItem:1 inSection:1];
NSIndexPath *targetIndexPath = [NSIndexPath indexPathForItem:1 inSection:1];
UICollectionViewLayoutInvalidationContext *context = [layout invalidationContextForInteractivelyMovingItems:@[targetIndexPath]
withTargetPosition:CGPointMake(0, 0)
previousIndexPaths:@[sourceIndexPath]
previousPosition:CGPointZero];
XCTAssertTrue(context.invalidatedItemIndexPaths.count > 0);
}
- (void)test_whenCollectionViewIsSet_andIndexPathIsInsideBounds_thatValidationContextForEndingInteractiveMovementOfItemsToFinalIndexPathsPasses {
[self setupWithObjects:@[genTestObject(@1, @2), genTestObject(@4, @5), genTestObject(@6, @7)]];
UICollectionViewLayout *layout = self.collectionView.collectionViewLayout;
NSIndexPath *sourceIndexPath = [NSIndexPath indexPathForItem:1 inSection:0];
NSIndexPath *targetIndexPath = [NSIndexPath indexPathForItem:1 inSection:0];
UICollectionViewLayoutInvalidationContext *context = [layout invalidationContextForEndingInteractiveMovementOfItemsToFinalIndexPaths:@[sourceIndexPath]
previousIndexPaths:@[targetIndexPath]
movementCancelled:NO];
XCTAssertTrue(context.invalidatedItemIndexPaths.count > 0);
}
- (void)test_whenCollectionViewIsSet_andIndexPathIsOutOfBounds_thatValidationContextForEndingInteractiveMovementOfItemsToFinalIndexPathsPasses {
[self setupWithObjects:@[genTestObject(@1, @2), genTestObject(@4, @5), genTestObject(@6, @7)]];
UICollectionViewLayout *layout = self.collectionView.collectionViewLayout;
NSIndexPath *sourceIndexPath = [NSIndexPath indexPathForItem:8 inSection:2];
NSIndexPath *targetIndexPath = [NSIndexPath indexPathForItem:8 inSection:2];
UICollectionViewLayoutInvalidationContext *context = [layout invalidationContextForEndingInteractiveMovementOfItemsToFinalIndexPaths:@[sourceIndexPath]
previousIndexPaths:@[targetIndexPath]
movementCancelled:NO];
XCTAssertTrue(context.invalidatedItemIndexPaths.count == 0);
}
- (void)test_whenCollectionViewIsSetWithBaseLayout_andIndexPathIsOutOfBounds_thatValidationContextForEndingInteractiveMovementOfItemsToFinalIndexPathsPasses {
[self setupWithObjects:@[genTestObject(@1, @2), genTestObject(@4, @5), genTestObject(@6, @7)]];
UICollectionViewLayout *layout = [UICollectionViewLayout new];
[layout ig_hijackLayoutInteractiveReorderingMethodForAdapter:self.adapter];
self.collectionView.collectionViewLayout = layout;
NSIndexPath *sourceIndexPath = [NSIndexPath indexPathForItem:8 inSection:2];
NSIndexPath *targetIndexPath = [NSIndexPath indexPathForItem:8 inSection:2];
UICollectionViewLayoutInvalidationContext *context = [layout invalidationContextForEndingInteractiveMovementOfItemsToFinalIndexPaths:@[sourceIndexPath]
previousIndexPaths:@[targetIndexPath]
movementCancelled:NO];
XCTAssertTrue(context.invalidatedItemIndexPaths.count == 0);
}
- (void)test_withInvalidationContext_thatSupplementaryAndDecorationIndexPathsAreInvalidated {
UICollectionViewLayout *layout = [UICollectionViewLayout new];
NSDictionary *supplementaryDictionary = @{@"supplementary": @[[NSIndexPath indexPathForItem:1 inSection:1]]};
NSDictionary *decorationDictionary = @{@"decoration": @[[NSIndexPath indexPathForItem:2 inSection:2]]};
id contextMock = [OCMockObject mockForClass:[UICollectionViewLayoutInvalidationContext class]];
[[contextMock expect] invalidateSupplementaryElementsOfKind:@"supplementary" atIndexPaths:supplementaryDictionary[@"supplementary"]];
[[contextMock expect] invalidateDecorationElementsOfKind:@"decoration" atIndexPaths:decorationDictionary[@"decoration"]];
[layout ig_invalidateAccessoryElementsWithSupplementaryIndexPaths:supplementaryDictionary
decorationIndexPaths:decorationDictionary
inContext:contextMock];
[contextMock verify];
}
@end

View file

@ -0,0 +1,42 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import <XCTest/XCTest.h>
#import <IGListKit/IGListSectionController.h>
@interface IGListSectionControllerTests : XCTestCase
@end
@implementation IGListSectionControllerTests
- (void)test_withBaseSectionContoller_thatDefaultValuesAreCorrect {
NSObject *object = [NSObject new];
IGListSectionController *sectionController = [[IGListSectionController alloc] init];
XCTAssertNotNil(sectionController);
XCTAssertEqual([sectionController numberOfItems], 1);
XCTAssertTrue(CGSizeEqualToSize([sectionController sizeForItemAtIndex:0], CGSizeZero));
XCTAssertTrue([sectionController shouldSelectItemAtIndex:0]);
XCTAssertTrue([sectionController shouldDeselectItemAtIndex:0]);
XCTAssertFalse([sectionController canMoveItemAtIndex:0]);
[sectionController didUpdateToObject:object];
[sectionController didSelectItemAtIndex:0];
[sectionController didDeselectItemAtIndex:0];
[sectionController didHighlightItemAtIndex:0];
[sectionController didUnhighlightItemAtIndex:0];
@try {
[sectionController cellForItemAtIndex:0];
[sectionController moveObjectFromIndex:0 toIndex:1];
} @catch (NSException *exception) {}
}
@end

View file

@ -0,0 +1,170 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import <XCTest/XCTest.h>
#import "IGListAdapterUpdater.h"
#import "IGListBatchUpdateTransaction.h"
#import "IGListDataSourceChangeTransaction.h"
#import "IGListReloadTransaction.h"
#import "IGListTestUICollectionViewDataSource.h"
#import "IGListTransitionData.h"
@interface IGListBatchUpdateTransaction (Tests)
- (NSInteger)mode;
- (void)setSectionData:(IGListTransitionData *)sectionData;
@end
@interface IGListTransactionTests : XCTestCase {
IGListUpdateTransactationConfig _config;
}
@property (nonatomic, strong) UIWindow *window;
@property (nonatomic, strong) UICollectionView *collectionView;
@property (nonatomic, strong) IGListTestUICollectionViewDataSource *dataSource;
@property (nonatomic, strong) IGListTransitionDataApplyBlock applySectionDataBlock;
@end
@implementation IGListTransactionTests
- (IGListCollectionViewBlock)collectionViewBlock {
return ^UICollectionView *{ return self.collectionView; };
}
- (IGListTransitionDataBlock)dataBlockFromObjects:(NSArray *)fromObjects toObjects:(NSArray *)toObjects {
return ^IGListTransitionData *{
return [[IGListTransitionData alloc] initFromObjects:fromObjects toObjects:toObjects toSectionControllers:@[]];
};
}
- (IGListBatchUpdateTransaction *)makeBatchUpdateTransaction {
return [[IGListBatchUpdateTransaction alloc] initWithCollectionViewBlock:[self collectionViewBlock]
updater:[IGListAdapterUpdater new]
delegate:nil
config:_config
animated:NO
sectionDataBlock:[self dataBlockFromObjects:@[] toObjects:@[@0]]
applySectionDataBlock:self.applySectionDataBlock
itemUpdateBlocks:@[]
completionBlocks:@[]];
}
- (IGListDataSourceChangeTransaction *)makeDataSourceChangeTransaction {
return [[IGListDataSourceChangeTransaction alloc] initWithChangeBlock:^{}
itemUpdateBlocks:@[]
completionBlocks:@[]];
}
- (IGListReloadTransaction *)makeReloadTransaction {
return [[IGListReloadTransaction alloc] initWithCollectionViewBlock:[self collectionViewBlock]
updater:[IGListAdapterUpdater new]
delegate:nil
reloadBlock:^{}
itemUpdateBlocks:@[]
completionBlocks:@[]];
}
- (void)setUp {
[super setUp];
self.window = [[UIWindow alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
self.collectionView = [[UICollectionView alloc] initWithFrame:self.window.frame collectionViewLayout:layout];
[self.window addSubview:self.collectionView];
self.dataSource = [[IGListTestUICollectionViewDataSource alloc] initWithCollectionView:self.collectionView];
__weak __typeof__(self) weakSelf = self;
self.applySectionDataBlock = ^(IGListTransitionData *data) {
weakSelf.dataSource.sections = data.toObjects;
};
memset(&_config, 0, sizeof(IGListUpdateTransactationConfig));
}
- (void)tearDown {
[super tearDown];
self.collectionView = nil;
self.dataSource = nil;
self.window = nil;
memset(&_config, 0, sizeof(IGListUpdateTransactationConfig));
}
- (void)test_withBatchUpdateTransaction_thatNilCollectionViewBailsCorrectly {
self.collectionView = nil;
IGListBatchUpdateTransaction *batchUpdateTransaction = [self makeBatchUpdateTransaction];
[batchUpdateTransaction begin];
XCTAssertEqual(batchUpdateTransaction.state, IGListBatchUpdateStateIdle);
}
- (void)test_withBatchUpdateTransaction_thatCancellingTransactionMultipleTimesPerformsCorrectly {
_config.allowsBackgroundDiffing = YES;
IGListBatchUpdateTransaction *batchUpdateTransaction = [self makeBatchUpdateTransaction];
[batchUpdateTransaction begin];
[batchUpdateTransaction cancel];
[batchUpdateTransaction cancel];
XCTAssertEqual(batchUpdateTransaction.mode, 2);
}
- (void)test_withBatchUpdateTransaction_thatMismatchedCollectionViewStateIsCaught {
self.dataSource.sections = @[[IGSectionObject sectionWithObjects:@[]]];
IGListBatchUpdateTransaction *batchUpdateTransaction = [self makeBatchUpdateTransaction];
@try {
[batchUpdateTransaction begin];
} @catch (NSException *exception) {}
}
- (void)test_withBatchUpdateTransaction_thatCancellingTransactionBetweenRunLoopsIsCaptured {
_config.allowsBackgroundDiffing = YES;
IGListBatchUpdateTransaction *batchUpdateTransaction = [self makeBatchUpdateTransaction];
[batchUpdateTransaction begin];
[batchUpdateTransaction cancel];
XCTestExpectation *expectation = [self expectationWithDescription:NSStringFromSelector(_cmd)];
dispatch_async(dispatch_get_main_queue(), ^{
XCTAssertEqual(batchUpdateTransaction.mode, 2); // Check mode is cancelled
[expectation fulfill];
});
[self waitForExpectationsWithTimeout:30 handler:nil];
}
- (void)test_withDataSourceChangeTransaction_thatAllStubbedMethodsNoOpCorrectly {
IGListDataSourceChangeTransaction *transaction = [self makeDataSourceChangeTransaction];
XCTAssertFalse([transaction cancel]);
NSIndexPath *from = [NSIndexPath indexPathForItem:0 inSection:0];
NSIndexPath *to = [NSIndexPath indexPathForItem:0 inSection:1];
[transaction insertItemsAtIndexPaths:@[]];
[transaction deleteItemsAtIndexPaths:@[]];
[transaction moveItemFromIndexPath:from toIndexPath:to];
[transaction reloadItemFromIndexPath:from toIndexPath:to];
[transaction reloadSections:[NSIndexSet indexSet]];
}
- (void)test_withReloadTransaction_thatAllStubbedMethodsNoOpCorrectly {
IGListReloadTransaction *transaction = [self makeReloadTransaction];
XCTAssertFalse([transaction cancel]);
NSIndexPath *from = [NSIndexPath indexPathForItem:0 inSection:0];
NSIndexPath *to = [NSIndexPath indexPathForItem:0 inSection:1];
[transaction insertItemsAtIndexPaths:@[]];
[transaction deleteItemsAtIndexPaths:@[]];
[transaction moveItemFromIndexPath:from toIndexPath:to];
[transaction reloadItemFromIndexPath:from toIndexPath:to];
[transaction reloadSections:[NSIndexSet indexSet]];
}
@end