177 lines
8.1 KiB
JavaScript
177 lines
8.1 KiB
JavaScript
|
|
// We'll store the results from the tests here
|
|
var results = {};
|
|
|
|
function invokeDotNetInteropMethodsAsync() {
|
|
console.log('Invoking void sync methods.');
|
|
Blazor.invokeDotNetMethod(createMethodOptions('VoidParameterless'));
|
|
Blazor.invokeDotNetMethod(createMethodOptions('VoidWithOneParameter'), ...createArgumentList(1));
|
|
Blazor.invokeDotNetMethod(createMethodOptions('VoidWithTwoParameters'), ...createArgumentList(2));
|
|
Blazor.invokeDotNetMethod(createMethodOptions('VoidWithThreeParameters'), ...createArgumentList(3));
|
|
Blazor.invokeDotNetMethod(createMethodOptions('VoidWithFourParameters'), ...createArgumentList(4));
|
|
Blazor.invokeDotNetMethod(createMethodOptions('VoidWithFiveParameters'), ...createArgumentList(5));
|
|
Blazor.invokeDotNetMethod(createMethodOptions('VoidWithSixParameters'), ...createArgumentList(6));
|
|
Blazor.invokeDotNetMethod(createMethodOptions('VoidWithSevenParameters'), ...createArgumentList(7));
|
|
Blazor.invokeDotNetMethod(createMethodOptions('VoidWithEightParameters'), ...createArgumentList(8));
|
|
|
|
console.log('Invoking returning sync methods.');
|
|
results['result1'] = Blazor.invokeDotNetMethod(createMethodOptions('ReturnArray'));
|
|
results['result2'] = Blazor.invokeDotNetMethod(createMethodOptions('EchoOneParameter'), ...createArgumentList(1));
|
|
results['result3'] = Blazor.invokeDotNetMethod(createMethodOptions('EchoTwoParameters'), ...createArgumentList(2));
|
|
results['result4'] = Blazor.invokeDotNetMethod(createMethodOptions('EchoThreeParameters'), ...createArgumentList(3));
|
|
results['result5'] = Blazor.invokeDotNetMethod(createMethodOptions('EchoFourParameters'), ...createArgumentList(4));
|
|
results['result6'] = Blazor.invokeDotNetMethod(createMethodOptions('EchoFiveParameters'), ...createArgumentList(5));
|
|
results['result7'] = Blazor.invokeDotNetMethod(createMethodOptions('EchoSixParameters'), ...createArgumentList(6));
|
|
results['result8'] = Blazor.invokeDotNetMethod(createMethodOptions('EchoSevenParameters'), ...createArgumentList(7));
|
|
results['result9'] = Blazor.invokeDotNetMethod(createMethodOptions('EchoEightParameters'), ...createArgumentList(8));
|
|
|
|
console.log('Invoking void async methods.');
|
|
return Blazor.invokeDotNetMethodAsync(createMethodOptions('VoidParameterlessAsync'))
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('VoidWithOneParameterAsync'), ...createArgumentList(1)))
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('VoidWithTwoParametersAsync'), ...createArgumentList(2)))
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('VoidWithThreeParametersAsync'), ...createArgumentList(3)))
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('VoidWithFourParametersAsync'), ...createArgumentList(4)))
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('VoidWithFiveParametersAsync'), ...createArgumentList(5)))
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('VoidWithSixParametersAsync'), ...createArgumentList(6)))
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('VoidWithSevenParametersAsync'), ...createArgumentList(7)))
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('VoidWithEightParametersAsync'), ...createArgumentList(8)))
|
|
.then(() => {
|
|
console.log('Invoking returning async methods.');
|
|
return Blazor.invokeDotNetMethodAsync(createMethodOptions('ReturnArrayAsync'))
|
|
.then(r => results['result1Async'] = r)
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('EchoOneParameterAsync'), ...createArgumentList(1)))
|
|
.then(r => results['result2Async'] = r)
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('EchoTwoParametersAsync'), ...createArgumentList(2)))
|
|
.then(r => results['result3Async'] = r)
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('EchoThreeParametersAsync'), ...createArgumentList(3)))
|
|
.then(r => results['result4Async'] = r)
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('EchoFourParametersAsync'), ...createArgumentList(4)))
|
|
.then(r => results['result5Async'] = r)
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('EchoFiveParametersAsync'), ...createArgumentList(5)))
|
|
.then(r => results['result6Async'] = r)
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('EchoSixParametersAsync'), ...createArgumentList(6)))
|
|
.then(r => results['result7Async'] = r)
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('EchoSevenParametersAsync'), ...createArgumentList(7)))
|
|
.then(r => results['result8Async'] = r)
|
|
.then(() => Blazor.invokeDotNetMethodAsync(createMethodOptions('EchoEightParametersAsync'), ...createArgumentList(8)))
|
|
.then(r => results['result9Async'] = r);
|
|
})
|
|
.then(() => {
|
|
console.log('Invoking methods that throw exceptions');
|
|
try {
|
|
Blazor.invokeDotNetMethod(createMethodOptions('ThrowException'))
|
|
} catch (e) {
|
|
results['ThrowException'] = e.message;
|
|
}
|
|
|
|
try {
|
|
Blazor.invokeDotNetMethodAsync(createMethodOptions('AsyncThrowSyncException'));
|
|
} catch (e) {
|
|
results['AsyncThrowSyncException'] = e.message;
|
|
}
|
|
|
|
return Blazor.invokeDotNetMethodAsync(createMethodOptions('AsyncThrowAsyncException'))
|
|
.catch(e => {
|
|
results['AsyncThrowAsyncException'] = e.message;
|
|
return Promise.resolve();
|
|
})
|
|
.then(() => console.log('Done invoking interop methods'));
|
|
});
|
|
}
|
|
|
|
function createMethodOptions(methodName) {
|
|
return {
|
|
type: {
|
|
assembly: 'BasicTestApp',
|
|
name: 'BasicTestApp.InteropTest.JavaScriptInterop'
|
|
},
|
|
method: {
|
|
name: methodName
|
|
}
|
|
};
|
|
}
|
|
|
|
function createArgumentList(argumentNumber){
|
|
const array = new Array(argumentNumber);
|
|
if (argumentNumber === 0) {
|
|
return [];
|
|
}
|
|
for (var i = 0; i < argumentNumber; i++) {
|
|
switch (i) {
|
|
case 0:
|
|
array[i] = {
|
|
id: argumentNumber,
|
|
isValid: argumentNumber % 2 === 0,
|
|
data: {
|
|
source: `Some random text with at least ${argumentNumber} characters`,
|
|
start: argumentNumber,
|
|
length: argumentNumber
|
|
}
|
|
};
|
|
break;
|
|
case 1:
|
|
array[i] = argumentNumber;
|
|
break;
|
|
case 2:
|
|
array[i] = argumentNumber * 2;
|
|
break;
|
|
case 3:
|
|
array[i] = argumentNumber * 4;
|
|
break;
|
|
case 4:
|
|
array[i] = argumentNumber * 8;
|
|
break;
|
|
case 5:
|
|
array[i] = argumentNumber + 0.25;
|
|
break;
|
|
case 6:
|
|
array[i] = Array.apply(null, Array(argumentNumber)).map((v, i) => i + 0.5);
|
|
break;
|
|
case 7:
|
|
array[i] = {
|
|
source: `Some random text with at least ${i} characters`,
|
|
start: argumentNumber + 1,
|
|
length: argumentNumber + 1
|
|
}
|
|
break;
|
|
default:
|
|
console.log(i);
|
|
throw new Error('Invalid argument count!');
|
|
}
|
|
}
|
|
|
|
return array;
|
|
}
|
|
|
|
Blazor.registerFunction('BasicTestApp.Interop.InvokeDotNetInteropMethodsAsync', invokeDotNetInteropMethodsAsync);
|
|
Blazor.registerFunction('BasicTestApp.Interop.CollectResults', collectInteropResults);
|
|
|
|
Blazor.registerFunction('BasicTestApp.Interop.FunctionThrows', functionThrowsException);
|
|
Blazor.registerFunction('BasicTestApp.Interop.AsyncFunctionThrowsSyncException', asyncFunctionThrowsSyncException);
|
|
Blazor.registerFunction('BasicTestApp.Interop.AsyncFunctionThrowsAsyncException', asyncFunctionThrowsAsyncException);
|
|
|
|
function functionThrowsException() {
|
|
throw new Error('Function threw an exception!');
|
|
}
|
|
|
|
function asyncFunctionThrowsSyncException() {
|
|
throw new Error('Function threw a sync exception!');
|
|
}
|
|
|
|
function asyncFunctionThrowsAsyncException() {
|
|
return new Promise((resolve, reject) => {
|
|
setTimeout(() => reject(new Error('Function threw an async exception!')), 3000);
|
|
});
|
|
}
|
|
|
|
function collectInteropResults() {
|
|
let result = {};
|
|
let properties = Object.getOwnPropertyNames(results);
|
|
for (let i = 0; i < properties.length; i++) {
|
|
let property = properties[i];
|
|
result[property] = btoa(JSON.stringify(results[property]));
|
|
}
|
|
|
|
return result;
|
|
}
|