mirror of
https://github.com/divkit/divkit.git
synced 2026-05-07 20:02:32 +00:00
fix LottieExtensionHandler getPreloadURLs, move DivBuilders to DivKitTestsSupport
commit_hash:e22b43dde31492aae7d9ad8723ec9409b4980cd7
This commit is contained in:
@@ -13923,6 +13923,7 @@
|
||||
"client/ios/DivKitExtensions/Shimmers/Shine/ShineExtensionParams.swift":"divkit/public/client/ios/DivKitExtensions/Shimmers/Shine/ShineExtensionParams.swift",
|
||||
"client/ios/DivKitExtensions/Shimmers/Shine/ShineView.swift":"divkit/public/client/ios/DivKitExtensions/Shimmers/Shine/ShineView.swift",
|
||||
"client/ios/DivKitExtensions/SizeProvider/SizeProviderExtensionHandler.swift":"divkit/public/client/ios/DivKitExtensions/SizeProvider/SizeProviderExtensionHandler.swift",
|
||||
"client/ios/DivKitExtensionsTests/LottieExtensionHandlerTests.swift":"divkit/public/client/ios/DivKitExtensionsTests/LottieExtensionHandlerTests.swift",
|
||||
"client/ios/DivKitExtensionsTests/ShimmerImagePreviewStyleTests.swift":"divkit/public/client/ios/DivKitExtensionsTests/ShimmerImagePreviewStyleTests.swift",
|
||||
"client/ios/DivKitExtensionsTests/ShimmerStyleTester.swift":"divkit/public/client/ios/DivKitExtensionsTests/ShimmerStyleTester.swift",
|
||||
"client/ios/DivKitExtensionsTests/ShineExtensionParamsTests.swift":"divkit/public/client/ios/DivKitExtensionsTests/ShineExtensionParamsTests.swift",
|
||||
@@ -14159,6 +14160,7 @@
|
||||
"client/ios/DivKitTestsSupport/DivBuilders.swift":"divkit/public/client/ios/DivKitTestsSupport/DivBuilders.swift",
|
||||
"client/ios/DivKitTestsSupport/FakeImageHolder.swift":"divkit/public/client/ios/DivKitTestsSupport/FakeImageHolder.swift",
|
||||
"client/ios/DivKitTestsSupport/MockDivBlockModelingContext.swift":"divkit/public/client/ios/DivKitTestsSupport/MockDivBlockModelingContext.swift",
|
||||
"client/ios/DivKitTestsSupport/MockURLResourceRequester.swift":"divkit/public/client/ios/DivKitTestsSupport/MockURLResourceRequester.swift",
|
||||
"client/ios/DivKitUITests/AppLaunchUITests.swift":"divkit/public/client/ios/DivKitUITests/AppLaunchUITests.swift",
|
||||
"client/ios/DivKitUITests/TooltipsUITests.swift":"divkit/public/client/ios/DivKitUITests/TooltipsUITests.swift",
|
||||
"client/ios/LayoutKit/Interface/ActionsAttribute.swift":"divkit/public/client/ios/LayoutKit/Interface/ActionsAttribute.swift",
|
||||
|
||||
@@ -15,7 +15,10 @@
|
||||
0C276A862DDC949700247E75 /* ImageBaseBlockTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C276A852DDC949700247E75 /* ImageBaseBlockTests.swift */; };
|
||||
0C9BB87F2DF02ECF001C4E72 /* MockDivExtensionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C9BB87E2DF02ECF001C4E72 /* MockDivExtensionHandler.swift */; };
|
||||
0C9BB8802DF02ECF001C4E72 /* MockDivExtensionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C9BB87E2DF02ECF001C4E72 /* MockDivExtensionHandler.swift */; };
|
||||
0CE1B3552E04197A00677706 /* LottieExtensionHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CE1B3542E04197A00677706 /* LottieExtensionHandlerTests.swift */; };
|
||||
0CE4BDE52C4FAE9F0048BEF8 /* GenericViewBlockTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CE4BDE42C4FAE9F0048BEF8 /* GenericViewBlockTests.swift */; };
|
||||
0CE65E942E041BBE005EBB5A /* MockURLResourceRequester.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CE65E932E041BBE005EBB5A /* MockURLResourceRequester.swift */; };
|
||||
0CE65E952E041BBE005EBB5A /* MockURLResourceRequester.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CE65E932E041BBE005EBB5A /* MockURLResourceRequester.swift */; };
|
||||
431CF8582B7BC47E005A2E61 /* DivActionURLHandlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431CF8572B7BC47E005A2E61 /* DivActionURLHandlerTests.swift */; };
|
||||
431DC9C22961EF84007FA268 /* ContainerBlockLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431DC9C12961EF84007FA268 /* ContainerBlockLayoutTests.swift */; };
|
||||
431DC9C429620AA1007FA268 /* BlockTestsModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = 431DC9C329620AA1007FA268 /* BlockTestsModels.swift */; };
|
||||
@@ -279,8 +282,6 @@
|
||||
8CF329702875D64B003F799A /* LayoutKit in Frameworks */ = {isa = PBXBuildFile; productRef = 8CF3296F2875D64B003F799A /* LayoutKit */; };
|
||||
8CF32B7E2875E12F003F799A /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CF32B7D2875E12F003F799A /* Utils.swift */; };
|
||||
8CF8BBE52B322E3100569777 /* Assert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CF8BBE42B322E3100569777 /* Assert.swift */; };
|
||||
8CF8BBE82B32660500569777 /* BlockModelingUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CF8BBE72B32660500569777 /* BlockModelingUtils.swift */; };
|
||||
8CF8BBEA2B32682700569777 /* DivBuilders.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CF8BBE92B32682700569777 /* DivBuilders.swift */; };
|
||||
8CF91B042D0AE4ED0082FDC1 /* MockDivActionHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CF91B032D0AE4ED0082FDC1 /* MockDivActionHandler.swift */; };
|
||||
8CFD4C9E2B2C5B780092814C /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CFD4C9D2B2C5B780092814C /* Theme.swift */; };
|
||||
982A7F142C9C08F30081DE74 /* PagerViewLayoutTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 982A7F132C9C08F30081DE74 /* PagerViewLayoutTests.swift */; };
|
||||
@@ -390,7 +391,9 @@
|
||||
0C1B9FDF2DDE1D6B00F69371 /* DivDataResourcesPreloaderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DivDataResourcesPreloaderTests.swift; sourceTree = "<group>"; };
|
||||
0C276A852DDC949700247E75 /* ImageBaseBlockTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageBaseBlockTests.swift; sourceTree = "<group>"; };
|
||||
0C9BB87E2DF02ECF001C4E72 /* MockDivExtensionHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockDivExtensionHandler.swift; sourceTree = "<group>"; };
|
||||
0CE1B3542E04197A00677706 /* LottieExtensionHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LottieExtensionHandlerTests.swift; sourceTree = "<group>"; };
|
||||
0CE4BDE42C4FAE9F0048BEF8 /* GenericViewBlockTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GenericViewBlockTests.swift; sourceTree = "<group>"; };
|
||||
0CE65E932E041BBE005EBB5A /* MockURLResourceRequester.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockURLResourceRequester.swift; sourceTree = "<group>"; };
|
||||
431CF8572B7BC47E005A2E61 /* DivActionURLHandlerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DivActionURLHandlerTests.swift; sourceTree = "<group>"; };
|
||||
431DC9C12961EF84007FA268 /* ContainerBlockLayoutTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContainerBlockLayoutTests.swift; sourceTree = "<group>"; };
|
||||
431DC9C329620AA1007FA268 /* BlockTestsModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockTestsModels.swift; sourceTree = "<group>"; };
|
||||
@@ -807,6 +810,7 @@
|
||||
52DED03C29F6E3D500D64519 /* ShimmerImagePreviewStyleTests.swift */,
|
||||
9F89F0D82CEF4C8D00460B76 /* ShineExtensionParamsTests.swift */,
|
||||
9F89F0DA2CEF5AA600460B76 /* ShimmerStyleTester.swift */,
|
||||
0CE1B3542E04197A00677706 /* LottieExtensionHandlerTests.swift */,
|
||||
);
|
||||
path = DivKitExtensionsTests;
|
||||
sourceTree = "<group>";
|
||||
@@ -1459,6 +1463,7 @@
|
||||
8CF8BBE92B32682700569777 /* DivBuilders.swift */,
|
||||
9FE7D31B2CF7535700BAF071 /* FakeImageHolder.swift */,
|
||||
9FE7D2D22CF74C2F00BAF071 /* MockDivBlockModelingContext.swift */,
|
||||
0CE65E932E041BBE005EBB5A /* MockURLResourceRequester.swift */,
|
||||
);
|
||||
path = DivKitTestsSupport;
|
||||
sourceTree = "<group>";
|
||||
@@ -1923,6 +1928,7 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
0CE1B3552E04197A00677706 /* LottieExtensionHandlerTests.swift in Sources */,
|
||||
52DED05329F734B900D64519 /* ShimmerImagePreviewStyleTests.swift in Sources */,
|
||||
9F89F0DB2CEF5AAC00460B76 /* ShimmerStyleTester.swift in Sources */,
|
||||
0C9BB87F2DF02ECF001C4E72 /* MockDivExtensionHandler.swift in Sources */,
|
||||
@@ -2061,7 +2067,6 @@
|
||||
52907F662A71199B00518F50 /* DivLastVisibleBoundsCacheTests.swift in Sources */,
|
||||
8C23F41729DDB3810069F3F7 /* EntityWithArrayOfExpressionsTemplate.swift in Sources */,
|
||||
8C23F41D29DDB3810069F3F7 /* EntityWithComplexProperty.swift in Sources */,
|
||||
8CF8BBEA2B32682700569777 /* DivBuilders.swift in Sources */,
|
||||
8CB960E628883B8E00D16E47 /* Platform.swift in Sources */,
|
||||
8C23F41829DDB3810069F3F7 /* EntityWithArrayOfNestedItems.swift in Sources */,
|
||||
8C23F43729DDB3810069F3F7 /* EntityWithoutProperties.swift in Sources */,
|
||||
@@ -2102,7 +2107,6 @@
|
||||
8C84C2232D0870F400A574AC /* ScrollActionHandlerTests.swift in Sources */,
|
||||
8C23F41929DDB3810069F3F7 /* EntityWithArrayOfNestedItemsTemplate.swift in Sources */,
|
||||
8C23F41B29DDB3810069F3F7 /* EntityWithArrayWithTransform.swift in Sources */,
|
||||
8CF8BBE82B32660500569777 /* BlockModelingUtils.swift in Sources */,
|
||||
8C23F42A29DDB3810069F3F7 /* EntityWithPropertyWithDefaultValueTemplate.swift in Sources */,
|
||||
8C23F42929DDB3810069F3F7 /* EntityWithPropertyWithDefaultValue.swift in Sources */,
|
||||
8C23F44229DDB3810069F3F7 /* OptionalComplexPropertyTests.swift in Sources */,
|
||||
@@ -2129,6 +2133,7 @@
|
||||
8C23F42129DDB3810069F3F7 /* EntityWithEntityProperty.swift in Sources */,
|
||||
8C23F41129DDB3810069F3F7 /* Entity.swift in Sources */,
|
||||
8CBE33002BD699CC00CFFDF5 /* DivTriggersStorageTests.swift in Sources */,
|
||||
0CE65E952E041BBE005EBB5A /* MockURLResourceRequester.swift in Sources */,
|
||||
8C23F43929DDB3810069F3F7 /* ArrayOfEnums.swift in Sources */,
|
||||
8C23F3C729DDB2120069F3F7 /* TemplateToTypeTests.swift in Sources */,
|
||||
8CB960E828883B9A00D16E47 /* FunctionSignaturesTests.swift in Sources */,
|
||||
@@ -2235,6 +2240,7 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
0CE65E942E041BBE005EBB5A /* MockURLResourceRequester.swift in Sources */,
|
||||
0C1B9FE22DDE290A00F69371 /* BlockModelingUtils.swift in Sources */,
|
||||
0C1B9FE12DDE28BF00F69371 /* DivBuilders.swift in Sources */,
|
||||
9FE7D3262CF753A400BAF071 /* FakeImageHolder.swift in Sources */,
|
||||
|
||||
@@ -61,7 +61,7 @@ public final class LottieExtensionHandler: DivExtensionHandler {
|
||||
)
|
||||
}
|
||||
|
||||
public func getPreloadURLs(div: DivBase) -> [URL] {
|
||||
public func getPreloadURLs(div: DivBase, expressionResolver _: ExpressionResolver) -> [URL] {
|
||||
[Self.getPreloadURL(div: div)].compactMap { $0 }
|
||||
}
|
||||
|
||||
@@ -129,6 +129,8 @@ private struct LottieExtensionParams {
|
||||
if let repeatCount = params["repeat_count"] {
|
||||
if let repeatCountFloat = repeatCount as? Float {
|
||||
self.repeatCount = repeatCountFloat
|
||||
} else if let repeatCountInt = repeatCount as? Int {
|
||||
self.repeatCount = Float(repeatCountInt)
|
||||
} else {
|
||||
DivKitLogger.error("Not valid repeat_count")
|
||||
return nil
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
@testable import DivKit
|
||||
import DivKitTestsSupport
|
||||
import DivKitExtensions
|
||||
import LayoutKit
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
final class LottieExtensionHandlerTests: XCTestCase {
|
||||
private var requester = MockURLResourceRequester()
|
||||
private var factory = MockLottieAnimationFactory()
|
||||
private var expressionResolver = DivBlockModelingContext.default.expressionResolver
|
||||
private lazy var lottieExtensionHandler = LottieExtensionHandler(
|
||||
factory: factory,
|
||||
requester: requester
|
||||
)
|
||||
|
||||
func test_getPreloadURLs() {
|
||||
let lottieURLString = "https://example.com/DivGif9.json"
|
||||
let divWithExtension = divContainer(
|
||||
id: "container_with_extension",
|
||||
extensions: [
|
||||
DivExtension(
|
||||
id: lottieExtensionHandler.id,
|
||||
params: [
|
||||
"lottie_url": lottieURLString,
|
||||
"repeat_count": 2,
|
||||
"repeat_mode": "reverse"
|
||||
]
|
||||
)
|
||||
],
|
||||
items: []
|
||||
)
|
||||
|
||||
let castedExtensionHandler: DivExtensionHandler = lottieExtensionHandler
|
||||
let preloadURLs = castedExtensionHandler.getPreloadURLs(
|
||||
div: divWithExtension.value,
|
||||
expressionResolver: expressionResolver
|
||||
)
|
||||
|
||||
XCTAssertEqual(preloadURLs, [URL(string: lottieURLString)])
|
||||
}
|
||||
}
|
||||
|
||||
private final class MockLottieAnimationFactory: AsyncSourceAnimatableViewFactory {
|
||||
var returnView = MockAnimatableView(frame: .zero)
|
||||
func createAsyncSourceAnimatableView(withMode mode: AnimationRepeatMode, repeatCount count: Float)
|
||||
-> AsyncSourceAnimatableView {
|
||||
returnView
|
||||
}
|
||||
}
|
||||
|
||||
private final class MockAnimatableView: UIView, AsyncSourceAnimatableView {
|
||||
var playCallsCount = 0
|
||||
var receivedSources: [any DivKitExtensions.AnimationSourceType] = []
|
||||
|
||||
func play() {
|
||||
playCallsCount += 1
|
||||
}
|
||||
|
||||
func setSourceAsync(_ source: any DivKitExtensions.AnimationSourceType) async {
|
||||
receivedSources.append(source)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable @_spi(Internal) import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable import DivKit
|
||||
import DivKitTestsSupport
|
||||
import XCTest
|
||||
|
||||
final class DivActionIntentTests: XCTestCase {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable @_spi(Internal) import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable @_spi(Internal) import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable @_spi(Internal) import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable @_spi(Internal) import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable import DivKit
|
||||
import DivKitTestsSupport
|
||||
import Foundation
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable import DivKit
|
||||
import DivKitTestsSupport
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable @_spi(Internal) import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import Serialization
|
||||
import VGSL
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import DivKitTestsSupport
|
||||
import Foundation
|
||||
import VGSL
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
@testable @_spi(Internal) import DivKit
|
||||
@testable import LayoutKit
|
||||
import XCTest
|
||||
import DivKitTestsSupport
|
||||
|
||||
final class CustomFunctionTests: XCTestCase {
|
||||
private let incrementFunction = DivFunction(
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable import DivKit
|
||||
import DivKitTestsSupport
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable import DivKit
|
||||
import DivKitTestsSupport
|
||||
import Serialization
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
+1
@@ -1,5 +1,6 @@
|
||||
@testable import DivKit
|
||||
@testable import LayoutKit
|
||||
import DivKitTestsSupport
|
||||
import Testing
|
||||
import UIKit
|
||||
import VGSL
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
@testable import DivKit
|
||||
import DivKitTestsSupport
|
||||
@testable import LayoutKit
|
||||
import DivKitTestsSupport
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable import DivKit
|
||||
import DivKitTestsSupport
|
||||
import XCTest
|
||||
|
||||
final class DivContainerAccessibilityDescriptionTests: XCTestCase {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@testable import DivKit
|
||||
@testable import LayoutKit
|
||||
import DivKitTestsSupport
|
||||
import XCTest
|
||||
|
||||
final class DivContainerExtensionsTests: XCTestCase {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@testable import DivKit
|
||||
@testable import LayoutKit
|
||||
import DivKitTestsSupport
|
||||
import XCTest
|
||||
|
||||
final class DivDataExtensionsTests: XCTestCase {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable @_spi(Internal) import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@testable import DivKit
|
||||
@testable import LayoutKit
|
||||
import DivKitTestsSupport
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@testable import DivKit
|
||||
@testable import LayoutKit
|
||||
import DivKitTestsSupport
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@testable import DivKit
|
||||
@testable import LayoutKit
|
||||
import DivKitTestsSupport
|
||||
import XCTest
|
||||
|
||||
final class DivSeparatorExtensionsTests: XCTestCase {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@testable import DivKit
|
||||
@testable import LayoutKit
|
||||
import DivKitTestsSupport
|
||||
import XCTest
|
||||
|
||||
final class DivStateExtensionsTests: XCTestCase {
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@testable import DivKit
|
||||
@testable import LayoutKit
|
||||
import DivKitTestsSupport
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@testable import DivKit
|
||||
@testable import LayoutKit
|
||||
import DivKitTestsSupport
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@_spi(Internal) @testable @preconcurrency import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
@testable import DivKit
|
||||
@testable import DivKitExtensions
|
||||
@testable import DivKitTestsSupport
|
||||
import DivKitTestsSupport
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
@@ -381,48 +380,6 @@ final class DivDataResourcesPreloaderTests: XCTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
private final class MockURLResourceRequester: URLResourceRequesting {
|
||||
var requestedURLs: [URL] = []
|
||||
var shouldSucceed = true
|
||||
var customBehavior: ((URL) -> Bool)?
|
||||
|
||||
@MainActor
|
||||
func getDataWithSource(
|
||||
from url: URL,
|
||||
completion: @escaping CompletionHandlerWithSource
|
||||
) -> Cancellable? {
|
||||
requestedURLs.append(url)
|
||||
|
||||
if let customBehavior {
|
||||
if customBehavior(url) {
|
||||
completion(.success(URLRequestResult(data: Data(), source: .network)))
|
||||
} else {
|
||||
completion(.failure(NSError(domain: "test", code: 0)))
|
||||
}
|
||||
} else {
|
||||
if shouldSucceed {
|
||||
completion(.success(URLRequestResult(data: Data(), source: .network)))
|
||||
} else {
|
||||
completion(.failure(NSError(domain: "test", code: 0)))
|
||||
}
|
||||
}
|
||||
|
||||
return CancellableImpl {}
|
||||
}
|
||||
}
|
||||
|
||||
private struct CancellableImpl: Cancellable {
|
||||
private let closure: @Sendable () -> Void
|
||||
|
||||
init(_ closure: @escaping @Sendable () -> Void = {}) {
|
||||
self.closure = closure
|
||||
}
|
||||
|
||||
func cancel() {
|
||||
closure()
|
||||
}
|
||||
}
|
||||
|
||||
private func createDivVideo(id: String, url: String, preloadRequired: Bool) -> Div {
|
||||
divVideo(
|
||||
id: id,
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable @_spi(Internal) import DivKit
|
||||
import DivKitTestsSupport
|
||||
import Foundation
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable @_spi(Internal) import DivKit
|
||||
import DivKitTestsSupport
|
||||
import Foundation
|
||||
import Testing
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable @_spi(Internal) import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import DivKit
|
||||
import DivKitTestsSupport
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import DivKit
|
||||
import DivKitTestsSupport
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@testable import DivKit
|
||||
import DivKitTestsSupport
|
||||
import LayoutKit
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
@testable import DivKit
|
||||
import Foundation
|
||||
@testable import LayoutKit
|
||||
import Foundation
|
||||
import VGSL
|
||||
import XCTest
|
||||
|
||||
func makeBlock(
|
||||
public func makeBlock(
|
||||
_ div: Div,
|
||||
context: DivBlockModelingContext = DivBlockModelingContext(),
|
||||
ignoreErrors: Bool = false,
|
||||
@@ -17,13 +17,13 @@ func makeBlock(
|
||||
return block
|
||||
}
|
||||
|
||||
func separatorBlock() -> Block {
|
||||
public func separatorBlock() -> Block {
|
||||
SeparatorBlock(
|
||||
color: color("#14000000")
|
||||
)
|
||||
}
|
||||
|
||||
func textBlock(
|
||||
public func textBlock(
|
||||
widthTrait: LayoutTrait = .resizable,
|
||||
text: String,
|
||||
path: UIElementPath
|
||||
@@ -38,10 +38,10 @@ func textBlock(
|
||||
}
|
||||
|
||||
extension AccessibilityElement {
|
||||
static let `default` = accessibility(traits: .none, label: nil)
|
||||
public static let `default` = accessibility(traits: .none, label: nil)
|
||||
}
|
||||
|
||||
func accessibility(
|
||||
public func accessibility(
|
||||
traits: AccessibilityElement.Traits = .none,
|
||||
label: String? = nil,
|
||||
identifier: String? = nil,
|
||||
@@ -58,7 +58,7 @@ func accessibility(
|
||||
}
|
||||
|
||||
extension ActionAnimation {
|
||||
static let `default` = ActionAnimation(
|
||||
public static let `default` = ActionAnimation(
|
||||
touchDown: [TransitioningAnimation(
|
||||
kind: .fade,
|
||||
start: 1.0,
|
||||
@@ -79,11 +79,11 @@ extension ActionAnimation {
|
||||
}
|
||||
|
||||
extension UIElementPath {
|
||||
static let root = DivBlockModelingContext.testCardId.path
|
||||
public static let root = DivBlockModelingContext.testCardId.path
|
||||
}
|
||||
|
||||
extension DivAction {
|
||||
func uiAction(
|
||||
public func uiAction(
|
||||
pathSuffix: String
|
||||
) -> UserInterfaceAction? {
|
||||
let pathComponents = pathSuffix.split(separator: "/")
|
||||
@@ -95,7 +95,7 @@ extension DivAction {
|
||||
}
|
||||
}
|
||||
|
||||
func uiAction(
|
||||
public func uiAction(
|
||||
logId: String,
|
||||
path: UIElementPath = .root,
|
||||
url: String
|
||||
@@ -114,7 +114,7 @@ func uiAction(
|
||||
)
|
||||
}
|
||||
|
||||
func divActionPayload(
|
||||
public func divActionPayload(
|
||||
_ json: JSONDictionary,
|
||||
path: UIElementPath = .root,
|
||||
url: String? = nil
|
||||
@@ -131,14 +131,14 @@ func divActionPayload(
|
||||
}
|
||||
|
||||
extension Block {
|
||||
func unwrap<T>() throws -> T {
|
||||
public func unwrap<T>() throws -> T {
|
||||
let wrapperBlock = try XCTUnwrap(self as? WrapperBlock)
|
||||
return try XCTUnwrap(wrapperBlock.child as? T)
|
||||
}
|
||||
}
|
||||
|
||||
extension String {
|
||||
func withTypo(size: CGFloat = 12, weight: DivFontWeight = .regular) -> NSAttributedString {
|
||||
public func withTypo(size: CGFloat = 12, weight: DivFontWeight = .regular) -> NSAttributedString {
|
||||
let typo = Typo(
|
||||
font: DivBlockModelingContext.default.fontProvider.font(weight: weight, size: size)
|
||||
)
|
||||
@@ -146,14 +146,14 @@ extension String {
|
||||
}
|
||||
}
|
||||
|
||||
func color(_ color: String) -> Color {
|
||||
public func color(_ color: String) -> Color {
|
||||
Color.color(withHexString: color)!
|
||||
}
|
||||
|
||||
func url(_ string: String) -> URL {
|
||||
public func url(_ string: String) -> URL {
|
||||
URL(string: string)!
|
||||
}
|
||||
|
||||
func expression<T>(_ expression: String) -> DivKit.Expression<T> {
|
||||
public func expression<T>(_ expression: String) -> DivKit.Expression<T> {
|
||||
.link(ExpressionLink<T>(rawValue: expression)!)
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import Foundation
|
||||
import LayoutKit
|
||||
import VGSL
|
||||
|
||||
func divAction(
|
||||
public func divAction(
|
||||
isEnabled: Bool = true,
|
||||
logId: String = "test",
|
||||
payload: [String: Any]? = nil,
|
||||
@@ -30,7 +30,7 @@ func divAction(
|
||||
)
|
||||
}
|
||||
|
||||
func divData(
|
||||
public func divData(
|
||||
logId: String = DivBlockModelingContext.testCardId.rawValue,
|
||||
states: [DivData.State]
|
||||
) -> DivData {
|
||||
@@ -45,7 +45,7 @@ func divData(
|
||||
)
|
||||
}
|
||||
|
||||
func divData(
|
||||
public func divData(
|
||||
_ div: Div,
|
||||
logId: String = UIElementPath.root.description,
|
||||
stateId: Int = 0
|
||||
@@ -56,7 +56,7 @@ func divData(
|
||||
)
|
||||
}
|
||||
|
||||
func divGifImage(
|
||||
public func divGifImage(
|
||||
accessibility: DivAccessibility? = nil,
|
||||
gifUrl: String,
|
||||
height: DivSize? = nil,
|
||||
@@ -72,7 +72,7 @@ func divGifImage(
|
||||
))
|
||||
}
|
||||
|
||||
func divInput(
|
||||
public func divInput(
|
||||
accessibility: DivAccessibility? = nil,
|
||||
keyboardType: DivInput.KeyboardType? = nil,
|
||||
textVariable: String
|
||||
@@ -84,7 +84,7 @@ func divInput(
|
||||
))
|
||||
}
|
||||
|
||||
func divImage(
|
||||
public func divImage(
|
||||
accessibility: DivAccessibility? = nil,
|
||||
height: DivSize? = nil,
|
||||
id: String? = nil,
|
||||
@@ -116,7 +116,7 @@ func divImage(
|
||||
))
|
||||
}
|
||||
|
||||
func divText(
|
||||
public func divText(
|
||||
accessibility: DivAccessibility? = nil,
|
||||
actions: [DivAction]? = nil,
|
||||
disappearActions: [DivDisappearAction]? = nil,
|
||||
@@ -160,7 +160,7 @@ func divText(
|
||||
))
|
||||
}
|
||||
|
||||
func divSeparator(
|
||||
public func divSeparator(
|
||||
accessibility: DivAccessibility? = nil,
|
||||
actions: [DivAction]? = nil,
|
||||
alpha: CGFloat? = nil,
|
||||
@@ -194,7 +194,7 @@ func divSeparator(
|
||||
))
|
||||
}
|
||||
|
||||
func divContainer(
|
||||
public func divContainer(
|
||||
id: String? = nil,
|
||||
accessibility: DivAccessibility? = nil,
|
||||
actions: [DivAction]? = nil,
|
||||
@@ -262,7 +262,7 @@ func divContainer(
|
||||
))
|
||||
}
|
||||
|
||||
func divGallery(
|
||||
public func divGallery(
|
||||
items: [Div],
|
||||
id: String? = nil
|
||||
) -> Div {
|
||||
@@ -313,7 +313,7 @@ func divGallery(
|
||||
))
|
||||
}
|
||||
|
||||
func divGrid(
|
||||
public func divGrid(
|
||||
columnCount: Int,
|
||||
items: [Div]
|
||||
) -> Div {
|
||||
@@ -367,7 +367,7 @@ func divGrid(
|
||||
))
|
||||
}
|
||||
|
||||
func divPager(
|
||||
public func divPager(
|
||||
items: [Div],
|
||||
layoutMode: DivPagerLayoutMode
|
||||
) -> Div {
|
||||
@@ -418,7 +418,7 @@ func divPager(
|
||||
))
|
||||
}
|
||||
|
||||
func divState(
|
||||
public func divState(
|
||||
divId: String?,
|
||||
id: String? = nil,
|
||||
defaultStateId: Expression<String>? = nil,
|
||||
@@ -466,7 +466,7 @@ func divState(
|
||||
))
|
||||
}
|
||||
|
||||
func divStateState(
|
||||
public func divStateState(
|
||||
div: Div?,
|
||||
stateId: String
|
||||
) -> DivState.State {
|
||||
@@ -479,7 +479,7 @@ func divStateState(
|
||||
)
|
||||
}
|
||||
|
||||
func divTabs(
|
||||
public func divTabs(
|
||||
items: [DivTabs.Item]
|
||||
) -> Div {
|
||||
.divTabs(DivTabs(
|
||||
@@ -529,7 +529,7 @@ func divTabs(
|
||||
))
|
||||
}
|
||||
|
||||
func divTabsItem(
|
||||
public func divTabsItem(
|
||||
div: Div,
|
||||
title: String
|
||||
) -> DivTabs.Item {
|
||||
@@ -540,35 +540,35 @@ func divTabsItem(
|
||||
)
|
||||
}
|
||||
|
||||
func fixedSize(_ value: Int) -> DivSize {
|
||||
public func fixedSize(_ value: Int) -> DivSize {
|
||||
.divFixedSize(DivFixedSize(value: .value(value)))
|
||||
}
|
||||
|
||||
func matchParentSize() -> DivSize {
|
||||
public func matchParentSize() -> DivSize {
|
||||
.divMatchParentSize(DivMatchParentSize())
|
||||
}
|
||||
|
||||
func wrapContentSize() -> DivSize {
|
||||
public func wrapContentSize() -> DivSize {
|
||||
.divWrapContentSize(DivWrapContentSize())
|
||||
}
|
||||
|
||||
func point(x: Double, y: Double) -> DivPoint {
|
||||
public func point(x: Double, y: Double) -> DivPoint {
|
||||
DivPoint(
|
||||
x: DivDimension(value: .value(x)),
|
||||
y: DivDimension(value: .value(y))
|
||||
)
|
||||
}
|
||||
|
||||
func variable(_ name: String, _ value: String) -> DivVariable {
|
||||
public func variable(_ name: String, _ value: String) -> DivVariable {
|
||||
.stringVariable(StringVariable(name: name, value: .value(value)))
|
||||
}
|
||||
|
||||
|
||||
func solidBackground(_ color: RGBAColor) -> DivBackground {
|
||||
public func solidBackground(_ color: RGBAColor) -> DivBackground {
|
||||
.divSolidBackground(DivSolidBackground(color: .value(color)))
|
||||
}
|
||||
|
||||
func divVideo(
|
||||
public func divVideo(
|
||||
id: String? = nil,
|
||||
videoSources: [DivVideoSource],
|
||||
preloadRequired: Bool? = nil,
|
||||
@@ -587,7 +587,7 @@ func divVideo(
|
||||
))
|
||||
}
|
||||
|
||||
func divVideoSource(
|
||||
public func divVideoSource(
|
||||
mimeType: String,
|
||||
url: String? = nil,
|
||||
urlExpression: String? = nil
|
||||
@@ -604,7 +604,7 @@ func divVideoSource(
|
||||
)
|
||||
}
|
||||
|
||||
func divTextImage(
|
||||
public func divTextImage(
|
||||
start: Int = 0,
|
||||
url: String,
|
||||
preloadRequired: Bool? = nil
|
||||
@@ -617,7 +617,7 @@ func divTextImage(
|
||||
)
|
||||
}
|
||||
|
||||
func divImageBackground(
|
||||
public func divImageBackground(
|
||||
imageUrl: String,
|
||||
preloadRequired: Bool? = nil
|
||||
) -> DivBackground {
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
import Foundation
|
||||
import VGSLFundamentals
|
||||
|
||||
public final class MockURLResourceRequester: URLResourceRequesting {
|
||||
public var requestedURLs: [URL] = []
|
||||
public var shouldSucceed = true
|
||||
public var customBehavior: ((URL) -> Bool)?
|
||||
|
||||
public init() {}
|
||||
|
||||
@MainActor
|
||||
public func getDataWithSource(
|
||||
from url: URL,
|
||||
completion: @escaping CompletionHandlerWithSource
|
||||
) -> Cancellable? {
|
||||
requestedURLs.append(url)
|
||||
|
||||
if let customBehavior {
|
||||
if customBehavior(url) {
|
||||
completion(.success(URLRequestResult(data: Data(), source: .network)))
|
||||
} else {
|
||||
completion(.failure(NSError(domain: "test", code: 0)))
|
||||
}
|
||||
} else {
|
||||
if shouldSucceed {
|
||||
completion(.success(URLRequestResult(data: Data(), source: .network)))
|
||||
} else {
|
||||
completion(.failure(NSError(domain: "test", code: 0)))
|
||||
}
|
||||
}
|
||||
|
||||
return CancellableImpl {}
|
||||
}
|
||||
}
|
||||
|
||||
private struct CancellableImpl: Cancellable {
|
||||
private let closure: @Sendable () -> Void
|
||||
|
||||
init(_ closure: @escaping @Sendable () -> Void = {}) {
|
||||
self.closure = closure
|
||||
}
|
||||
|
||||
func cancel() {
|
||||
closure()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user