Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add @dynamicMemberLookup to ObservableType and SharedSequenceConvertiblebType #2068

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
All notable changes to this project will be documented in this file.

---
* Adds keyPath based `@dynamicMemberLookup` to `ObservableType` and `SharedSequenceConvertibleType` to allow
easier attribute mapping

## [5.0.1](https://github.com/ReactiveX/RxSwift/releases/tag/5.0.1)

* Reverts Carthage integration from using static to dynamic libraries. #1960
Expand Down
47 changes: 44 additions & 3 deletions Rx.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@
54700CA11CE37E1900EF3A8F /* UINavigationItem+RxTests.swift.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54700C9E1CE37D1000EF3A8F /* UINavigationItem+RxTests.swift.swift */; };
54D2138E1CE0824E0028D5B4 /* UINavigationItem+Rx.swift in Sources */ = {isa = PBXBuildFile; fileRef = 54D2138C1CE081890028D5B4 /* UINavigationItem+Rx.swift */; };
601AE3DA1EE24E4F00617386 /* SwiftSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 601AE3D91EE24E4F00617386 /* SwiftSupport.swift */; };
60AFEDCA232DCCE3007BD1E3 /* Observable+DynamicMemberLookupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60AFEDC7232DCC96007BD1E3 /* Observable+DynamicMemberLookupTests.swift */; };
60AFEDCB232DCCE4007BD1E3 /* Observable+DynamicMemberLookupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60AFEDC7232DCC96007BD1E3 /* Observable+DynamicMemberLookupTests.swift */; };
60AFEDCC232DCCE5007BD1E3 /* Observable+DynamicMemberLookupTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60AFEDC7232DCC96007BD1E3 /* Observable+DynamicMemberLookupTests.swift */; };
6B9CA56B202A1F44002C2D11 /* KeyPathBinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B9CA568202A1F43002C2D11 /* KeyPathBinder.swift */; };
6B9CA56E202A206A002C2D11 /* KeyPathBinder+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B9CA56D202A1F96002C2D11 /* KeyPathBinder+RxTests.swift */; };
6B9CA56F202A206B002C2D11 /* KeyPathBinder+RxTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B9CA56D202A1F96002C2D11 /* KeyPathBinder+RxTests.swift */; };
Expand Down Expand Up @@ -959,6 +962,7 @@
54700C9E1CE37D1000EF3A8F /* UINavigationItem+RxTests.swift.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UINavigationItem+RxTests.swift.swift"; sourceTree = "<group>"; };
54D2138C1CE081890028D5B4 /* UINavigationItem+Rx.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UINavigationItem+Rx.swift"; sourceTree = "<group>"; };
601AE3D91EE24E4F00617386 /* SwiftSupport.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftSupport.swift; sourceTree = "<group>"; };
60AFEDC7232DCC96007BD1E3 /* Observable+DynamicMemberLookupTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Observable+DynamicMemberLookupTests.swift"; sourceTree = "<group>"; };
6B9CA568202A1F43002C2D11 /* KeyPathBinder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyPathBinder.swift; sourceTree = "<group>"; };
6B9CA56D202A1F96002C2D11 /* KeyPathBinder+RxTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KeyPathBinder+RxTests.swift"; sourceTree = "<group>"; };
7EDBAEAB1C89B1A5006CBE67 /* UITabBarItem+RxTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UITabBarItem+RxTests.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1262,7 +1266,7 @@
C85B01681DB2ACAF006043C3 /* Platform.Linux.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Platform.Linux.swift; sourceTree = "<group>"; };
C85B01721DB2ACF2006043C3 /* Platform.Darwin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Platform.Darwin.swift; sourceTree = "<group>"; };
C85B01731DB2ACF2006043C3 /* Platform.Linux.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Platform.Linux.swift; sourceTree = "<group>"; };
C85BA04B1C3878740075D68E /* PerformanceTests.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; name = PerformanceTests.app; path = Microoptimizations.app; sourceTree = BUILT_PRODUCTS_DIR; };
C85BA04B1C3878740075D68E /* Microoptimizations.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Microoptimizations.app; sourceTree = BUILT_PRODUCTS_DIR; };
C85E6FBB1F52FF4F00C5681E /* Signal.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Signal.swift; sourceTree = "<group>"; };
C85E6FBD1F53025700C5681E /* SchedulerType+SharedSequence.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "SchedulerType+SharedSequence.swift"; sourceTree = "<group>"; };
C86781471DB8119900B2029A /* Bag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bag.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1974,6 +1978,7 @@
C820A9D11EB50B0900D431BC /* Observable+GroupByTests.swift */,
C820A9691EB4F64800D431BC /* Observable+JustTests.swift */,
C820A9B51EB5081400D431BC /* Observable+MapTests.swift */,
60AFEDC7232DCC96007BD1E3 /* Observable+DynamicMemberLookupTests.swift */,
C820A9F91EB510D500D431BC /* Observable+MaterializeTests.swift */,
C820A9991EB5001C00D431BC /* Observable+MergeTests.swift */,
C820A9551EB4ED7C00D431BC /* Observable+MulticastTests.swift */,
Expand Down Expand Up @@ -2397,7 +2402,7 @@
C83508C31C386F6F0027C24C /* AllTests-iOS.xctest */,
C83509841C38740E0027C24C /* AllTests-tvOS.xctest */,
C83509941C38742C0027C24C /* AllTests-macOS.xctest */,
C85BA04B1C3878740075D68E /* PerformanceTests.app */,
C85BA04B1C3878740075D68E /* Microoptimizations.app */,
C8E8BA551E2C181A00A4AC2C /* Benchmarks.xctest */,
A2897D53225CA1E7004EA481 /* RxRelay.framework */,
);
Expand Down Expand Up @@ -2643,7 +2648,7 @@
);
name = Microoptimizations;
productName = PerformanceTests;
productReference = C85BA04B1C3878740075D68E /* PerformanceTests.app */;
productReference = C85BA04B1C3878740075D68E /* Microoptimizations.app */;
productType = "com.apple.product-type.application";
};
C88FA4FD1C25C44800CCFEA4 /* RxTest */ = {
Expand Down Expand Up @@ -3135,6 +3140,7 @@
C820A98A1EB4FBD600D431BC /* Observable+CatchTests.swift in Sources */,
C835093A1C38706E0027C24C /* RuntimeStateSnapshot.swift in Sources */,
C8561B661DFE1169005E97F1 /* ExampleTests.swift in Sources */,
60AFEDCA232DCCE3007BD1E3 /* Observable+DynamicMemberLookupTests.swift in Sources */,
C86B1E221D42BF5200130546 /* SchedulerTests.swift in Sources */,
C820A9D61EB50C5C00D431BC /* Observable+DistinctUntilChangedTests.swift in Sources */,
C820A9FE1EB5110E00D431BC /* Observable+DematerializeTests.swift in Sources */,
Expand Down Expand Up @@ -3275,6 +3281,7 @@
C8C4F1881DE9DF0200003FA7 /* UITableView+RxTests.swift in Sources */,
C820A9FF1EB5110E00D431BC /* Observable+DematerializeTests.swift in Sources */,
1E9DA0C622006858000EB80A /* Synchronized.swift in Sources */,
60AFEDCB232DCCE4007BD1E3 /* Observable+DynamicMemberLookupTests.swift in Sources */,
C83509EE1C3875580027C24C /* Observable.Extensions.swift in Sources */,
C83509BD1C38750D0027C24C /* ControlPropertyTests.swift in Sources */,
4C5213AF225E22500079FC77 /* Observable+CompactMapTests.swift in Sources */,
Expand Down Expand Up @@ -3544,6 +3551,7 @@
C83509DF1C38754F0027C24C /* TestVirtualScheduler.swift in Sources */,
C820A9DC1EB50CAA00D431BC /* Observable+DoOnTests.swift in Sources */,
C83509CD1C3875230027C24C /* NotificationCenterTests.swift in Sources */,
60AFEDCC232DCCE5007BD1E3 /* Observable+DynamicMemberLookupTests.swift in Sources */,
C83509DB1C38754C0027C24C /* EquatableArray.swift in Sources */,
C820A9BC1EB5097700D431BC /* Observable+TakeTests.swift in Sources */,
C8350A031C38755E0027C24C /* BehaviorSubjectTest.swift in Sources */,
Expand Down Expand Up @@ -4031,7 +4039,9 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
APPLICATION_EXTENSION_API_ONLY = NO;
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = "";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
Expand All @@ -4052,6 +4062,8 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
APPLICATION_EXTENSION_API_ONLY = NO;
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = Tests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
Expand All @@ -4069,6 +4081,8 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
APPLICATION_EXTENSION_API_ONLY = NO;
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = Tests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 9.2;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
Expand All @@ -4085,6 +4099,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Manual;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = "";
Expand All @@ -4108,6 +4123,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Manual;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = Tests/Info.plist;
Expand All @@ -4127,6 +4143,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Manual;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = Tests/Info.plist;
Expand All @@ -4148,6 +4165,7 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
COMBINE_HIDPI_IMAGES = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = "";
ENABLE_BITCODE = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
Expand All @@ -4169,6 +4187,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = "";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Tests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
Expand All @@ -4187,6 +4206,7 @@
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = "";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Tests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks";
Expand All @@ -4204,8 +4224,10 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "-";
COMBINE_HIDPI_IMAGES = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = "";
ENABLE_BITCODE = NO;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
Expand All @@ -4216,6 +4238,7 @@
MACOSX_DEPLOYMENT_TARGET = 10.11;
PRODUCT_BUNDLE_IDENTIFIER = io.rx.PerformanceTests;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = macosx;
};
name = Debug;
Expand All @@ -4224,13 +4247,16 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "-";
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = "";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Tests/Microoptimizations/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.11;
PRODUCT_BUNDLE_IDENTIFIER = io.rx.PerformanceTests;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = macosx;
};
name = Release;
Expand All @@ -4239,13 +4265,16 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_IDENTITY = "-";
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = "";
ENABLE_BITCODE = NO;
INFOPLIST_FILE = Tests/Microoptimizations/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
MACOSX_DEPLOYMENT_TARGET = 10.11;
PRODUCT_BUNDLE_IDENTIFIER = io.rx.PerformanceTests;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SDKROOT = macosx;
};
name = "Release-Tests";
Expand Down Expand Up @@ -4319,7 +4348,9 @@
C8633A951B08FA5500375D60 /* Release-Tests */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "-";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
Expand Down Expand Up @@ -4536,7 +4567,9 @@
C8A56AEE1AD7424700B4673B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "-";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
Expand All @@ -4552,7 +4585,9 @@
C8A56AEF1AD7424700B4673B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "-";
DEFINES_MODULE = YES;
DEVELOPMENT_TEAM = "";
DYLIB_COMPATIBILITY_VERSION = 1;
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
Expand All @@ -4570,7 +4605,9 @@
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
CODE_SIGN_STYLE = Manual;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = "";
Expand All @@ -4594,7 +4631,9 @@
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
CODE_SIGN_STYLE = Manual;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = Tests/Benchmarks/Info.plist;
Expand All @@ -4612,7 +4651,9 @@
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove these changes.

"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "-";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems that we don't need these either.

CODE_SIGN_STYLE = Manual;
DEVELOPMENT_TEAM = "";
INFOPLIST_FILE = Tests/Benchmarks/Info.plist;
Expand Down
11 changes: 10 additions & 1 deletion RxCocoa/Traits/SharedSequence/SharedSequence.swift
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ public protocol SharingStrategyProtocol {
/**
A type that can be converted to `SharedSequence`.
*/
@dynamicMemberLookup
public protocol SharedSequenceConvertibleType : ObservableConvertibleType {
associatedtype SharingStrategy: SharingStrategyProtocol

Expand All @@ -94,6 +95,15 @@ extension SharedSequenceConvertibleType {
}
}

/**
Allows easier mapping by exposing dynamic member keypaths
So Driver.just("string").map { $0.count } can rewritten as Driver.just("string").count
*/
extension SharedSequenceConvertibleType {
public subscript<U>(dynamicMember keyPath: KeyPath<Element, U>) -> SharedSequence<SharingStrategy, U> {
return self.map { $0[keyPath: keyPath]}
}
}

extension SharedSequence {

Expand Down Expand Up @@ -223,4 +233,3 @@ extension SharedSequence where Element: RxAbstractInteger {
return SharedSequence(Observable.timer(dueTime, period: period, scheduler: SharingStrategy.scheduler))
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
</BuildableReference>
</TestableReference>
</Testables>
<AdditionalOptions>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please remove all unnecessary changes for this PR.

</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
Expand All @@ -36,8 +34,6 @@
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
Expand Down
1 change: 0 additions & 1 deletion RxSwift/Observable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,3 @@ public class Observable<Element> : ObservableType {
#endif
}
}

11 changes: 11 additions & 0 deletions RxSwift/ObservableType.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
//

/// Represents a push style sequence.
@dynamicMemberLookup
public protocol ObservableType: ObservableConvertibleType {
/**
Subscribes `observer` to receive events for this sequence.
Expand Down Expand Up @@ -45,3 +46,13 @@ extension ObservableType {
}
}
}

/**
Allows easier mapping by exposing dynamic member keypaths
So Observable.just("string").map { $0.count } can rewritten as Observable.just("string").count
*/
extension ObservableType {
public subscript<Member>(dynamicMember keyPath: KeyPath<Element, Member>) -> Observable<Member> {
return self.map { $0[keyPath: keyPath] }
}
}
1 change: 1 addition & 0 deletions Sources/AllTestz/Observable+DynamicMemberLookupTests.swift
23 changes: 23 additions & 0 deletions Sources/AllTestz/main.swift
Original file line number Diff line number Diff line change
Expand Up @@ -760,6 +760,27 @@ final class ObservableDoOnTest_ : ObservableDoOnTest, RxTestCase {
] }
}

final class ObservableDynamicMemberLookupTest_ : ObservableDynamicMemberLookupTest, RxTestCase {
#if os(macOS)
required override init() {
super.init()
}
#endif

static var allTests: [(String, (ObservableDynamicMemberLookupTest_) -> () -> Void)] { return [
("testDynamicMap_Never", ObservableDynamicMemberLookupTest.testDynamicMap_Never),
("testDynamicMap_Empty", ObservableDynamicMemberLookupTest.testDynamicMap_Empty),
("testDynamicMap_Range", ObservableDynamicMemberLookupTest.testDynamicMap_Range),
("testDynamicMap_Error", ObservableDynamicMemberLookupTest.testDynamicMap_Error),
("testDynamicMap_Dispose", ObservableDynamicMemberLookupTest.testDynamicMap_Dispose),
("testDynamicMapCompose_Never", ObservableDynamicMemberLookupTest.testDynamicMapCompose_Never),
("testDynamicMapCompose_Empty", ObservableDynamicMemberLookupTest.testDynamicMapCompose_Empty),
("testDynamicMapCompose_Range", ObservableDynamicMemberLookupTest.testDynamicMapCompose_Range),
("testDynamicMapCompose_Error", ObservableDynamicMemberLookupTest.testDynamicMapCompose_Error),
("testDynamicMapCompose_Dispose", ObservableDynamicMemberLookupTest.testDynamicMapCompose_Dispose),
] }
}

final class ObservableElementAtTest_ : ObservableElementAtTest, RxTestCase {
#if os(macOS)
required override init() {
Expand Down Expand Up @@ -1896,6 +1917,7 @@ final class SharedSequenceOperatorTests_ : SharedSequenceOperatorTests, RxTestCa
("testDriverFromOptionalWhenNil", SharedSequenceOperatorTests.testDriverFromOptionalWhenNil),
("testDriverFromSequence", SharedSequenceOperatorTests.testDriverFromSequence),
("testDriverFromArray", SharedSequenceOperatorTests.testDriverFromArray),
("testAsDriver_dynamicMap", SharedSequenceOperatorTests.testAsDriver_dynamicMap),
] }
}

Expand Down Expand Up @@ -2085,6 +2107,7 @@ func XCTMain(_ tests: [() -> Void]) {
testCase(ObservableDematerializeTest_.allTests),
testCase(ObservableDistinctUntilChangedTest_.allTests),
testCase(ObservableDoOnTest_.allTests),
testCase(ObservableDynamicMemberLookupTest_.allTests),
testCase(ObservableElementAtTest_.allTests),
testCase(ObservableEnumeratedTest_.allTests),
testCase(ObservableFilterTest_.allTests),
Expand Down
Loading