<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <title>script.aculo.us Unit test file</title>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  <script src="../../lib/prototype.js" type="text/javascript"></script>
  <script src="../../src/scriptaculous.js" type="text/javascript"></script>
  <script src="../../src/unittest.js" type="text/javascript"></script>
  <link rel="stylesheet" href="../test.css" type="text/css" />
</head>
<body>
<h1>script.aculo.us Unit test file</h1>
<p>
  Tests for Postion.clone (to be moved to Prototype)
</p>

<!-- Log output -->
<div id="testlog"> </div>

<!-- Tests follow -->
<script type="text/javascript" language="javascript" charset="utf-8">
// <![CDATA[

  function prepareTarget(contained, position1, position2) {
    var target;
    if($('target_div')) Element.remove('target_div');
    if($('container_div')) Element.remove('container_div');
    if(contained) {
      target = Builder.node('div', 
        {id: 'container_div', style: 'position:' + position1},
        [Builder.node('div', {id: 'target_div', style: 'position: ' +position2})]);
    } else {
      target = Builder.node('div', 
        {id: 'target_div', style: 'position:' + position1}, '456');
    }
    document.body.appendChild(target);
    Position.clone($('source_div'),$('target_div'));
  }
  
  function prepareTargetHidden(contained, position1, position2) {
    var target;
    if($('target_div')) Element.remove('target_div');
    if($('container_div')) Element.remove('container_div');
    if(contained) {
      target = Builder.node('div', 
        {id: 'container_div', style: 'position:' + position1},
        [Builder.node('div', {id: 'target_div', style: 'display:none; position: ' +position2})]);
    } else {
      target = Builder.node('div', 
        {id: 'target_div', style: 'display:none; position:' + position1}, '456');
    }
    document.body.appendChild(target);
    Position.clone($('source_div'),$('target_div'));
    Element.show($('target_div'));
  }
  
  new Test.Unit.Runner({
    
    teardown: function() {
      Element.remove($('source_div'));
    },

    testPositionCloneFromAbsolute: function() { with(this) {
      var source = Builder.node('div', 
        {id: 'source_div', style: 'position:absolute; top:20px; left:120px; width:100px; height:50px;'}, '123');
      document.body.appendChild(source);
      var expected = Object.inspect([120, 20]);
      assertEqual(expected, Object.inspect(Position.page($('source_div'))));
      
      prepareTarget(false, 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute BODY child");
      
      prepareTarget(false, 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed BODY child");
            
      prepareTarget(true, 'absolute', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of absolute BODY child");
      
      prepareTarget(true, 'absolute', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of absolute BODY child");
      
      prepareTarget(true, 'relative', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of relative BODY child");

      prepareTarget(true, 'relative', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of relative BODY child");
      
      prepareTarget(true, 'static', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of static BODY child");

      prepareTarget(true, 'static', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of static BODY child");
    }},
    
    testPositionCloneFromRelative: function() { with(this) {
      var source = Builder.node('div', 
        {id: 'source_div', style: 'position:relative; top:20px; left:120px; width:100px; height:50px;'}, '123');
      document.body.appendChild(source);
      var expected =  Object.inspect(Position.page($('source_div')));
      assertEqual(expected, Object.inspect(Position.page($('source_div'))));

      prepareTarget(false, 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute BODY child");

      prepareTarget(false, 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed BODY child");

      prepareTarget(true, 'absolute', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of absolute BODY child");

      prepareTarget(true, 'absolute', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of absolute BODY child");

      prepareTarget(true, 'relative', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of relative BODY child");

      prepareTarget(true, 'relative', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of relative BODY child");

      prepareTarget(true, 'static', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of static BODY child");

      prepareTarget(true, 'static', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of static BODY child");
    }},
    
    testPositionCloneFromStatic: function() { with(this) {
      var source = Builder.node('div', 
        {id: 'source_div', style: 'top:20px; left:120px; width:100px; height:50px;'}, '123');
      document.body.appendChild(source);
      var expected =  Object.inspect(Position.page($('source_div')));
      assertEqual(expected, Object.inspect(Position.page($('source_div'))));
    
      prepareTarget(false, 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute BODY child");

      prepareTarget(false, 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed BODY child");

      prepareTarget(true, 'absolute', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of absolute BODY child");

      prepareTarget(true, 'absolute', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of absolute BODY child");

      prepareTarget(true, 'relative', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of relative BODY child");

      prepareTarget(true, 'relative', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of relative BODY child");

      prepareTarget(true, 'static', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of static BODY child");

      prepareTarget(true, 'static', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of static BODY child");
    }},
    
    testPositionCloneFromAbsoluteWithHiddenTarget: function() { with(this) {
      var source = Builder.node('div', 
        {id: 'source_div', style: 'position:absolute; top:20px; left:120px; width:100px; height:50px;'}, '123');
      document.body.appendChild(source);
      var expected = Object.inspect([120, 20]);
      assertEqual(expected, Object.inspect(Position.page($('source_div'))));
    
      prepareTargetHidden(false, 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute BODY child");
    
      prepareTargetHidden(false, 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed BODY child");
    
      prepareTargetHidden(true, 'absolute', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of absolute BODY child");
    
      prepareTargetHidden(true, 'absolute', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of absolute BODY child");
    
      prepareTargetHidden(true, 'relative', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of relative BODY child");
    
      prepareTargetHidden(true, 'relative', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of relative BODY child");
    
      prepareTargetHidden(true, 'static', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of static BODY child");
    
      prepareTargetHidden(true, 'static', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of static BODY child");
    }},
    
    testPositionCloneFromRelativeWithHiddenTarget: function() { with(this) {
      var source = Builder.node('div', 
        {id: 'source_div', style: 'position:relative; top:20px; left:120px; width:100px; height:50px;'}, '123');
      document.body.appendChild(source);
      var expected =  Object.inspect(Position.page($('source_div')));
      assertEqual(expected, Object.inspect(Position.page($('source_div'))));
    
      prepareTargetHidden(false, 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute BODY child");
    
      prepareTargetHidden(false, 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed BODY child");
    
      prepareTargetHidden(true, 'absolute', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of absolute BODY child");
    
      prepareTargetHidden(true, 'absolute', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of absolute BODY child");
    
      prepareTargetHidden(true, 'relative', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of relative BODY child");
    
      prepareTargetHidden(true, 'relative', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of relative BODY child");
    
      prepareTargetHidden(true, 'static', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of static BODY child");
    
      prepareTargetHidden(true, 'static', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of static BODY child");
    }},
    
    testPositionCloneFromStaticWithHiddenTarget: function() { with(this) {
      var source = Builder.node('div', 
        {id: 'source_div', style: 'top:20px; left:120px; width:100px; height:50px;'}, '123');
      document.body.appendChild(source);
      var expected =  Object.inspect(Position.page($('source_div')));
      assertEqual(expected, Object.inspect(Position.page($('source_div'))));
    
      prepareTargetHidden(false, 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute BODY child");
    
      prepareTargetHidden(false, 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed BODY child");
    
      prepareTargetHidden(true, 'absolute', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of absolute BODY child");
    
      prepareTargetHidden(true, 'absolute', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of absolute BODY child");
    
      prepareTargetHidden(true, 'relative', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of relative BODY child");
    
      prepareTargetHidden(true, 'relative', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of relative BODY child");
    
      prepareTargetHidden(true, 'static', 'absolute');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to absolute child of static BODY child");
    
      prepareTargetHidden(true, 'static', 'fixed');    
      assertEqual(expected, Object.inspect(Position.page($('target_div'))),
        "Clone to fixed child of static BODY child");
    }}
    
  });

// ]]>
</script>

<!-- Test elements will be inserted after this -->

</body>
</html>