Skip to content

Commit 77fba3b

Browse files
committed
Merge branch 'lewing-wasm-underlying-entrypoint' into wasm-async-runner-tests
Write a test for HttpRequestMessage Transfer some playwright tests over
2 parents 57a1369 + 531b1fc commit 77fba3b

File tree

3 files changed

+493
-0
lines changed

3 files changed

+493
-0
lines changed

src/libraries/System.Private.Runtime.InteropServices.JavaScript/tests/System/Runtime/InteropServices/JavaScript/HelperMarshal.cs

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,213 @@ private static void GetTypedArrayDouble(JSObject obj)
307307
_taDouble = ((Float64Array)obj.GetObjectProperty("typedArray")).ToArray();
308308
}
309309

310+
private static void SetUint8ClampedArray(JSObject obj, int length)
311+
{
312+
var clamped = new byte[length];
313+
obj.SetObjectProperty("clampedArray", Uint8ClampedArray.From(clamped));
314+
}
315+
316+
internal static Uint8ClampedArray _caUInt;
317+
private static void GetUint8ClampedArray(JSObject obj)
318+
{
319+
_caUInt = (Uint8ClampedArray)obj.GetObjectProperty("clampedArray");
320+
}
321+
322+
private static void SetUint8Array(JSObject obj, int length)
323+
{
324+
var array = new byte[length];
325+
obj.SetObjectProperty("uint8Array", Uint8Array.From(array));
326+
}
327+
328+
internal static Uint8Array _uint8Array;
329+
private static void GetUint8Array(JSObject obj)
330+
{
331+
_uint8Array = (Uint8Array)obj.GetObjectProperty("uint8Array");
332+
}
333+
334+
private static void SetUint16Array(JSObject obj, int length)
335+
{
336+
var array = new ushort[length];
337+
obj.SetObjectProperty("uint16Array", Uint16Array.From(array));
338+
}
339+
340+
internal static Uint16Array _uint16Array;
341+
private static void GetUint16Array(JSObject obj)
342+
{
343+
_uint16Array = (Uint16Array)obj.GetObjectProperty("uint16Array");
344+
}
345+
346+
private static void SetUint32Array(JSObject obj, int length)
347+
{
348+
var array = new uint[length];
349+
obj.SetObjectProperty("uint32Array", Uint32Array.From(array));
350+
}
351+
352+
internal static Uint32Array _uint32Array;
353+
private static void GetUint32Array(JSObject obj)
354+
{
355+
_uint32Array = (Uint32Array)obj.GetObjectProperty("uint32Array");
356+
}
357+
358+
private static void SetInt8Array(JSObject obj, int length)
359+
{
360+
var array = new sbyte[length];
361+
obj.SetObjectProperty("int8Array", Int8Array.From(array));
362+
}
363+
364+
internal static Int8Array _int8Array;
365+
private static void GetInt8Array(JSObject obj)
366+
{
367+
_int8Array = (Int8Array)obj.GetObjectProperty("int8Array");
368+
}
369+
370+
private static void SetInt16Array(JSObject obj, int length)
371+
{
372+
var array = new short[length];
373+
obj.SetObjectProperty("int16Array", Int16Array.From(array));
374+
}
375+
376+
internal static Int16Array _int16Array;
377+
private static void GetInt16Array(JSObject obj)
378+
{
379+
_int16Array = (Int16Array)obj.GetObjectProperty("int16Array");
380+
}
381+
382+
private static void SetInt32Array(JSObject obj, int length)
383+
{
384+
var array = new int[length];
385+
obj.SetObjectProperty("int32Array", Int32Array.From(array));
386+
}
387+
388+
internal static Int32Array _int32Array;
389+
private static void GetInt32Array(JSObject obj)
390+
{
391+
_int32Array = (Int32Array)obj.GetObjectProperty("int32Array");
392+
}
393+
394+
private static void SetFloat32Array(JSObject obj, int length)
395+
{
396+
var array = new float[length];
397+
obj.SetObjectProperty("float32Array", Float32Array.From(array));
398+
}
399+
400+
internal static Float32Array _float32Array;
401+
private static void GetFloat32Array(JSObject obj)
402+
{
403+
_float32Array = (Float32Array)obj.GetObjectProperty("float32Array");
404+
}
405+
406+
private static void SetFloat64Array(JSObject obj, int length)
407+
{
408+
var array = new double[length];
409+
obj.SetObjectProperty("float64Array", Float64Array.From(array));
410+
}
411+
412+
internal static Float64Array _float64Array;
413+
private static void GetFloat64Array(JSObject obj)
414+
{
415+
_float64Array = (Float64Array)obj.GetObjectProperty("float64Array");
416+
}
417+
418+
private static void SetUint8ClampedArrayFromSharedArrayBuffer(JSObject obj, int length)
419+
{
420+
obj.SetObjectProperty("clampedArrayFromSharedArrayBuffer", new Uint8ClampedArray(new SharedArrayBuffer(length)));
421+
}
422+
423+
internal static Uint8ClampedArray _caFromSharedArrayBuffer;
424+
private static void GetUint8ClampedArrayFromSharedArrayBuffer(JSObject obj)
425+
{
426+
_caFromSharedArrayBuffer = (Uint8ClampedArray)obj.GetObjectProperty("clampedArrayFromSharedArrayBuffer");
427+
}
428+
429+
private static void SetUint8ArrayFromSharedArrayBuffer(JSObject obj, int length)
430+
{
431+
obj.SetObjectProperty("uint8ArrayFromSharedArrayBuffer", new Uint8Array(new SharedArrayBuffer(length)));
432+
}
433+
434+
internal static Uint8Array _uint8FromSharedArrayBuffer;
435+
private static void GetUint8ArrayFromSharedArrayBuffer(JSObject obj)
436+
{
437+
_uint8FromSharedArrayBuffer = (Uint8Array)obj.GetObjectProperty("uint8ArrayFromSharedArrayBuffer");
438+
}
439+
440+
private static void SetUint16ArrayFromSharedArrayBuffer(JSObject obj, int length)
441+
{
442+
obj.SetObjectProperty("uint16ArrayFromSharedArrayBuffer", new Uint16Array(new SharedArrayBuffer(length)));
443+
}
444+
445+
internal static Uint16Array _uint16FromSharedArrayBuffer;
446+
private static void GetUint16ArrayFromSharedArrayBuffer(JSObject obj)
447+
{
448+
_uint16FromSharedArrayBuffer = (Uint16Array)obj.GetObjectProperty("uint16ArrayFromSharedArrayBuffer");
449+
}
450+
451+
private static void SetUint32ArrayFromSharedArrayBuffer(JSObject obj, int length)
452+
{
453+
obj.SetObjectProperty("uint32ArrayFromSharedArrayBuffer", new Uint32Array(new SharedArrayBuffer(length)));
454+
}
455+
456+
internal static Uint32Array _uint32FromSharedArrayBuffer;
457+
private static void GetUint32ArrayFromSharedArrayBuffer(JSObject obj)
458+
{
459+
_uint32FromSharedArrayBuffer = (Uint32Array)obj.GetObjectProperty("uint32ArrayFromSharedArrayBuffer");
460+
}
461+
462+
private static void SetInt8ArrayFromSharedArrayBuffer(JSObject obj, int length)
463+
{
464+
obj.SetObjectProperty("int8ArrayFromSharedArrayBuffer", new Int8Array(new SharedArrayBuffer(length)));
465+
}
466+
467+
internal static Int8Array _int8fromSharedArrayBuffer;
468+
private static void GetInt8ArrayFromSharedArrayBuffer(JSObject obj)
469+
{
470+
_int8fromSharedArrayBuffer = (Int8Array)obj.GetObjectProperty("int8ArrayFromSharedArrayBuffer");
471+
}
472+
473+
private static void SetInt16ArrayFromSharedArrayBuffer(JSObject obj, int length)
474+
{
475+
obj.SetObjectProperty("int16ArrayFromSharedArrayBuffer", new Int16Array(new SharedArrayBuffer(length)));
476+
}
477+
478+
internal static Int16Array _int16fromSharedArrayBuffer;
479+
private static void GetInt16ArrayFromSharedArrayBuffer(JSObject obj)
480+
{
481+
_int16fromSharedArrayBuffer = (Int16Array)obj.GetObjectProperty("int16ArrayFromSharedArrayBuffer");
482+
}
483+
484+
private static void SetInt32ArrayFromSharedArrayBuffer(JSObject obj, int length)
485+
{
486+
obj.SetObjectProperty("int32ArrayFromSharedArrayBuffer", new Int32Array(new SharedArrayBuffer(length)));
487+
}
488+
489+
internal static Int32Array _int32fromSharedArrayBuffer;
490+
private static void GetInt32ArrayFromSharedArrayBuffer(JSObject obj)
491+
{
492+
_int32fromSharedArrayBuffer = (Int32Array)obj.GetObjectProperty("int32ArrayFromSharedArrayBuffer");
493+
}
494+
495+
private static void SetFloat32ArrayFromSharedArrayBuffer(JSObject obj, int length)
496+
{
497+
obj.SetObjectProperty("float32ArrayFromSharedArrayBuffer", new Float32Array(new SharedArrayBuffer(length)));
498+
}
499+
500+
internal static Float32Array _float32fromSharedArrayBuffer;
501+
private static void GetFloat32ArrayFromSharedArrayBuffer(JSObject obj)
502+
{
503+
_float32fromSharedArrayBuffer = (Float32Array)obj.GetObjectProperty("float32ArrayFromSharedArrayBuffer");
504+
}
505+
506+
private static void SetFloat64ArrayFromSharedArrayBuffer(JSObject obj, int length)
507+
{
508+
obj.SetObjectProperty("float64ArrayFromSharedArrayBuffer", new Float64Array(new SharedArrayBuffer(length)));
509+
}
510+
511+
internal static Float64Array _float64fromSharedArrayBuffer;
512+
private static void GetFloat64ArrayFromSharedArrayBuffer(JSObject obj)
513+
{
514+
_float64fromSharedArrayBuffer = (Float64Array)obj.GetObjectProperty("float64ArrayFromSharedArrayBuffer");
515+
}
516+
310517
private static Function _sumFunction;
311518
private static void CreateFunctionSum()
312519
{
@@ -346,4 +553,6 @@ public static void SetBlobAsUri(Uri blobUri)
346553
}
347554

348555
}
556+
557+
349558
}

src/libraries/System.Private.Runtime.InteropServices.JavaScript/tests/System/Runtime/InteropServices/JavaScript/Http/HttpRequestMessageTest.cs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,55 @@ function typedArrayToURL(typedArray, mimeType) {
409409
Assert.Equal (59, content.Length);
410410
}
411411

412+
[ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsBrowserDomSupported))]
413+
public async Task BlobUri_Marshal_CorrectBinaryData_Browser()
414+
{
415+
Runtime.InvokeJS(@"
416+
function arrayBufferToURL(arrayBuffer, mimeType) {
417+
return URL.createObjectURL(new Blob([arrayBuffer], {type: mimeType}))
418+
}
419+
var myArray = new ArrayBuffer(512);
420+
var longInt8View = new Uint8Array(myArray);
421+
// generate some data
422+
for (var i=0; i< longInt8View.length; i++) {
423+
longInt8View[i] = i % 256;
424+
}
425+
const url = arrayBufferToURL(myArray, 'text/plain')
426+
App.call_test_method (""InvokeString"", [ url ]);
427+
428+
");
429+
var client = new HttpClient ();
430+
Assert.StartsWith ("blob:", HelperMarshal._stringResource);
431+
Console.WriteLine(HelperMarshal._stringResource);
432+
HttpRequestMessage rm = new HttpRequestMessage(HttpMethod.Get, new Uri (HelperMarshal._stringResource));
433+
HttpResponseMessage resp = await client.SendAsync (rm);
434+
Assert.NotNull (resp.Content);
435+
string content = await resp.Content.ReadAsStringAsync();
436+
Assert.Equal (512, content.Length);
437+
}
438+
439+
[ConditionalFact(typeof(PlatformDetection), nameof(PlatformDetection.IsBrowserDomSupported))]
440+
public async Task BlobUri_Marshal_CorrectHeader_Browser()
441+
{
442+
Runtime.InvokeJS(@"
443+
function JSONToURL(obj) {
444+
return URL.createObjectURL(new Blob([JSON.stringify(obj)], {type: 'application/json'}))
445+
}
446+
447+
const obj = {hello: 'world'};
448+
const url = JSONToURL (obj);
449+
App.call_test_method (""InvokeString"", [ url ]);
450+
");
451+
452+
var client = new HttpClient ();
453+
Assert.StartsWith ("blob:", HelperMarshal._stringResource);
454+
Console.WriteLine(HelperMarshal._stringResource);
455+
HttpRequestMessage rm = new HttpRequestMessage(HttpMethod.Get, new Uri (HelperMarshal._stringResource));
456+
HttpResponseMessage resp = await client.SendAsync (rm);
457+
Assert.NotNull (resp.Content);
458+
string content = await resp.Content.ReadAsStringAsync();
459+
}
460+
412461
[Fact]
413462
public void BlobStringUri_Marshal_CorrectValues()
414463
{

0 commit comments

Comments
 (0)