// Copyright 2014 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Flags: --expose-debug-as debug --harmony-symbols
// Test the mirror object for symbols.

function testSymbolMirror(symbol, description) {
  // Create mirror and JSON representation.
  var mirror = debug.MakeMirror(symbol);
  var serializer = debug.MakeMirrorSerializer();
  var json = JSON.stringify(serializer.serializeValue(mirror));

  // Check the mirror hierachy.
  assertTrue(mirror instanceof debug.Mirror);
  assertTrue(mirror instanceof debug.ValueMirror);
  assertTrue(mirror instanceof debug.SymbolMirror);

  // Check the mirror properties.
  assertTrue(mirror.isSymbol());
  assertEquals(description, mirror.description());
  assertEquals('symbol', mirror.type());
  assertTrue(mirror.isPrimitive());
  var description_text = description === undefined ? "" : description;
  assertEquals('Symbol(' + description_text + ')', mirror.toText());
  assertSame(symbol, mirror.value());

  // Parse JSON representation and check.
  var fromJSON = eval('(' + json + ')');
  assertEquals('symbol', fromJSON.type);
  assertEquals(description, fromJSON.description);
}

// Test a number of different symbols.
testSymbolMirror(Symbol("a"), "a");
testSymbolMirror(Symbol(12), "12");
testSymbolMirror(Symbol.for("b"), "b");
testSymbolMirror(Symbol(), undefined);
