Skip to content
Open
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
13 changes: 9 additions & 4 deletions Source/Tests/ExcelDna.RuntimeTests/NativeAOTOutOfProcess.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,40 +11,45 @@ public class NativeAOTOutOfProcess
[ExcelFact(Workbook = "", AddIn = AddInPath.RuntimeTestsAOT)]
public void AsyncTask()
{
Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B1"];
functionRange.Formula = "=NativeAsyncTaskHello(\"world\", 200)";

Automation.WaitFor(() => functionRange.Value?.ToString() == "Hello native async task world", 1000);

Assert.Equal("Hello native async task world", functionRange.Value.ToString());
}
});
}

[ExcelFact(Workbook = "", AddIn = AddInPath.RuntimeTestsAOT)]
public void AsyncSleep()
{
Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B1"];
functionRange.Formula = "=NativeAsyncHello(\"world\", 0)";

Automation.WaitFor(() => functionRange.Value?.ToString() == "Hello native async world", 1000);

Assert.Equal("Hello native async world", functionRange.Value.ToString());
}
});

Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["C1"];
functionRange.Formula = "=NativeAsyncHello(\"world\", 200)";

Automation.WaitFor(() => functionRange.Value?.ToString() == "Hello native async world", 2000);

Assert.Equal("Hello native async world", functionRange.Value.ToString());
}
});
}

[ExcelFact(Workbook = "", AddIn = AddInPath.RuntimeTestsAOT)]
public void DynamicApplication()
{
Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRange1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["E1"];

Expand All @@ -53,7 +58,7 @@ public void DynamicApplication()

Assert.Equal(-4152, functionRange2.Value);
Assert.Equal(-4152, (int)functionRange1.HorizontalAlignment);
}
});
}
}
}
Expand Down
171 changes: 93 additions & 78 deletions Source/Tests/ExcelDna.RuntimeTests/ObjectHandleOutOfProcess.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,28 +11,32 @@ public class ObjectHandleOutOfProcess
[ExcelFact(Workbook = "", AddIn = AddInPath.RuntimeTests)]
public void ThreadSafe()
{
for (int i = 1; i <= 5; ++i)
Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
for (int i = 1; i <= 5; ++i)
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range[$"C{i}"];
functionRange.Formula = $"=MyCreateCalcTS({(i - 1) * 20}, 0)";
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range[$"C{i}"];
functionRange.Formula = $"=MyCreateCalcTS({(i - 1) * 20}, 0)";
}
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range[$"D{i}"];
functionRange.Formula = $"=MyCalcSumTS(C{i})";
}
}

for (int i = 1; i <= 5; ++i)
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range[$"D{i}"];
functionRange.Formula = $"=MyCalcSumTS(C{i})";
Assert.Equal($"{(i - 1) * 20}", functionRange.Value.ToString());
}
}

for (int i = 1; i <= 5; ++i)
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range[$"D{i}"];
Assert.Equal($"{(i - 1) * 20}", functionRange.Value.ToString());
}
});
}

[ExcelFact(Workbook = "", AddIn = AddInPath.RuntimeTests)]
public void Disposable()
{
Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRangeC1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["C1"];
functionRangeC1.Formula = "=MyGetCreatedDisposableObjectsCount()";
Expand All @@ -51,8 +55,9 @@ public void Disposable()
Assert.Equal(1, finalCreatedObjectsCount - initialCreatedObjectsCount);

Assert.Equal("1", functionRange2.Value.ToString());
}
});

Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRange1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["C1"];
functionRange1.Formula = "=MyCreateDisposableObject(5)";
Expand All @@ -61,8 +66,9 @@ public void Disposable()
functionRange2.Formula = "=MyGetDisposableObjectsCount()";

Assert.Equal("2", functionRange2.Value.ToString());
}
});

Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRange1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B1"];
functionRange1.Clear();
Expand All @@ -72,86 +78,92 @@ public void Disposable()
functionRange2.Formula = "=MyGetDisposableObjectsCount()";

Assert.Equal("1", functionRange2.Value.ToString());
}
});
}

[ExcelFact(Workbook = "", AddIn = AddInPath.RuntimeTests)]
public void TaskObjectStableCreate()
{
string v1;
Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["A1"];
functionRange.Formula = $"=MyTaskCreateCalc(100, 1, 2)";
string v1;
{
Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["A2"];
functionRange2.Formula = $"=MyCalcSum(A1)";
Automation.WaitFor(() => functionRange2.Value?.ToString() == "3", 3000);
Assert.Equal("3", functionRange2.Value.ToString());
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["A1"];
functionRange.Formula = $"=MyTaskCreateCalc(100, 1, 2)";
{
Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["A2"];
functionRange2.Formula = $"=MyCalcSum(A1)";
Automation.WaitFor(() => functionRange2.Value?.ToString() == "3", 3000);
Assert.Equal("3", functionRange2.Value.ToString());
}
v1 = functionRange.Value.ToString();
}
v1 = functionRange.Value.ToString();
}

{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B1"];
functionRange.Formula = $"=MyTaskCreateCalc(100, 1, 2)";
{
Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B2"];
functionRange2.Formula = $"=MyCalcSum(B1)";
Automation.WaitFor(() => functionRange2.Value?.ToString() == "3", 3000);
Assert.Equal("3", functionRange2.Value.ToString());
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B1"];
functionRange.Formula = $"=MyTaskCreateCalc(100, 1, 2)";
{
Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B2"];
functionRange2.Formula = $"=MyCalcSum(B1)";
Automation.WaitFor(() => functionRange2.Value?.ToString() == "3", 3000);
Assert.Equal("3", functionRange2.Value.ToString());
}
string v2 = functionRange.Value.ToString();
Assert.Equal(v1, v2);
}
string v2 = functionRange.Value.ToString();
Assert.Equal(v1, v2);
}
});
}

[ExcelFact(Workbook = "", AddIn = AddInPath.RuntimeTests)]
public void TaskDisposable()
{
foreach (int delay in new[] { 0, 500 })
{
Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRangeC1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["C1"];
functionRangeC1.Formula = "=MyGetCreatedDisposableObjectsCount()";
int initialCreatedObjectsCount = (int)functionRangeC1.Value;
{
Range functionRangeC1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["C1"];
functionRangeC1.Formula = "=MyGetCreatedDisposableObjectsCount()";
int initialCreatedObjectsCount = (int)functionRangeC1.Value;

Range functionRange1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B1"];
functionRange1.Formula = $"=MyTaskCreateDisposableObject({delay}, 1)";
Automation.WaitFor(() => functionRange1.Value.ToString().Contains("DisposableObject"), 3000);
Range functionRange1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B1"];
functionRange1.Formula = $"=MyTaskCreateDisposableObject({delay}, 1)";
Automation.WaitFor(() => functionRange1.Value.ToString().Contains("DisposableObject"), 3000);

Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B2"];
functionRange2.Formula = "=MyGetDisposableObjectsCount()";
Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B2"];
functionRange2.Formula = "=MyGetDisposableObjectsCount()";

Range functionRangeC2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["C2"];
functionRangeC2.Formula = "=MyGetCreatedDisposableObjectsCount()";
int finalCreatedObjectsCount = (int)functionRangeC2.Value;
Range functionRangeC2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["C2"];
functionRangeC2.Formula = "=MyGetCreatedDisposableObjectsCount()";
int finalCreatedObjectsCount = (int)functionRangeC2.Value;

Assert.Equal(1, finalCreatedObjectsCount - initialCreatedObjectsCount);
Assert.Equal(1, finalCreatedObjectsCount - initialCreatedObjectsCount);

Assert.Equal("1", functionRange2.Value.ToString());
}
Assert.Equal("1", functionRange2.Value.ToString());
}

{
Range functionRange1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["C1"];
functionRange1.Formula = $"=MyTaskCreateDisposableObject({delay}, 5)";
Automation.WaitFor(() => functionRange1.Value.ToString().Contains("DisposableObject"), 3000);
{
Range functionRange1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["C1"];
functionRange1.Formula = $"=MyTaskCreateDisposableObject({delay}, 5)";
Automation.WaitFor(() => functionRange1.Value.ToString().Contains("DisposableObject"), 3000);

Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["C2"];
functionRange2.Formula = "=MyGetDisposableObjectsCount()";
Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["C2"];
functionRange2.Formula = "=MyGetDisposableObjectsCount()";

Assert.Equal("2", functionRange2.Value.ToString());
}
Assert.Equal("2", functionRange2.Value.ToString());
}

{
Range functionRange1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B1"];
functionRange1.Clear();
Automation.Wait(2000);
{
Range functionRange1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B1"];
functionRange1.Clear();
Automation.Wait(2000);

Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B2"];
functionRange2.Formula = "=MyGetDisposableObjectsCount()";
Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B2"];
functionRange2.Formula = "=MyGetDisposableObjectsCount()";

Assert.Equal("1", functionRange2.Value.ToString());
}
Assert.Equal("1", functionRange2.Value.ToString());
}
});
}
}

Expand All @@ -160,27 +172,30 @@ public void AsyncObjectCreate()
{
foreach (int delay in new[] { 0, 500 })
{
Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRange1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["E1"];
functionRange1.Formula = $"=MyAsyncCreateCalc({delay}, 14, 15)";
Automation.WaitFor(() => functionRange1.Value.ToString().Contains("Calc"), 3000);
{
Range functionRange1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["E1"];
functionRange1.Formula = $"=MyAsyncCreateCalc({delay}, 14, 15)";
Automation.WaitFor(() => functionRange1.Value.ToString().Contains("Calc"), 3000);

Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["E2"];
functionRange2.Formula = "=MyCalcSum(E1)";
Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["E2"];
functionRange2.Formula = "=MyCalcSum(E1)";

Assert.Equal("29", functionRange2.Value.ToString());
}
Assert.Equal("29", functionRange2.Value.ToString());
}

{
Range functionRange1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["F1"];
functionRange1.Formula = $"=MyAsyncCreateCalcWithCancellation({delay}, 1, 2)";
Automation.WaitFor(() => functionRange1.Value.ToString().Contains("Calc"), 3000);
{
Range functionRange1 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["F1"];
functionRange1.Formula = $"=MyAsyncCreateCalcWithCancellation({delay}, 1, 2)";
Automation.WaitFor(() => functionRange1.Value.ToString().Contains("Calc"), 3000);

Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["F2"];
functionRange2.Formula = "=MyCalcSum(F1)";
Range functionRange2 = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["F2"];
functionRange2.Formula = "=MyCalcSum(F1)";

Assert.Equal("3", functionRange2.Value.ToString());
}
Assert.Equal("3", functionRange2.Value.ToString());
}
});
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,22 +11,25 @@ public class RegistrationOutOfProcess
[ExcelFact(Workbook = "", AddIn = AddInPath.RuntimeTests)]
public void AsyncSleep()
{
Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B1"];
functionRange.Formula = "=MyAsyncHello(\"world\", 0)";

Automation.WaitFor(() => functionRange.Value?.ToString() == "Hello async world", 1000);

Assert.Equal("Hello async world", functionRange.Value.ToString());
}
});

Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["C1"];
functionRange.Formula = "=MyAsyncHello(\"world\", 200)";

Automation.WaitFor(() => functionRange.Value?.ToString() == "Hello async world", 2000);

Assert.Equal("Hello async world", functionRange.Value.ToString());
}
});
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,36 @@ public class RegistrationSampleOutOfProcess
[ExcelFact(Workbook = "", AddIn = AddInPath.RegistrationSample)]
public void AsyncSleep()
{
Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B1"];
functionRange.Formula = "=dnaDelayedHello(\"world\", 0)";

Automation.WaitFor(() => functionRange.Value?.ToString() == "Hello world!", 1000);

Assert.Equal("Hello world!", functionRange.Value.ToString());
}
});

Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["C1"];
functionRange.Formula = "=dnaDelayedHello(\"world\", 200)";

Automation.WaitFor(() => functionRange.Value?.ToString() == "Hello world!", 2000);

Assert.Equal("Hello world!", functionRange.Value.ToString());
}
});
}

[ExcelFact(Workbook = "", AddIn = AddInPath.RegistrationSample)]
public void GettingData()
{
Runner.ExecuteWithRetryWhenExcelBusy(() =>
{
Range functionRange = ((Worksheet)ExcelDna.Testing.Util.Workbook.Sheets[1]).Range["B1"];
functionRange.Formula = "=dnaDelayedHelloAsync(\"a\", 2000)";
Assert.Equal(-2146826245, functionRange.Value);
}
});
}
}
}
Loading