// Test calling a function using a previously captured stack as an async stack.

function getAsyncStack() {
  return saveStack();
}

// asyncCause may contain non-ASCII characters.
let testAsyncCause = "Tes" + String.fromCharCode(355) + "String";

callFunctionWithAsyncStack(function asyncCallback() {
  let stack = saveStack();

  assertEq(stack.functionDisplayName, "asyncCallback");
  assertEq(stack.parent, null);
  assertEq(stack.asyncCause, null);

  assertEq(stack.asyncParent.functionDisplayName, "getAsyncStack");
  assertEq(stack.asyncParent.asyncCause, testAsyncCause);
  assertEq(stack.asyncParent.asyncParent, null);

  assertEq(stack.asyncParent.parent.asyncCause, null);
  assertEq(stack.asyncParent.parent.asyncParent, null);
  assertEq(stack.asyncParent.parent.parent, null);
}, getAsyncStack(), testAsyncCause);