mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 16:10:20 +00:00
Prefire multiple devices (#2543)
* Update Prefire, setup multiple snapshot devices and languages Squashed commits: [28cb4ae6d] Switch to macos-14, iOS 17 and the iPhone 15 simulator [080fc82cb] Update snapshots [c874ca9c7] Bump Compound and Prefire, reduce perceptual precission to 0.98 [a59b8a54c] Update snapshots after adding iPad and pseudolanguage snapshotting [f30cc3277] Setup multi-language snapshotting [aeb11c7e7] Update prefire template, setup multiple snapshot devices * Update ruby dependencies and fastlane plugins * Bump Compound, switch back to the original prefire - version 2.0.4 * Remove preview test simulator version specifiers
This commit is contained in:
@@ -11,7 +11,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
tests:
|
tests:
|
||||||
name: Tests
|
name: Tests
|
||||||
runs-on: macos-13
|
runs-on: macos-14
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
# When running on develop, use the sha to allow all runs of this workflow to run concurrently.
|
# When running on develop, use the sha to allow all runs of this workflow to run concurrently.
|
||||||
@@ -39,13 +39,6 @@ jobs:
|
|||||||
run:
|
run:
|
||||||
swiftformat --lint .
|
swiftformat --lint .
|
||||||
|
|
||||||
- name: Link to 16.4 Simulators
|
|
||||||
run: |
|
|
||||||
echo "Creating Runtimes folder if needed..."
|
|
||||||
sudo mkdir -p /Library/Developer/CoreSimulator/Profiles/Runtimes
|
|
||||||
echo "Creating symlink of the iOS 16.4 runtime..."
|
|
||||||
sudo ln -s /Applications/Xcode_14.3.1.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime /Library/Developer/CoreSimulator/Profiles/Runtimes/iOS\ 16.4.simruntime
|
|
||||||
|
|
||||||
- name: Run tests
|
- name: Run tests
|
||||||
run: bundle exec fastlane unit_tests
|
run: bundle exec fastlane unit_tests
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
test_configuration:
|
|
||||||
- template_file_path: Tools/Prefire/PreviewTests.stencil
|
|
||||||
- simulator_device: "iPhone14"
|
|
||||||
- required_os: 16
|
|
||||||
@@ -7072,7 +7072,7 @@
|
|||||||
repositoryURL = "https://github.com/BarredEwe/Prefire";
|
repositoryURL = "https://github.com/BarredEwe/Prefire";
|
||||||
requirement = {
|
requirement = {
|
||||||
kind = upToNextMinorVersion;
|
kind = upToNextMinorVersion;
|
||||||
minimumVersion = 1.5.0;
|
minimumVersion = 2.0.4;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
395DE6AE429B7ACC7C7FE31D /* XCRemoteSwiftPackageReference "KZFileWatchers" */ = {
|
395DE6AE429B7ACC7C7FE31D /* XCRemoteSwiftPackageReference "KZFileWatchers" */ = {
|
||||||
@@ -7240,7 +7240,7 @@
|
|||||||
repositoryURL = "https://github.com/element-hq/compound-ios";
|
repositoryURL = "https://github.com/element-hq/compound-ios";
|
||||||
requirement = {
|
requirement = {
|
||||||
kind = revision;
|
kind = revision;
|
||||||
revision = 19c778b6ce0b82601ecdca23ff8d4a7aa41f990f;
|
revision = 19bc4c5cf9c69b7b7aeb9ac8c937c2c81a83e8b1;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
F76A08D0EA29A07A54F4EB4D /* XCRemoteSwiftPackageReference "swift-collections" */ = {
|
F76A08D0EA29A07A54F4EB4D /* XCRemoteSwiftPackageReference "swift-collections" */ = {
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
"kind" : "remoteSourceControl",
|
"kind" : "remoteSourceControl",
|
||||||
"location" : "https://github.com/element-hq/compound-ios",
|
"location" : "https://github.com/element-hq/compound-ios",
|
||||||
"state" : {
|
"state" : {
|
||||||
"revision" : "19c778b6ce0b82601ecdca23ff8d4a7aa41f990f"
|
"revision" : "19bc4c5cf9c69b7b7aeb9ac8c937c2c81a83e8b1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -175,8 +175,8 @@
|
|||||||
"kind" : "remoteSourceControl",
|
"kind" : "remoteSourceControl",
|
||||||
"location" : "https://github.com/BarredEwe/Prefire",
|
"location" : "https://github.com/BarredEwe/Prefire",
|
||||||
"state" : {
|
"state" : {
|
||||||
"revision" : "898a4a9f5d5eb0a0b07adb1a7c89daf0f068b129",
|
"revision" : "608e7992dedc5ee409e59b3580010371ff0cef57",
|
||||||
"version" : "1.5.0"
|
"version" : "2.0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -263,7 +263,7 @@
|
|||||||
{
|
{
|
||||||
"identity" : "swiftui-introspect",
|
"identity" : "swiftui-introspect",
|
||||||
"kind" : "remoteSourceControl",
|
"kind" : "remoteSourceControl",
|
||||||
"location" : "https://github.com/siteline/SwiftUI-Introspect",
|
"location" : "https://github.com/siteline/SwiftUI-Introspect.git",
|
||||||
"state" : {
|
"state" : {
|
||||||
"revision" : "b94da693e57eaf79d16464b8b7c90d09cba4e290",
|
"revision" : "b94da693e57eaf79d16464b8b7c90d09cba4e290",
|
||||||
"version" : "0.9.2"
|
"version" : "0.9.2"
|
||||||
|
|||||||
@@ -176,12 +176,12 @@ struct RoomDetailsEditScreen_Previews: PreviewProvider, TestablePreview {
|
|||||||
RoomDetailsEditScreen(context: viewModel.context)
|
RoomDetailsEditScreen(context: viewModel.context)
|
||||||
}
|
}
|
||||||
.previewDisplayName("Normal")
|
.previewDisplayName("Normal")
|
||||||
.snapshot(delay: 0.1)
|
.snapshot(delay: 0.25)
|
||||||
|
|
||||||
NavigationStack {
|
NavigationStack {
|
||||||
RoomDetailsEditScreen(context: readOnlyViewModel.context)
|
RoomDetailsEditScreen(context: readOnlyViewModel.context)
|
||||||
}
|
}
|
||||||
.previewDisplayName("Read only")
|
.previewDisplayName("Read only")
|
||||||
.snapshot(delay: 0.1)
|
.snapshot(delay: 0.25)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-11
@@ -7,15 +7,17 @@ GIT
|
|||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
CFPropertyList (3.0.6)
|
CFPropertyList (3.0.7)
|
||||||
|
base64
|
||||||
|
nkf
|
||||||
rexml
|
rexml
|
||||||
addressable (2.8.6)
|
addressable (2.8.6)
|
||||||
public_suffix (>= 2.0.2, < 6.0)
|
public_suffix (>= 2.0.2, < 6.0)
|
||||||
artifactory (3.0.15)
|
artifactory (3.0.17)
|
||||||
atomos (0.1.3)
|
atomos (0.1.3)
|
||||||
aws-eventstream (1.3.0)
|
aws-eventstream (1.3.0)
|
||||||
aws-partitions (1.887.0)
|
aws-partitions (1.896.0)
|
||||||
aws-sdk-core (3.191.0)
|
aws-sdk-core (3.191.3)
|
||||||
aws-eventstream (~> 1, >= 1.3.0)
|
aws-eventstream (~> 1, >= 1.3.0)
|
||||||
aws-partitions (~> 1, >= 1.651.0)
|
aws-partitions (~> 1, >= 1.651.0)
|
||||||
aws-sigv4 (~> 1.8)
|
aws-sigv4 (~> 1.8)
|
||||||
@@ -30,6 +32,7 @@ GEM
|
|||||||
aws-sigv4 (1.8.0)
|
aws-sigv4 (1.8.0)
|
||||||
aws-eventstream (~> 1, >= 1.0.2)
|
aws-eventstream (~> 1, >= 1.0.2)
|
||||||
babosa (1.0.4)
|
babosa (1.0.4)
|
||||||
|
base64 (0.2.0)
|
||||||
claide (1.1.0)
|
claide (1.1.0)
|
||||||
colored (1.2)
|
colored (1.2)
|
||||||
colored2 (3.1.2)
|
colored2 (3.1.2)
|
||||||
@@ -115,7 +118,7 @@ GEM
|
|||||||
fastlane-plugin-brew (0.1.1)
|
fastlane-plugin-brew (0.1.1)
|
||||||
fastlane-plugin-browserstack (0.3.2)
|
fastlane-plugin-browserstack (0.3.2)
|
||||||
rest-client (~> 2.0, >= 2.0.2)
|
rest-client (~> 2.0, >= 2.0.2)
|
||||||
fastlane-plugin-sentry (1.18.0)
|
fastlane-plugin-sentry (1.20.0)
|
||||||
os (~> 1.1, >= 1.1.4)
|
os (~> 1.1, >= 1.1.4)
|
||||||
fastlane-plugin-xcconfig (2.0.0)
|
fastlane-plugin-xcconfig (2.0.0)
|
||||||
fastlane-plugin-xcodegen (1.1.0)
|
fastlane-plugin-xcodegen (1.1.0)
|
||||||
@@ -137,12 +140,12 @@ GEM
|
|||||||
google-apis-core (>= 0.11.0, < 2.a)
|
google-apis-core (>= 0.11.0, < 2.a)
|
||||||
google-apis-storage_v1 (0.31.0)
|
google-apis-storage_v1 (0.31.0)
|
||||||
google-apis-core (>= 0.11.0, < 2.a)
|
google-apis-core (>= 0.11.0, < 2.a)
|
||||||
google-cloud-core (1.6.1)
|
google-cloud-core (1.7.0)
|
||||||
google-cloud-env (>= 1.0, < 3.a)
|
google-cloud-env (>= 1.0, < 3.a)
|
||||||
google-cloud-errors (~> 1.0)
|
google-cloud-errors (~> 1.0)
|
||||||
google-cloud-env (1.6.0)
|
google-cloud-env (1.6.0)
|
||||||
faraday (>= 0.17.3, < 3.0)
|
faraday (>= 0.17.3, < 3.0)
|
||||||
google-cloud-errors (1.3.1)
|
google-cloud-errors (1.4.0)
|
||||||
google-cloud-storage (1.47.0)
|
google-cloud-storage (1.47.0)
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
digest-crc (~> 0.4)
|
digest-crc (~> 0.4)
|
||||||
@@ -164,17 +167,19 @@ GEM
|
|||||||
httpclient (2.8.3)
|
httpclient (2.8.3)
|
||||||
jmespath (1.6.2)
|
jmespath (1.6.2)
|
||||||
json (2.7.1)
|
json (2.7.1)
|
||||||
jwt (2.7.1)
|
jwt (2.8.1)
|
||||||
|
base64
|
||||||
mime-types (3.5.2)
|
mime-types (3.5.2)
|
||||||
mime-types-data (~> 3.2015)
|
mime-types-data (~> 3.2015)
|
||||||
mime-types-data (3.2023.1205)
|
mime-types-data (3.2024.0305)
|
||||||
mini_magick (4.12.0)
|
mini_magick (4.12.0)
|
||||||
mini_mime (1.1.5)
|
mini_mime (1.1.5)
|
||||||
multi_json (1.15.0)
|
multi_json (1.15.0)
|
||||||
multipart-post (2.3.0)
|
multipart-post (2.4.0)
|
||||||
nanaimo (0.3.0)
|
nanaimo (0.3.0)
|
||||||
naturally (2.2.1)
|
naturally (2.2.1)
|
||||||
netrc (0.11.0)
|
netrc (0.11.0)
|
||||||
|
nkf (0.2.0)
|
||||||
optparse (0.4.0)
|
optparse (0.4.0)
|
||||||
os (1.1.4)
|
os (1.1.4)
|
||||||
plist (3.7.1)
|
plist (3.7.1)
|
||||||
@@ -196,7 +201,7 @@ GEM
|
|||||||
rubyzip (2.3.2)
|
rubyzip (2.3.2)
|
||||||
security (0.1.3)
|
security (0.1.3)
|
||||||
semantic (1.6.1)
|
semantic (1.6.1)
|
||||||
signet (0.18.0)
|
signet (0.19.0)
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
faraday (>= 0.17.5, < 3.a)
|
faraday (>= 0.17.5, < 3.a)
|
||||||
jwt (>= 1.5, < 3.0)
|
jwt (>= 1.5, < 3.0)
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
test_configuration:
|
||||||
|
- template_file_path: PreviewTests.stencil
|
||||||
|
- simulator_device: "iPhone15,2"
|
||||||
|
- required_os: 17
|
||||||
|
- snapshot_devices:
|
||||||
|
- iPhone 15
|
||||||
|
- iPad
|
||||||
@@ -4,7 +4,6 @@
|
|||||||
import XCTest
|
import XCTest
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
import Prefire
|
import Prefire
|
||||||
|
|
||||||
@testable import SnapshotTesting
|
@testable import SnapshotTesting
|
||||||
#if canImport(AccessibilitySnapshot)
|
#if canImport(AccessibilitySnapshot)
|
||||||
import AccessibilitySnapshot
|
import AccessibilitySnapshot
|
||||||
@@ -12,11 +11,24 @@ import Prefire
|
|||||||
{% if argument.mainTarget %}
|
{% if argument.mainTarget %}
|
||||||
@testable import {{ argument.mainTarget }}
|
@testable import {{ argument.mainTarget }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% for import in argument.imports %}
|
||||||
|
{% if import != "last" %}
|
||||||
|
import {{ import }}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% for import in argument.testableImports %}
|
||||||
|
{% if import != "last" %}
|
||||||
|
@testable import {{ import }}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
class PreviewTests: XCTestCase {
|
class PreviewTests: XCTestCase {
|
||||||
private let deviceConfig: ViewImageConfig = .iPhoneX
|
private let deviceConfig: ViewImageConfig = .iPhoneX
|
||||||
private let simulatorDevice = "{{ argument.simulatorDevice|default:"iPhone15,2" }}"
|
private var simulatorDevice: String?{% if argument.simulatorDevice %} = "{{ argument.simulatorDevice|default:nil }}"{% endif %}
|
||||||
private let requiredOSVersion = {{ argument.simulatorOSVersion|default:"16" }}
|
private var requiredOSVersion: Int?{% if argument.simulatorOSVersion %} = {{ argument.simulatorOSVersion }}{% endif %}
|
||||||
|
private let snapshotDevices: [String]{% if argument.snapshotDevices %} = {{ argument.snapshotDevices|split:"|" }}{% else %} = []{% endif %}
|
||||||
|
|
||||||
|
|
||||||
{% if argument.file %}
|
{% if argument.file %}
|
||||||
|
|
||||||
private var file: StaticString { .init(stringLiteral: "{{ argument.file }}") }
|
private var file: StaticString { .init(stringLiteral: "{{ argument.file }}") }
|
||||||
@@ -29,40 +41,104 @@ class PreviewTests: XCTestCase {
|
|||||||
UIView.setAnimationsEnabled(false)
|
UIView.setAnimationsEnabled(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - PreviewProvider
|
||||||
|
|
||||||
{% for type in types.types where (type.implements.PrefireProvider or type.based.PrefireProvider or type|annotated:"PrefireProvider") and type.name != "TestablePreview" %}
|
{% for type in types.types where (type.implements.PrefireProvider or type.based.PrefireProvider or type|annotated:"PrefireProvider") and type.name != "TestablePreview" %}
|
||||||
func test_{{ type.name|lowerFirstLetter|replace:"_Previews", "" }}() {
|
func test_{{ type.name|lowerFirstLetter|replace:"_Previews", "" }}() {
|
||||||
for preview in {{ type.name }}._allPreviews {
|
for preview in {{ type.name }}._allPreviews {
|
||||||
assertSnapshots(matching: preview)
|
assertSnapshots(matching: preview)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
{%- if not forloop.last %}
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
{% if argument.previewsMacros %}
|
||||||
|
// MARK: - Macros
|
||||||
|
|
||||||
|
{{ argument.previewsMacros }}
|
||||||
|
{% endif %}
|
||||||
// MARK: Private
|
// MARK: Private
|
||||||
|
|
||||||
private func assertSnapshots(matching preview: _Preview, testName: String = #function) {
|
private func assertSnapshots(matching preview: _Preview, testName: String = #function) {
|
||||||
let isScreen = preview.layout == .device
|
guard !snapshotDevices.isEmpty else {
|
||||||
let device = preview.device?.snapshotDevice() ?? deviceConfig
|
if let failure = assertSnapshots(matching: AnyView(preview.content),
|
||||||
|
name: preview.displayName,
|
||||||
|
isScreen: preview.layout == .device,
|
||||||
|
device: preview.device?.snapshotDevice() ?? deviceConfig,
|
||||||
|
testName: testName) {
|
||||||
|
XCTFail(failure)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for deviceName in snapshotDevices {
|
||||||
|
guard var device = PreviewDevice(rawValue: deviceName).snapshotDevice() else {
|
||||||
|
fatalError("Unknown device name: \(deviceName)")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ignore specific device safe area
|
||||||
|
device.safeArea = .zero
|
||||||
|
|
||||||
|
// Ignore specific device display scale
|
||||||
|
let traits = UITraitCollection(displayScale: 2.0)
|
||||||
|
|
||||||
|
if let failure = assertSnapshots(matching: AnyView(preview.content),
|
||||||
|
name: preview.displayName,
|
||||||
|
isScreen: preview.layout == .device,
|
||||||
|
device: device,
|
||||||
|
testName: testName + deviceName + "-" + localeCode,
|
||||||
|
traits: traits) {
|
||||||
|
XCTFail(failure)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var localeCode: String {
|
||||||
|
if UserDefaults.standard.bool(forKey: "NSDoubleLocalizedStrings") {
|
||||||
|
return "pseudo"
|
||||||
|
}
|
||||||
|
return languageCode + "-" + regionCode
|
||||||
|
}
|
||||||
|
|
||||||
|
private var languageCode: String {
|
||||||
|
Locale.current.language.languageCode?.identifier ?? ""
|
||||||
|
}
|
||||||
|
|
||||||
|
private var regionCode: String {
|
||||||
|
Locale.current.language.region?.identifier ?? ""
|
||||||
|
}
|
||||||
|
|
||||||
|
private func assertSnapshots(matching view: AnyView,
|
||||||
|
name: String?, isScreen: Bool,
|
||||||
|
device: ViewImageConfig,
|
||||||
|
testName: String = #function,
|
||||||
|
traits: UITraitCollection = .init()) -> String? {
|
||||||
var delay: TimeInterval = 0
|
var delay: TimeInterval = 0
|
||||||
var precision: Float = 1
|
var precision: Float = 1
|
||||||
|
var perceptualPrecision: Float = 1
|
||||||
|
|
||||||
let view = preview.content
|
let view = view
|
||||||
.onPreferenceChange(DelayPreferenceKey.self) { delay = $0 }
|
.onPreferenceChange(DelayPreferenceKey.self) { delay = $0 }
|
||||||
.onPreferenceChange(PrecisionPreferenceKey.self) { precision = $0 }
|
.onPreferenceChange(PrecisionPreferenceKey.self) { precision = $0 }
|
||||||
|
.onPreferenceChange(PerceptualPrecisionPreferenceKey.self) { perceptualPrecision = $0 }
|
||||||
|
|
||||||
let matchingView = isScreen ? AnyView(view) : AnyView(view
|
let matchingView = isScreen ? AnyView(view) : AnyView(view
|
||||||
.frame(width: device.size?.width)
|
.frame(width: device.size?.width)
|
||||||
.fixedSize(horizontal: false, vertical: true)
|
.fixedSize(horizontal: false, vertical: true)
|
||||||
)
|
)
|
||||||
|
|
||||||
let failure = verifySnapshot(of: matchingView,
|
let failure = verifySnapshot(
|
||||||
as: .prefireImage(precision: { precision }, duration: { delay }, layout: isScreen ? .device(config: device) : .sizeThatFits),
|
of: matchingView,
|
||||||
named: preview.displayName{% if argument.file %},
|
as: .prefireImage(precision: { precision },
|
||||||
file: file{% endif %},
|
perceptualPrecision: { perceptualPrecision },
|
||||||
testName: testName)
|
duration: { delay },
|
||||||
|
layout: isScreen ? .device(config: device) : .sizeThatFits,
|
||||||
if let failure {
|
traits: traits),
|
||||||
XCTFail(failure)
|
named: name{% if argument.file %},
|
||||||
}
|
file: file{% endif %},
|
||||||
|
testName: testName
|
||||||
|
)
|
||||||
|
|
||||||
#if canImport(AccessibilitySnapshot)
|
#if canImport(AccessibilitySnapshot)
|
||||||
let vc = UIHostingController(rootView: matchingView)
|
let vc = UIHostingController(rootView: matchingView)
|
||||||
@@ -70,27 +146,28 @@ class PreviewTests: XCTestCase {
|
|||||||
assertSnapshot(
|
assertSnapshot(
|
||||||
matching: vc,
|
matching: vc,
|
||||||
as: .wait(for: delay, on: .accessibilityImage(showActivationPoints: .always)),
|
as: .wait(for: delay, on: .accessibilityImage(showActivationPoints: .always)),
|
||||||
named: preview.displayName.map { $0 + ".accessibility" }{% if argument.file %},
|
named: name.flatMap { $0 + ".accessibility" }{% if argument.file %},
|
||||||
file: file{% endif %},
|
file: file{% endif %},
|
||||||
testName: testName
|
testName: testName
|
||||||
)
|
)
|
||||||
#endif
|
#endif
|
||||||
|
return failure
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Check environments to avoid problems with snapshots on different devices or OS.
|
/// Check environments to avoid problems with snapshots on different devices or OS.
|
||||||
private func checkEnvironments() {
|
private func checkEnvironments() {
|
||||||
let deviceModel = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"]
|
if let simulatorDevice {
|
||||||
let osVersion = ProcessInfo().operatingSystemVersion
|
let deviceModel = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"]
|
||||||
guard deviceModel?.contains(simulatorDevice) ?? false else {
|
guard deviceModel?.contains(simulatorDevice) ?? false else {
|
||||||
fatalError("Switch to using \(simulatorDevice) for these tests.")
|
fatalError("Switch to using \(simulatorDevice) for these tests.")
|
||||||
}
|
}
|
||||||
|
|
||||||
guard osVersion.majorVersion == requiredOSVersion else {
|
|
||||||
fatalError("Switch to iOS \(requiredOSVersion) for these tests.")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
guard UITraitCollection.current.userInterfaceStyle == .light else {
|
if let requiredOSVersion {
|
||||||
fatalError("Switch to light mode for these tests.")
|
let osVersion = ProcessInfo().operatingSystemVersion
|
||||||
|
guard osVersion.majorVersion == requiredOSVersion else {
|
||||||
|
fatalError("Switch to iOS \(requiredOSVersion) for these tests.")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -100,7 +177,7 @@ class PreviewTests: XCTestCase {
|
|||||||
private extension PreviewDevice {
|
private extension PreviewDevice {
|
||||||
func snapshotDevice() -> ViewImageConfig? {
|
func snapshotDevice() -> ViewImageConfig? {
|
||||||
switch rawValue {
|
switch rawValue {
|
||||||
case "iPhone 14", "iPhone 13", "iPhone 12", "iPhone 11", "iPhone 10":
|
case "iPhone 15", "iPhone 14", "iPhone 13", "iPhone 12", "iPhone 11", "iPhone 10":
|
||||||
return .iPhoneX
|
return .iPhoneX
|
||||||
case "iPhone 6", "iPhone 6s", "iPhone 7", "iPhone 8":
|
case "iPhone 6", "iPhone 6s", "iPhone 7", "iPhone 8":
|
||||||
return .iPhone8
|
return .iPhone8
|
||||||
@@ -108,6 +185,14 @@ private extension PreviewDevice {
|
|||||||
return .iPhone8Plus
|
return .iPhone8Plus
|
||||||
case "iPhone SE (1st generation)", "iPhone SE (2nd generation)":
|
case "iPhone SE (1st generation)", "iPhone SE (2nd generation)":
|
||||||
return .iPhoneSe
|
return .iPhoneSe
|
||||||
|
case "iPad":
|
||||||
|
return .iPad10_2
|
||||||
|
case "iPad Mini":
|
||||||
|
return .iPadMini
|
||||||
|
case "iPad Pro 11":
|
||||||
|
return .iPadPro11
|
||||||
|
case "iPad Pro 12.9":
|
||||||
|
return .iPadPro12_9
|
||||||
default: return nil
|
default: return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -117,6 +202,7 @@ private extension Snapshotting where Value: SwiftUI.View, Format == UIImage {
|
|||||||
static func prefireImage(
|
static func prefireImage(
|
||||||
drawHierarchyInKeyWindow: Bool = false,
|
drawHierarchyInKeyWindow: Bool = false,
|
||||||
precision: @escaping () -> Float,
|
precision: @escaping () -> Float,
|
||||||
|
perceptualPrecision: @escaping () -> Float,
|
||||||
duration: @escaping () -> TimeInterval,
|
duration: @escaping () -> TimeInterval,
|
||||||
layout: SwiftUISnapshotLayout = .sizeThatFits,
|
layout: SwiftUISnapshotLayout = .sizeThatFits,
|
||||||
traits: UITraitCollection = .init()
|
traits: UITraitCollection = .init()
|
||||||
@@ -135,7 +221,7 @@ private extension Snapshotting where Value: SwiftUI.View, Format == UIImage {
|
|||||||
config = .init(safeArea: .zero, size: size, traits: traits)
|
config = .init(safeArea: .zero, size: size, traits: traits)
|
||||||
}
|
}
|
||||||
|
|
||||||
return SimplySnapshotting<UIImage>(pathExtension: "png", diffing: .prefireImage(precision: precision, scale: traits.displayScale))
|
return SimplySnapshotting<UIImage>(pathExtension: "png", diffing: .prefireImage(precision: precision, perceptualPrecision: perceptualPrecision, scale: traits.displayScale))
|
||||||
.asyncPullback { view in
|
.asyncPullback { view in
|
||||||
var config = config
|
var config = config
|
||||||
|
|
||||||
@@ -176,7 +262,7 @@ private extension Snapshotting where Value: SwiftUI.View, Format == UIImage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private extension Diffing where Value == UIImage {
|
private extension Diffing where Value == UIImage {
|
||||||
static func prefireImage(precision: @escaping () -> Float, scale: CGFloat?) -> Diffing {
|
static func prefireImage(precision: @escaping () -> Float, perceptualPrecision: @escaping () -> Float, scale: CGFloat?) -> Diffing {
|
||||||
lazy var originalDiffing = Diffing.image(precision: precision(), perceptualPrecision: 0.98, scale: scale)
|
lazy var originalDiffing = Diffing.image(precision: precision(), perceptualPrecision: 0.98, scale: scale)
|
||||||
return Diffing(
|
return Diffing(
|
||||||
toData: { originalDiffing.toData($0) },
|
toData: { originalDiffing.toData($0) },
|
||||||
@@ -2,9 +2,26 @@
|
|||||||
"configurations" : [
|
"configurations" : [
|
||||||
{
|
{
|
||||||
"id" : "D789E5F1-30B8-4A23-B20E-281ACE05CFD6",
|
"id" : "D789E5F1-30B8-4A23-B20E-281ACE05CFD6",
|
||||||
"name" : "Default",
|
"name" : "English",
|
||||||
"options" : {
|
"options" : {
|
||||||
|
"language" : "en",
|
||||||
|
"locationScenario" : {
|
||||||
|
"identifier" : "London, England",
|
||||||
|
"referenceType" : "built-in"
|
||||||
|
},
|
||||||
|
"region" : "GB"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id" : "059C4F1C-EAB6-4D96-BA8F-30DF92A365E9",
|
||||||
|
"name" : "Pseudolanguage",
|
||||||
|
"options" : {
|
||||||
|
"language" : "IDELaunchSchemeLanguageDoubleLocalizedStrings",
|
||||||
|
"locationScenario" : {
|
||||||
|
"identifier" : "London, England",
|
||||||
|
"referenceType" : "built-in"
|
||||||
|
},
|
||||||
|
"region" : "DE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:c7eca90ff3c9a34106fa556be1a0b865695e30b3753bd7add22e686d9ea258c6
|
||||||
|
size 167818
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:2fb30d84c0853cbab1341218d256e42c64d3f9388e9b51fe572c1cf3d44e4270
|
||||||
|
size 235706
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:022549154cb0f9a9d6d828b592251e787d04b871f01c05f0133b8bda66a7e4c0
|
||||||
|
size 114860
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a12aa0931a0e8428e1db8f70c79fb84af1e5aa5ff0c14d3553154f5e7b6ee56c
|
||||||
|
size 182408
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:c374de7541c3218ed8988adc086265a0c1e4cf7fe73461068ef79356c0bfaae0
|
|
||||||
size 138506
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:70fcd44d149c0c7633fe2bee0ba85f3ae81d1fedd801a66239f0d1307909a430
|
||||||
|
size 173623
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:5eb23616fd2661ac5a2990e0dfef92c504da2726db2138222b88fba79fcd7500
|
||||||
|
size 267411
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:9be44c03d825f3650984e0cfd0540915913f896951acd0d39991f9843371c111
|
||||||
|
size 122394
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:28cffcec20c859af14d5e018c63da99c3014375d56ffd30751c15846f823f031
|
||||||
|
size 200260
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:dadb1c1c336e0a8a74218bfc0b8d2b6d5e82e02b78489dd7c269ca7be53842db
|
|
||||||
size 142673
|
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:00901d81bcf6162af7818cac12604d49d47d700ae98fe9f263aec7d8664c7d96
|
||||||
|
size 149648
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:b431c7382f2bd6169445dd6eb57985e81b052c296333b99ec90f9b4bc2cc7a92
|
||||||
|
size 184609
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:25ec6698fbca73ff83f88300ed333a050aef317f388ce71fc6476596c123853d
|
||||||
|
size 104872
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:d117add9e8bf7b4400f03dd33bb0171917f6046e4c296bc5e122b92de64e84aa
|
||||||
|
size 139693
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:0ff828f5d649ccf1a46d0b7a126eea8d4754f997e8e30bffc6163c9d90aab62c
|
|
||||||
size 127416
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:bfa36c329639b7bd53482c4066a37743160839bd9a4debe3de9cfdb80883e961
|
||||||
|
size 115021
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:95ea5891cadd570a9dfd69fd1ff1282f3b91c688f63b7e78443b76ecc27109e4
|
||||||
|
size 152680
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:b6c0168a64d2438a4a11c031845dd70401758c91b507617a8960eba73fa4efd8
|
||||||
|
size 68382
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:b1ea1685762aa0e0f05b5c974a069e3747aba7469c83b0ab754a1f69193e6418
|
||||||
|
size 98385
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:85b985d45867e305258e43cf7181d74d5be39258d68f3484731e4c2bdc3ea2da
|
|
||||||
size 93646
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:86e1421b4be07786d755bd195b59f2175d8694a45a9c575d47cbd600b606a09e
|
||||||
|
size 135685
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:5f7e77738f7863830162825f0eb3b5c12edb20700820c2897aba02608aad391e
|
||||||
|
size 166823
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:ae2dcb5510d49106cfdfa8a9edb46e885d343f83b73dc5b8a088a26a99738335
|
||||||
|
size 91052
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:79a196f4288fe6fb3cc4ad9ba80ddd4bbe676fe0325f3cc4272ebbd3d7ed72b1
|
||||||
|
size 116741
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:6d8b859217f475cd3477e96e8f501662d7c288d731800112d97af0d8c7718273
|
|
||||||
size 129515
|
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:5140ad4c2e87cedd06778a7dee016da2357db9bf4d52cb503f9e3d2bc363d905
|
||||||
|
size 117569
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:f9922d84c272da0d0df45dc37b5a391bf654ab73024159148d80afaa94c69fe3
|
||||||
|
size 133736
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:99821a8646ec4494d5faf8e1027ff3af755fd57ba0c86789c8c294ee1d0447a9
|
||||||
|
size 159121
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:3ddc6a03294746a12c7072a9f85f7af9296ca085a2108107ba1df4664dd669c4
|
||||||
|
size 178130
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:2e3efc828ed17b5860d525801af71eb9f3b77a89d3b1e8d296199a44805d28de
|
||||||
|
size 74117
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:19688b95f90db29ff6f604c56dfcda7e571f360a5dd121594bcf2b000559e3d7
|
||||||
|
size 85161
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:956c62fe195c949834b198703e1a7661b859ba6b509815fcecbd7200bf6d801f
|
||||||
|
size 113704
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:1d1e5d4ff7af3faabe400cd75e4621df01a7e6bec1dca29a5a407f3951810e23
|
||||||
|
size 132567
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:daa2048ba6399cff083bc56e088c5b1581cb24aafc8a337d3c430abc4f726627
|
|
||||||
size 100719
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:95b97cb16f44b790b415d87301b440ab8d916886c16a964ef46337fc4440ff75
|
|
||||||
size 112640
|
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:39a6378f7df6c01583babab0b71bac767f97fa37905f2d867d0a8904d7e9acdd
|
||||||
|
size 122499
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:55e0c5e851d041da806f13a65b5d1b0c1161a3b71941db9cc6e9a8723bf4510f
|
||||||
|
size 124974
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:640a83ceb101623de31fd268475af5b9059c7a2ca7a8f7aa8199fb7daef5a939
|
||||||
|
size 100288
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a1bbe9c2e6a8fb461ea4aaa0624f5f73c4465072b598d5aafd053df719eb5610
|
||||||
|
size 98946
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:4ce96b100be97ab727d12dd40fa830e45c3273cde01109db36edb2948cb0f23b
|
||||||
|
size 169765
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:8674d2c5605782b44e429817a872f828465efa8fd0efed8da84fa6e1502a4c3b
|
||||||
|
size 171910
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:5de5005d6e79e1d8bbc85ec321df1978098c1caa08d951eb600e50348101f9b3
|
||||||
|
size 114059
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:65ae23a0ac8ec3fe8ba1e8492c9347d0a0e57de0c2b1d1b84507ec9f0058a3e1
|
||||||
|
size 113353
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:854578a7bf75adaad847dcf733ad364670d0b5c601f3c767c26a1f477f67e2a2
|
||||||
|
size 80094
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:d09086b13a697b7ce3e112aebec1c8fcaa07143e7d24d6b6fcae8b12e4844899
|
||||||
|
size 82078
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:77162b478466530aa5673acca394d3b34b36174a486abc2aa78802b63dcccc04
|
||||||
|
size 57653
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:c5de6d19acc089cea0d13048ea24ad2bdfbf84474f99469c97ad46f7a2135b58
|
||||||
|
size 56491
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:51f1498af1600bd16c2ff63d26a241e0eed0279576bf7f7d063d2d8752bd1b90
|
||||||
|
size 124281
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:332349a7e1b08546476638d82703d6658193ff36931f4eb105cac8df4d20f274
|
||||||
|
size 126046
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e79c31390ca36a329d1bebaa344a2aaaa16325d128c8c38275bc90a1b1da5047
|
||||||
|
size 70183
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a338698467bdd325c3ac3e9ab714bcf3dd45f4f0cc1d4cb9cc7ace6a5c802237
|
||||||
|
size 69005
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:fc42e53ebad66196b3dac9a0d3be487b064deafa75dd4a76aae6d4bf6b7b9cca
|
|
||||||
size 105399
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:37dc958d49a8f2cf05422d6334566684073d45bcd7bfed775bde0baeb1236bde
|
|
||||||
size 105681
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:328561b6398a9933313f2c511b6dbeedb3a32219f5df2f04e5d3f4d758e3e697
|
|
||||||
size 85677
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:992d6bf4555a16f2456a93d46f013c9abf4d817b03d2a90ea3ea8cff4be2a550
|
|
||||||
size 84232
|
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:f9fb8d94bfa8533cfb42bbcfa9dcb5abfa61f1ccf74adca0ea9f902310bbbb53
|
||||||
|
size 108769
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:32b935a10ffce63ddeccd817c7439ae9e79d8c732698d886638483e6cb3dce54
|
||||||
|
size 97696
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:d08caa830148a6cde48cbce58769934c8d8d6b9a759b7eeabafda110c59a9162
|
||||||
|
size 101336
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:b82e5015a7c1d4217cf57ffd9dec598de325ab925489097ea870f75f2437d789
|
||||||
|
size 138109
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:bfd4175b3c9cdbe6f92bc9fd68d2760ac122b92de8d2cf9909db816f00475e71
|
||||||
|
size 117414
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:70d6145bbe005041218aa7e6ed0bc7c9be34480c5fff783500f368d176db2ebc
|
||||||
|
size 123473
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:8550ac5e218bcd29ecf4e1b7c570046280f5bab447be47f99bc8d4a3d090f443
|
||||||
|
size 60872
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:2e2ed1976b415e39c28f13ee7b48c8ab2850da2e461f2561048415a9d5614763
|
||||||
|
size 50446
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:8495eb3332ec93bb27b08eadb2f163c2fb648523e39e5637ebce043e884a316f
|
||||||
|
size 54454
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:4d856dc741b5d93f0687a3f6f99f348307c13c3dde47c90933e619820b8da175
|
||||||
|
size 86909
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:3b5861a69bdec28fb65f118528af9615446c24e14da6a07e91cfb8b6292ae955
|
||||||
|
size 69225
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:8279de468b0d1757829e2c1a57c9d98d894e55cb089121a9b353e4ea7bfbfdad
|
||||||
|
size 75720
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:905d8d16cfce1540a91a3c8ef7d4295b844d2aab4c3ed3035230277acb56e228
|
|
||||||
size 94357
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:f918886d8da2987f6ae26762267557ce2f7d7f0b02ce985de56caa3fb7ee305c
|
|
||||||
size 83101
|
|
||||||
-3
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:08af67d397dafe03f60b36e2d1650a9031c12041ce5e015f6c2f81af4e9731fa
|
|
||||||
size 88510
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:c7f0fd9b44f02c77dd16eb42923bf40a42970f384ca9b8d61f6474a0083388ce
|
||||||
|
size 82339
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e28312355d30b5bf3473ee327ba84a622a94af9bdcb9dd1f4435b356b52fc45d
|
||||||
|
size 81405
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:c7f0fd9b44f02c77dd16eb42923bf40a42970f384ca9b8d61f6474a0083388ce
|
||||||
|
size 82339
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e28312355d30b5bf3473ee327ba84a622a94af9bdcb9dd1f4435b356b52fc45d
|
||||||
|
size 81405
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:c4d662451a74318edb71684b01b9d79b388f37e977e5dcb459c71e5ddd645b29
|
||||||
|
size 41108
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:4d28917da204938efb19eab7a37876b1c85a838c76771fa844504018501059bc
|
||||||
|
size 39218
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:c4d662451a74318edb71684b01b9d79b388f37e977e5dcb459c71e5ddd645b29
|
||||||
|
size 41108
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:4d28917da204938efb19eab7a37876b1c85a838c76771fa844504018501059bc
|
||||||
|
size 39218
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:b26ac0a837243d801ad91fa6b9d79cc880b0001c9940a467c126c0e51eaeb1bf
|
|
||||||
size 68867
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:d1214de5c36335a1e6bf8b8839b028e7a7d2ea31cfdbcdbae901470f2fed1447
|
|
||||||
size 66226
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e397b937f7f407afccd1b6b98e67ca3c15d743a607c370713f8486d7cf215fa3
|
||||||
|
size 74639
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:c2eddb648a0298d35c9ed697aefaf89ce609f58c0d3ba9fdb0b2c1cd892594fd
|
||||||
|
size 123637
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e397b937f7f407afccd1b6b98e67ca3c15d743a607c370713f8486d7cf215fa3
|
||||||
|
size 74639
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:c2eddb648a0298d35c9ed697aefaf89ce609f58c0d3ba9fdb0b2c1cd892594fd
|
||||||
|
size 123637
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:012ed47b68467b49ba5824c021f8b4ae8a0c2eea5dc5477f5b52ce69b185175b
|
||||||
|
size 51382
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e02beede3f2a35a44b403435c8634d20cc9a120141dd7973f158c3c755914247
|
||||||
|
size 73050
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:012ed47b68467b49ba5824c021f8b4ae8a0c2eea5dc5477f5b52ce69b185175b
|
||||||
|
size 51382
|
||||||
+3
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e02beede3f2a35a44b403435c8634d20cc9a120141dd7973f158c3c755914247
|
||||||
|
size 73050
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:7833be660342b496d8c652c0351ef87746844a57bff98b708e08405c37518a92
|
|
||||||
size 64979
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:4a2018e28af9bff5d97c3a49fc824ba47f648987e7ed7d7e4af56041db872219
|
|
||||||
size 130410
|
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:ff896f598f8727e98beeec6b16eb72f939c32cd70aa087b6687e8334878b358e
|
||||||
|
size 176633
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user