Skip to content

Commit d46f4bb

Browse files
committed
Add async part of IShellOutputReceiver
Add function option for ExecuteRemoteCommand
1 parent c1764a2 commit d46f4bb

19 files changed

+385
-39
lines changed

AdvancedSharpAdbClient.Tests/AdbClientTests.Async.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ public async void ListReverseForwardAsyncTest()
248248
}
249249

250250
/// <summary>
251-
/// Tests the <see cref="AdbClient.ExecuteServerCommandAsync(string, string, IShellOutputReceiver, Encoding, CancellationToken)"/> method.
251+
/// Tests the <see cref="AdbClient.ExecuteServerCommandAsync(string, string, IShellOutputReceiver?, Encoding, CancellationToken)"/> method.
252252
/// </summary>
253253
[Fact]
254254
public async void ExecuteServerCommandAsyncTest()
@@ -273,7 +273,7 @@ await RunTestAsync(
273273
}
274274

275275
/// <summary>
276-
/// Tests the <see cref="AdbClient.ExecuteRemoteCommandAsync(string, DeviceData, IShellOutputReceiver, Encoding, CancellationToken)"/> method.
276+
/// Tests the <see cref="AdbClient.ExecuteRemoteCommandAsync(string, DeviceData, IShellOutputReceiver?, Encoding, CancellationToken)"/> method.
277277
/// </summary>
278278
[Fact]
279279
public async void ExecuteRemoteCommandAsyncTest()
@@ -300,7 +300,7 @@ await RunTestAsync(
300300
}
301301

302302
/// <summary>
303-
/// Tests the <see cref="AdbClient.ExecuteRemoteCommandAsync(string, DeviceData, IShellOutputReceiver, Encoding, CancellationToken)"/> method.
303+
/// Tests the <see cref="AdbClient.ExecuteRemoteCommandAsync(string, DeviceData, IShellOutputReceiver?, Encoding, CancellationToken)"/> method.
304304
/// </summary>
305305
[Fact]
306306
public async void ExecuteRemoteCommandAsyncUnresponsiveTest()

AdvancedSharpAdbClient.Tests/AdbClientTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,7 @@ public void ListReverseForwardTest()
357357
}
358358

359359
/// <summary>
360-
/// Tests the <see cref="AdbClient.ExecuteServerCommand(string, string, IAdbSocket, IShellOutputReceiver, Encoding)"/> method.
360+
/// Tests the <see cref="AdbClient.ExecuteServerCommand(string, string, IAdbSocket, IShellOutputReceiver?, Encoding)"/> method.
361361
/// </summary>
362362
[Fact]
363363
public void ExecuteServerCommandTest()
@@ -382,7 +382,7 @@ public void ExecuteServerCommandTest()
382382
}
383383

384384
/// <summary>
385-
/// Tests the <see cref="AdbClient.ExecuteRemoteCommand(string, DeviceData, IShellOutputReceiver, Encoding)"/> method.
385+
/// Tests the <see cref="AdbClient.ExecuteRemoteCommand(string, DeviceData, IShellOutputReceiver?, Encoding)"/> method.
386386
/// </summary>
387387
[Fact]
388388
public void ExecuteRemoteCommandTest()
@@ -409,7 +409,7 @@ public void ExecuteRemoteCommandTest()
409409
}
410410

411411
/// <summary>
412-
/// Tests the <see cref="AdbClient.ExecuteRemoteCommand(string, DeviceData, IShellOutputReceiver, Encoding)"/> method.
412+
/// Tests the <see cref="AdbClient.ExecuteRemoteCommand(string, DeviceData, IShellOutputReceiver?, Encoding)"/> method.
413413
/// </summary>
414414
[Fact]
415415
public void ExecuteRemoteCommandUnresponsiveTest()

AdvancedSharpAdbClient.Tests/Extensions/AdbClientExtensionsTests.Async.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ public async void ExecuteServerCommandAsyncTest()
1717
const string target = nameof(target);
1818
const string command = nameof(command);
1919
IAdbSocket socket = Substitute.For<IAdbSocket>();
20-
IShellOutputReceiver receiver = Substitute.For<IShellOutputReceiver>();
20+
static bool predicate(string x) => true;
21+
IShellOutputReceiver receiver = new FunctionOutputReceiver(predicate);
22+
Encoding encoding = AdbClient.Encoding;
2123
List<string> result = ["Hello", "World", "!"];
2224

2325
IAdbClient client = Substitute.For<IAdbClient>();
@@ -27,7 +29,7 @@ public async void ExecuteServerCommandAsyncTest()
2729
Assert.Equal(target, x.ArgAt<string>(0));
2830
Assert.Equal(command, x.ArgAt<string>(1));
2931
Assert.Equal(receiver, x.ArgAt<IShellOutputReceiver>(2));
30-
Assert.Equal(AdbClient.Encoding, x.ArgAt<Encoding>(3));
32+
Assert.Equal(encoding, x.ArgAt<Encoding>(3));
3133
Assert.Equal(default, x.ArgAt<CancellationToken>(4));
3234
return Task.CompletedTask;
3335
});
@@ -38,7 +40,7 @@ public async void ExecuteServerCommandAsyncTest()
3840
Assert.Equal(command, x.ArgAt<string>(1));
3941
Assert.Equal(socket, x.ArgAt<IAdbSocket>(2));
4042
Assert.Equal(receiver, x.ArgAt<IShellOutputReceiver>(3));
41-
Assert.Equal(AdbClient.Encoding, x.ArgAt<Encoding>(4));
43+
Assert.Equal(encoding, x.ArgAt<Encoding>(4));
4244
Assert.Equal(default, x.ArgAt<CancellationToken>(5));
4345
return Task.CompletedTask;
4446
});
@@ -47,7 +49,7 @@ public async void ExecuteServerCommandAsyncTest()
4749
{
4850
Assert.Equal(target, x.ArgAt<string>(0));
4951
Assert.Equal(command, x.ArgAt<string>(1));
50-
Assert.Equal(AdbClient.Encoding, x.ArgAt<Encoding>(2));
52+
Assert.Equal(encoding, x.ArgAt<Encoding>(2));
5153
Assert.Equal(default, x.ArgAt<CancellationToken>(3));
5254
return result.AsEnumerableAsync(x.ArgAt<CancellationToken>(3));
5355
});
@@ -57,13 +59,17 @@ public async void ExecuteServerCommandAsyncTest()
5759
Assert.Equal(target, x.ArgAt<string>(0));
5860
Assert.Equal(command, x.ArgAt<string>(1));
5961
Assert.Equal(socket, x.ArgAt<IAdbSocket>(2));
60-
Assert.Equal(AdbClient.Encoding, x.ArgAt<Encoding>(3));
62+
Assert.Equal(encoding, x.ArgAt<Encoding>(3));
6163
Assert.Equal(default, x.ArgAt<CancellationToken>(4));
6264
return result.AsEnumerableAsync(x.ArgAt<CancellationToken>(4));
6365
});
6466

6567
await client.ExecuteServerCommandAsync(target, command, receiver);
6668
await client.ExecuteServerCommandAsync(target, command, socket, receiver);
69+
await client.ExecuteServerCommandAsync(target, command, predicate);
70+
await client.ExecuteServerCommandAsync(target, command, socket, predicate);
71+
await client.ExecuteServerCommandAsync(target, command, predicate, encoding);
72+
await client.ExecuteServerCommandAsync(target, command, socket, predicate, encoding);
6773
Assert.Equal(result, await AdbClientExtensions.ExecuteServerCommandAsync(client, target, command).ToListAsync());
6874
Assert.Equal(result, await AdbClientExtensions.ExecuteServerCommandAsync(client, target, command, socket).ToListAsync());
6975
}
@@ -73,7 +79,9 @@ public async void ExecuteRemoteCommandAsyncTest()
7379
{
7480
const string command = nameof(command);
7581
DeviceData device = new();
76-
IShellOutputReceiver receiver = Substitute.For<IShellOutputReceiver>();
82+
static bool predicate(string x) => true;
83+
IShellOutputReceiver receiver = new FunctionOutputReceiver(predicate);
84+
Encoding encoding = AdbClient.Encoding;
7785
List<string> result = ["Hello", "World", "!"];
7886

7987
IAdbClient client = Substitute.For<IAdbClient>();
@@ -83,7 +91,7 @@ public async void ExecuteRemoteCommandAsyncTest()
8391
Assert.Equal(command, x.ArgAt<string>(0));
8492
Assert.Equal(device, x.ArgAt<DeviceData>(1));
8593
Assert.Equal(receiver, x.ArgAt<IShellOutputReceiver>(2));
86-
Assert.Equal(AdbClient.Encoding, x.ArgAt<Encoding>(3));
94+
Assert.Equal(encoding, x.ArgAt<Encoding>(3));
8795
Assert.Equal(default, x.ArgAt<CancellationToken>(4));
8896
return Task.CompletedTask;
8997
});
@@ -92,12 +100,14 @@ public async void ExecuteRemoteCommandAsyncTest()
92100
{
93101
Assert.Equal(command, x.ArgAt<string>(0));
94102
Assert.Equal(device, x.ArgAt<DeviceData>(1));
95-
Assert.Equal(AdbClient.Encoding, x.ArgAt<Encoding>(2));
103+
Assert.Equal(encoding, x.ArgAt<Encoding>(2));
96104
Assert.Equal(default, x.ArgAt<CancellationToken>(3));
97105
return result.AsEnumerableAsync(x.ArgAt<CancellationToken>(3));
98106
});
99107

100108
await client.ExecuteRemoteCommandAsync(command, device, receiver);
109+
await client.ExecuteRemoteCommandAsync(command, device, predicate);
110+
await client.ExecuteRemoteCommandAsync(command, device, predicate, encoding);
101111
Assert.Equal(result, await AdbClientExtensions.ExecuteRemoteCommandAsync(client, command, device).ToListAsync());
102112
}
103113

AdvancedSharpAdbClient.Tests/Extensions/AdbClientExtensionsTests.cs

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ public void ExecuteServerCommandTest()
1818
const string target = nameof(target);
1919
const string command = nameof(command);
2020
IAdbSocket socket = Substitute.For<IAdbSocket>();
21-
IShellOutputReceiver receiver = Substitute.For<IShellOutputReceiver>();
21+
static bool predicate(string x) => true;
22+
IShellOutputReceiver receiver = new FunctionOutputReceiver(predicate);
23+
Encoding encoding = AdbClient.Encoding;
2224
IEnumerable<string> result = ["Hello", "World", "!"];
2325

2426
IAdbClient client = Substitute.For<IAdbClient>();
@@ -28,7 +30,7 @@ public void ExecuteServerCommandTest()
2830
Assert.Equal(target, x.ArgAt<string>(0));
2931
Assert.Equal(command, x.ArgAt<string>(1));
3032
Assert.Equal(receiver, x.ArgAt<IShellOutputReceiver>(2));
31-
Assert.Equal(AdbClient.Encoding, x.ArgAt<Encoding>(3));
33+
Assert.Equal(encoding, x.ArgAt<Encoding>(3));
3234
});
3335
client.When(x => x.ExecuteServerCommand(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<IAdbSocket>(), Arg.Any<IShellOutputReceiver>(), Arg.Any<Encoding>()))
3436
.Do(x =>
@@ -37,14 +39,14 @@ public void ExecuteServerCommandTest()
3739
Assert.Equal(command, x.ArgAt<string>(1));
3840
Assert.Equal(socket, x.ArgAt<IAdbSocket>(2));
3941
Assert.Equal(receiver, x.ArgAt<IShellOutputReceiver>(3));
40-
Assert.Equal(AdbClient.Encoding, x.ArgAt<Encoding>(4));
42+
Assert.Equal(encoding, x.ArgAt<Encoding>(4));
4143
});
4244
_ = client.ExecuteServerCommand(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<Encoding>())
4345
.Returns(x =>
4446
{
4547
Assert.Equal(target, x.ArgAt<string>(0));
4648
Assert.Equal(command, x.ArgAt<string>(1));
47-
Assert.Equal(AdbClient.Encoding, x.ArgAt<Encoding>(2));
49+
Assert.Equal(encoding, x.ArgAt<Encoding>(2));
4850
return result;
4951
});
5052
_ = client.ExecuteServerCommand(Arg.Any<string>(), Arg.Any<string>(), Arg.Any<IAdbSocket>(), Arg.Any<Encoding>())
@@ -53,12 +55,16 @@ public void ExecuteServerCommandTest()
5355
Assert.Equal(target, x.ArgAt<string>(0));
5456
Assert.Equal(command, x.ArgAt<string>(1));
5557
Assert.Equal(socket, x.ArgAt<IAdbSocket>(2));
56-
Assert.Equal(AdbClient.Encoding, x.ArgAt<Encoding>(3));
58+
Assert.Equal(encoding, x.ArgAt<Encoding>(3));
5759
return result;
5860
});
5961

6062
client.ExecuteServerCommand(target, command, receiver);
6163
client.ExecuteServerCommand(target, command, socket, receiver);
64+
client.ExecuteServerCommand(target, command, predicate);
65+
client.ExecuteServerCommand(target, command, socket, predicate);
66+
client.ExecuteServerCommand(target, command, predicate, encoding);
67+
client.ExecuteServerCommand(target, command, socket, predicate, encoding);
6268
Assert.Equal(result, AdbClientExtensions.ExecuteServerCommand(client, target, command));
6369
Assert.Equal(result, AdbClientExtensions.ExecuteServerCommand(client, target, command, socket));
6470
}
@@ -68,7 +74,9 @@ public void ExecuteRemoteCommandTest()
6874
{
6975
const string command = nameof(command);
7076
DeviceData device = new();
71-
IShellOutputReceiver receiver = Substitute.For<IShellOutputReceiver>();
77+
static bool predicate(string x) => true;
78+
IShellOutputReceiver receiver = new FunctionOutputReceiver(predicate);
79+
Encoding encoding = AdbClient.Encoding;
7280
IEnumerable<string> result = ["Hello", "World", "!"];
7381

7482
IAdbClient client = Substitute.For<IAdbClient>();
@@ -78,18 +86,20 @@ public void ExecuteRemoteCommandTest()
7886
Assert.Equal(command, x.ArgAt<string>(0));
7987
Assert.Equal(device, x.ArgAt<DeviceData>(1));
8088
Assert.Equal(receiver, x.ArgAt<IShellOutputReceiver>(2));
81-
Assert.Equal(AdbClient.Encoding, x.ArgAt<Encoding>(3));
89+
Assert.Equal(encoding, x.ArgAt<Encoding>(3));
8290
});
8391
_ = client.ExecuteRemoteCommand(Arg.Any<string>(), Arg.Any<DeviceData>(), Arg.Any<Encoding>())
8492
.Returns(x =>
8593
{
8694
Assert.Equal(command, x.ArgAt<string>(0));
8795
Assert.Equal(device, x.ArgAt<DeviceData>(1));
88-
Assert.Equal(AdbClient.Encoding, x.ArgAt<Encoding>(2));
96+
Assert.Equal(encoding, x.ArgAt<Encoding>(2));
8997
return result;
9098
});
9199

92100
client.ExecuteRemoteCommand(command, device, receiver);
101+
client.ExecuteRemoteCommand(command, device, predicate);
102+
client.ExecuteRemoteCommand(command, device, predicate, encoding);
93103
Assert.Equal(result, AdbClientExtensions.ExecuteRemoteCommand(client, command, device));
94104
}
95105

AdvancedSharpAdbClient/AdbClient.Async.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -193,15 +193,15 @@ public virtual async Task ExecuteRemoteCommandAsync(string command, DeviceData d
193193
}
194194

195195
/// <inheritdoc/>
196-
public virtual async Task ExecuteServerCommandAsync(string target, string command, IShellOutputReceiver receiver, Encoding encoding, CancellationToken cancellationToken = default)
196+
public virtual async Task ExecuteServerCommandAsync(string target, string command, IShellOutputReceiver? receiver, Encoding encoding, CancellationToken cancellationToken = default)
197197
{
198198
ExceptionExtensions.ThrowIfNull(encoding);
199199
using IAdbSocket socket = AdbSocketFactory(EndPoint);
200200
await ExecuteServerCommandAsync(target, command, socket, receiver, encoding, cancellationToken);
201201
}
202202

203203
/// <inheritdoc/>
204-
public virtual async Task ExecuteServerCommandAsync(string target, string command, IAdbSocket socket, IShellOutputReceiver receiver, Encoding encoding, CancellationToken cancellationToken = default)
204+
public virtual async Task ExecuteServerCommandAsync(string target, string command, IAdbSocket socket, IShellOutputReceiver? receiver, Encoding encoding, CancellationToken cancellationToken = default)
205205
{
206206
ExceptionExtensions.ThrowIfNull(encoding);
207207

@@ -226,7 +226,7 @@ public virtual async Task ExecuteServerCommandAsync(string target, string comman
226226
{
227227
string? line = await reader.ReadLineAsync(cancellationToken).ConfigureAwait(false);
228228
if (line == null) { break; }
229-
if (receiver?.AddOutput(line) == false) { break; }
229+
if (receiver != null && await receiver.AddOutputAsync(line, cancellationToken) == false) { break; }
230230
}
231231
}
232232
catch (Exception e)
@@ -246,7 +246,7 @@ public virtual async Task ExecuteServerCommandAsync(string target, string comman
246246
}
247247

248248
/// <inheritdoc/>
249-
public virtual async Task ExecuteRemoteCommandAsync(string command, DeviceData device, IShellOutputReceiver receiver, Encoding encoding, CancellationToken cancellationToken = default)
249+
public virtual async Task ExecuteRemoteCommandAsync(string command, DeviceData device, IShellOutputReceiver? receiver, Encoding encoding, CancellationToken cancellationToken = default)
250250
{
251251
EnsureDevice(device);
252252
ExceptionExtensions.ThrowIfNull(encoding);

AdvancedSharpAdbClient/AdbClient.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -348,15 +348,15 @@ public virtual void ExecuteRemoteCommand(string command, DeviceData device)
348348
}
349349

350350
/// <inheritdoc/>
351-
public virtual void ExecuteServerCommand(string target, string command, IShellOutputReceiver receiver, Encoding encoding)
351+
public virtual void ExecuteServerCommand(string target, string command, IShellOutputReceiver? receiver, Encoding encoding)
352352
{
353353
ExceptionExtensions.ThrowIfNull(encoding);
354354
using IAdbSocket socket = AdbSocketFactory(EndPoint);
355355
ExecuteServerCommand(target, command, socket, receiver, encoding);
356356
}
357357

358358
/// <inheritdoc/>
359-
public virtual void ExecuteServerCommand(string target, string command, IAdbSocket socket, IShellOutputReceiver receiver, Encoding encoding)
359+
public virtual void ExecuteServerCommand(string target, string command, IAdbSocket socket, IShellOutputReceiver? receiver, Encoding encoding)
360360
{
361361
ExceptionExtensions.ThrowIfNull(encoding);
362362

@@ -395,7 +395,7 @@ public virtual void ExecuteServerCommand(string target, string command, IAdbSock
395395
}
396396

397397
/// <inheritdoc/>
398-
public virtual void ExecuteRemoteCommand(string command, DeviceData device, IShellOutputReceiver receiver, Encoding encoding)
398+
public virtual void ExecuteRemoteCommand(string command, DeviceData device, IShellOutputReceiver? receiver, Encoding encoding)
399399
{
400400
EnsureDevice(device);
401401

0 commit comments

Comments
 (0)