Tests different combinations of async stacks in chains.
Regular
userFunction (test.js:1:36)
-- inner async --
runWithRegular (utils.js:2:12)
inner (test.js:2:28)
runWithNone (utils.js:27:2)
(anonymous) (test.js:3:10)

Regular - Regular
userFunction (test.js:1:36)
-- inner async --
runWithRegular (utils.js:2:12)
inner (test.js:2:28)
-- outer async --
runWithRegular (utils.js:2:12)
(anonymous) (test.js:3:10)

Regular - EmptyName
userFunction (test.js:1:36)
-- inner async --
runWithRegular (utils.js:2:12)
inner (test.js:2:28)
-- <empty> --
runWithEmptyName (utils.js:6:12)
(anonymous) (test.js:3:10)

Regular - EmptyStack
userFunction (test.js:1:36)
-- inner async --
runWithRegular (utils.js:2:12)
inner (test.js:2:28)

Regular - EmptyNameEmptyStack
userFunction (test.js:1:36)
-- inner async --
runWithRegular (utils.js:2:12)
inner (test.js:2:28)

Regular - External
userFunction (test.js:1:36)
-- inner async --
runWithRegular (utils.js:2:12)
inner (test.js:2:28)
runWithRegular (utils.js:21:4)
  <external stack>

EmptyName
userFunction (test.js:1:36)
-- <empty> --
runWithEmptyName (utils.js:6:12)
inner (test.js:2:28)
runWithNone (utils.js:27:2)
(anonymous) (test.js:3:10)

EmptyName - Regular
userFunction (test.js:1:36)
-- <empty> --
runWithEmptyName (utils.js:6:12)
inner (test.js:2:28)
-- outer async --
runWithRegular (utils.js:2:12)
(anonymous) (test.js:3:10)

EmptyName - EmptyName
userFunction (test.js:1:36)
-- <empty> --
runWithEmptyName (utils.js:6:12)
inner (test.js:2:28)
-- <empty> --
runWithEmptyName (utils.js:6:12)
(anonymous) (test.js:3:10)

EmptyName - EmptyStack
userFunction (test.js:1:36)
-- <empty> --
runWithEmptyName (utils.js:6:12)
inner (test.js:2:28)

EmptyName - EmptyNameEmptyStack
userFunction (test.js:1:36)
-- <empty> --
runWithEmptyName (utils.js:6:12)
inner (test.js:2:28)

EmptyName - External
userFunction (test.js:1:36)
-- <empty> --
runWithEmptyName (utils.js:6:12)
inner (test.js:2:28)
runWithRegular (utils.js:21:4)
  <external stack>

EmptyStack
userFunction (test.js:1:36)

EmptyStack - Regular
userFunction (test.js:1:36)
-- inner async --
-- outer async --
runWithRegular (utils.js:2:12)
(anonymous) (test.js:3:10)

EmptyStack - EmptyName
userFunction (test.js:1:36)
-- inner async --
-- <empty> --
runWithEmptyName (utils.js:6:12)
(anonymous) (test.js:3:10)

EmptyStack - EmptyStack
userFunction (test.js:1:36)

EmptyStack - EmptyNameEmptyStack
userFunction (test.js:1:36)

EmptyStack - External
userFunction (test.js:1:36)
-- inner async --
  <external stack>

EmptyNameEmptyStack
userFunction (test.js:1:36)

EmptyNameEmptyStack - Regular
userFunction (test.js:1:36)
-- outer async --
runWithRegular (utils.js:2:12)
(anonymous) (test.js:3:10)

EmptyNameEmptyStack - EmptyName
userFunction (test.js:1:36)
-- <empty> --
runWithEmptyName (utils.js:6:12)
(anonymous) (test.js:3:10)

EmptyNameEmptyStack - EmptyStack
userFunction (test.js:1:36)

EmptyNameEmptyStack - EmptyNameEmptyStack
userFunction (test.js:1:36)

EmptyNameEmptyStack - External
userFunction (test.js:1:36)
-- <empty> --
  <external stack>

External
userFunction (test.js:1:36)
runWithRegular (utils.js:21:4)
  <external stack>

