// Tests that opaque roots behave correctly during young generation collections

var Element = $vm.Element;
var Root = $vm.Root;
var getElement = $vm.getElement;

try {
    // regression test for bug 160773.  This should not crash.
    new (Element.bind());
} catch(e) {
}

// Create the primary Root.
var root = new Root();
// This secondary root is for allocating a second Element without overriding 
// the primary Root's Element.
var otherRoot = new Root();

// Run an Eden collection so that the Root will be in the old gen (and won't be rescanned).
edenGC();

// Create a new Element and set a custom property on it.
var elem = new Element(root);
elem.customProperty = "hello";

// Make the Element unreachable except through the ephemeron with the Root.
elem = null;

// Create another Element so that we process the weak handles in block of the original Element.
var test = new Element(otherRoot);

// Run another Eden collection to process the weak handles in the Element's block. If opaque roots
// are cleared then we'll think that the original Element is dead because the Root won't be in the 
// set of opaque roots.
edenGC();

// Check if the primary Root's Element exists and has our custom property.
var elem = getElement(root);
if (elem.customProperty != "hello")
    throw new Error("bad value of customProperty: " + elem.customProperty);
