Skip to content

Commit 1f1c90c

Browse files
Add MRClient and modify _MRNowPlayingClientProtobuf
1 parent 5c10fd2 commit 1f1c90c

8 files changed

Lines changed: 75 additions & 7 deletions

File tree

.gitattributes

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Package.swift linguist-vendored
2+
Tests/** linguist-vendored

.github/workflows/test.yml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,20 @@ name: Test
22

33
on:
44
push:
5-
branches: [ master ]
5+
branches: [master]
66
pull_request:
7-
branches: [ master ]
7+
branches: [master]
88

99
jobs:
1010
test:
1111
runs-on: macos-latest
1212

1313
steps:
14-
- uses: actions/checkout@v2
14+
- name: Checkout
15+
uses: actions/checkout@v2
16+
17+
- name: Play sounds
18+
run: open /System/Library/Sounds/*
19+
1520
- name: Run tests
1621
run: swift test -v

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
.build/
22
.swiftpm/
33
.DS_Store
4+
DerivedData/

Sources/PrivateMediaRemote/Functions.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
#ifndef PrivateMediaRemote_Functions_h
22
#define PrivateMediaRemote_Functions_h
33

4-
#import "_MRNowPlayingClientProtobuf.h"
5-
64
void MRMediaRemoteRegisterForNowPlayingNotifications(dispatch_queue_t queue);
75
void MRMediaRemoteUnregisterForNowPlayingNotifications(void);
8-
typedef void (^MRMediaRemoteGetNowPlayingClientCallback)(_MRNowPlayingClientProtobuf *client);
9-
void MRMediaRemoteGetNowPlayingClient(dispatch_queue_t queue, MRMediaRemoteGetNowPlayingClientCallback block);
6+
7+
/// - Parameters:
8+
/// - queue: `dispatch_queue_t`
9+
/// - block:
10+
/// - Since macOS 10.15 it's `void (^)(MRClient *client)`.
11+
/// - Since macOS 10.12 it's `void (^)(_MRNowPlayingClientProtobuf *client)`.
12+
void MRMediaRemoteGetNowPlayingClient(dispatch_queue_t queue, void (^block)(id client));
13+
1014
typedef void (^MRMediaRemoteGetNowPlayingInfoCallback)(NSDictionary *info);
1115
void MRMediaRemoteGetNowPlayingInfo(dispatch_queue_t queue, MRMediaRemoteGetNowPlayingInfoCallback block);
1216
typedef void (^MRMediaRemoteGetNowPlayingApplicationIsPlayingCallback)(BOOL isPlaying);
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#ifndef PrivateMediaRemote_MRClient_h
2+
#define PrivateMediaRemote_MRClient_h
3+
4+
#import <os/availability.h>
5+
#import <PrivateProtocolBuffer/PrivateProtocolBuffer.h>
6+
7+
API_AVAILABLE(macos(10.15))
8+
@interface MRClient : NSObject {
9+
NSString *_bundleIdentifier;
10+
}
11+
12+
@property (nonatomic, copy) NSString *bundleIdentifier;
13+
@property (nonatomic, readonly) _MRNowPlayingClientProtobuf *protobuf;
14+
- (instancetype)initWithProtobuf:(_MRNowPlayingClientProtobuf *)protobuf;
15+
16+
@end
17+
18+
#endif /* PrivateMediaRemote_MRClient_h */

Sources/PrivateMediaRemote/PrivateMediaRemote.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
#import "_MRColorProtobuf.h"
77
#import "_MRNowPlayingClientProtobuf.h"
8+
#import "MRClient.h"
89
#import "Constants.h"
910
#import "Enums.h"
1011
#import "Functions.h"

Tests/TestClasses.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,18 @@ BOOL Identifier(isClassDefined)(Class classInstance, NSString *classString) {
1111
#define TestClass(CLASS) XCTAssertTrue(IsClassDefined(CLASS))
1212
#define TestUnlinkableClass(CLASS) XCTAssertTrue(IsUnlinkableClassDefined(CLASS))
1313

14+
void Identifier(testClassesCatalina)() {
15+
if (@available(macOS 10.15, *)) {
16+
TestUnlinkableClass(MRClient);
17+
}
18+
}
19+
20+
#define TestClassesCatalina Identifier(testClassesCatalina)
21+
1422
#define TestClasses \
1523
TestUnlinkableClass(_MRColorProtobuf); \
1624
TestClass(_MRNowPlayingClientProtobuf); \
25+
TestClassesCatalina(); \
1726

1827

1928
#endif /* TestClasses_h */

Tests/TestFunctions.h

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,33 @@
55

66
#define TestFunction(FUNCTION) XCTAssertTrue(GetFunctionPointer(FUNCTION) != nil)
77

8+
void Identifier(getNowPlayingClient)(Identifier(Tests) *self) {
9+
typeof(MRMediaRemoteGetNowPlayingClient) *func = nil;
10+
11+
#ifdef LINKED_TESTS
12+
func = &MRMediaRemoteGetNowPlayingClient;
13+
#elif defined(UNLINKED_TESTS)
14+
func = CFBundleGetFunctionPointerForName(self.cfBundle, CFSTR("MRMediaRemoteGetNowPlayingClient"));
15+
#endif
16+
17+
XCTestExpectation *expectation = [self expectationWithDescription:@"Long method"];
18+
(*func)(dispatch_get_main_queue(), ^(id client) {
19+
XCTAssertNotNil(client, @"`client` is `nil` when calling `MRMediaRemoteGetNowPlayingClient`. Play some music for this test to pass.");
20+
21+
if (@available(macOS 10.15, *)) {
22+
XCTAssertTrue([((NSObject *)client).className isEqualToString:@"MRClient"]);
23+
} else {
24+
XCTAssertTrue([((NSObject *)client).className isEqualToString:@"_MRNowPlayingClientProtobuf"]);
25+
}
26+
27+
[expectation fulfill];
28+
});
29+
30+
[self waitForExpectationsWithTimeout:1 handler:nil];
31+
}
32+
33+
#define TestMRMediaRemoteGetNowPlayingClient Identifier(getNowPlayingClient)
34+
835
#define TestFunctions \
936
TestFunction(MRMediaRemoteRegisterForNowPlayingNotifications); \
1037
TestFunction(MRMediaRemoteUnregisterForNowPlayingNotifications); \
@@ -15,5 +42,6 @@ TestFunction(MRNowPlayingClientGetBundleIdentifier); \
1542
TestFunction(MRNowPlayingClientGetParentAppBundleIdentifier); \
1643
TestFunction(MRMediaRemoteSetElapsedTime); \
1744
TestFunction(MRMediaRemoteSendCommand); \
45+
TestMRMediaRemoteGetNowPlayingClient(self); \
1846

1947
#endif /* TestFunctions_h */

0 commit comments

Comments
 (0)