/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

const {
  SymbolActor,
} = require("resource://devtools/server/actors/object/symbol.js");

function run_test() {
  test_SA_destroy();
  test_SA_form();
  test_SA_raw();
}

const SYMBOL_NAME = "abc";
const TEST_SYMBOL = Symbol(SYMBOL_NAME);

function makeMockSymbolActor() {
  const symbol = TEST_SYMBOL;
  const mockThreadActor = { conn: null };
  const actor = new SymbolActor(mockThreadActor, symbol);
  actor.actorID = "symbol1";
  const parentPool = {
    symbolActors: {
      [symbol]: actor,
    },
    unmanage: () => {},
  };
  actor.getParent = () => parentPool;
  return actor;
}

function test_SA_destroy() {
  const actor = makeMockSymbolActor();
  strictEqual(actor.getParent().symbolActors[TEST_SYMBOL], actor);

  actor.destroy();
  strictEqual(TEST_SYMBOL in actor.getParent().symbolActors, false);
}

function test_SA_form() {
  const actor = makeMockSymbolActor();
  const form = actor.form();
  strictEqual(form.type, "symbol");
  strictEqual(form.actor, actor.actorID);
  strictEqual(form.name, SYMBOL_NAME);
}

function test_SA_raw() {
  const actor = makeMockSymbolActor();
  strictEqual(actor.rawObj, TEST_SYMBOL);
}
