Files
element-x-ios/Tools/Sourcery/TestablePreviewsDictionary.stencil
Mauro 2d486ece33 Use iOS 26 Observation for Unit and Preview tests. (#5797)
* use observation in unit and preview tests instead of the async stream

* use a parsing approach that is independent of the sourcery annotation

* Fix observation deferred fulfillments not receiving the initial value

Observation's observe only emits transitions, not the value present at subscription time. Drop the leading initial value from the affected transitionValues sequences and assert it directly with #expect instead.

* improved docs
2026-06-30 14:01:08 +02:00

40 lines
1.5 KiB
Plaintext

// swiftlint:disable all
// swiftformat:disable all
import SwiftUI
{% if argument.mainTarget %}
@testable import {{ argument.mainTarget }}
{% 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 %}
enum TestablePreviewsDictionary {
static let dictionary: [String: any PreviewProvider.Type] = {
var dictionary: [String: any PreviewProvider.Type] = [
{% for type in types.types where (type.implements.TestablePreview or type.based.TestablePreview or type|annotated:"TestablePreview") and type.name != "TestablePreview" and not type.attributes.available %}
"{{ type.name }}" : {{ type.name }}.self,
{% endfor %}
]
// Previews carrying an @available attribute (e.g. those observing state through the iOS 26
// Observations-based observe(_:)) can't be referenced unconditionally in this iOS 18 target.
if #available(iOS 26.0, *) {
{% for type in types.types where (type.implements.TestablePreview or type.based.TestablePreview or type|annotated:"TestablePreview") and type.name != "TestablePreview" and type.attributes.available %}
dictionary["{{ type.name }}"] = {{ type.name }}.self
{% endfor %}
}
return dictionary
}()
}
// swiftlint:enable all
// swiftformat:enable all