text: // Copyright 2010 The Closure Library Authors. All Rights Reserved.
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //      http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS-IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  
  goog.provide('goog.fx.DragDropGroupTest');
  goog.setTestOnly('goog.fx.DragDropGroupTest');
  
  goog.require('goog.events');
  goog.require('goog.fx.DragDropGroup');
  goog.require('goog.testing.jsunit');
  
  var s1;
  var s2;
  var t1;
  var t2;
  
  var source = null;
  var target = null;
  
  function setUpPage() {
    s1 = document.getElementById('s1');
    s2 = document.getElementById('s2');
    t1 = document.getElementById('t1');
    t2 = document.getElementById('t2');
  }
  
  
  function setUp() {
    source = new goog.fx.DragDropGroup();
    source.setSourceClass('ss');
    source.setTargetClass('st');
  
    target = new goog.fx.DragDropGroup();
    target.setSourceClass('ts');
    target.setTargetClass('tt');
  
    source.addTarget(target);
  }
  
  
  function tearDown() {
    source.removeItems();
    target.removeItems();
  }
  
  
  function addElementsToGroups() {
    source.addItem(s1);
    source.addItem(s2);
    target.addItem(t1);
    target.addItem(t2);
  }
  
  
  function testAddItemsBeforeInit() {
    addElementsToGroups();
    source.init();
    target.init();
  
    assertEquals(2, source.items_.length);
    assertEquals(2, target.items_.length);
  
    assertEquals('s ss', s1.className);
    assertEquals('s ss', s2.className);
    assertEquals('t tt', t1.className);
    assertEquals('t tt', t2.className);
  
    assertTrue(goog.events.hasListener(s1));
    assertTrue(goog.events.hasListener(s2));
    assertFalse(goog.events.hasListener(t1));
    assertFalse(goog.events.hasListener(t2));
  }
  
  function testAddItemsAfterInit() {
    source.init();
    target.init();
    addElementsToGroups();
  
    assertEquals(2, source.items_.length);
    assertEquals(2, target.items_.length);
  
    assertEquals('s ss', s1.className);
    assertEquals('s ss', s2.className);
    assertEquals('t tt', t1.className);
    assertEquals('t tt', t2.className);
  
    assertTrue(goog.events.hasListener(s1));
    assertTrue(goog.events.hasListener(s2));
    assertFalse(goog.events.hasListener(t1));
    assertFalse(goog.events.hasListener(t2));
  }
  
  
  function testRemoveItems() {
    source.init();
    target.init();
    addElementsToGroups();
  
    assertEquals(2, source.items_.length);
    assertEquals(s1, source.items_[0].element);
    assertEquals(s2, source.items_[1].element);
  
    assertEquals('s ss', s1.className);
    assertEquals('s ss', s2.className);
    assertTrue(goog.events.hasListener(s1));
    assertTrue(goog.events.hasListener(s2));
  
    source.removeItems();
  
    assertEquals(0, source.items_.length);
  
    assertEquals('s', s1.className);
    assertEquals('s', s2.className);
    assertFalse(goog.events.hasListener(s1));
    assertFalse(goog.events.hasListener(s2));
  }
  
  function testRemoveSourceItem1() {
    source.init();
    target.init();
    addElementsToGroups();
  
    assertEquals(2, source.items_.length);
    assertEquals(s1, source.items_[0].element);
    assertEquals(s2, source.items_[1].element);
  
    assertEquals('s ss', s1.className);
    assertEquals('s ss', s2.className);
    assertTrue(goog.events.hasListener(s1));
    assertTrue(goog.events.hasListener(s2));
  
    source.removeItem(s1);
  
    assertEquals(1, source.items_.length);
    assertEquals(s2, source.items_[0].element);
  
    assertEquals('s', s1.className);
    assertEquals('s ss', s2.className);
    assertFalse(goog.events.hasListener(s1));
    assertTrue(goog.events.hasListener(s2));
  }
  
  
  function testRemoveSourceItem2() {
    source.init();
    target.init();
    addElementsToGroups();
  
    assertEquals(2, source.items_.length);
    assertEquals(s1, source.items_[0].element);
    assertEquals(s2, source.items_[1].element);
  
    assertEquals('s ss', s1.className);
    assertEquals('s ss', s2.className);
    assertTrue(goog.events.hasListener(s1));
    assertTrue(goog.events.hasListener(s2));
  
    source.removeItem(s2);
  
    assertEquals(1, source.items_.length);
    assertEquals(s1, source.items_[0].element);
  
    assertEquals('s ss', s1.className);
    assertEquals('s', s2.className);
    assertTrue(goog.events.hasListener(s1));
    assertFalse(goog.events.hasListener(s2));
  }
  
  
  function testRemoveTargetItem1() {
    source.init();
    target.init();
    addElementsToGroups();
  
    assertEquals(2, target.items_.length);
    assertEquals(t1, target.items_[0].element);
    assertEquals(t2, target.items_[1].element);
  
    assertEquals('t tt', t1.className);
    assertEquals('t tt', t2.className);
    assertFalse(goog.events.hasListener(t1));
    assertFalse(goog.events.hasListener(t2));
  
    target.removeItem(t1);
  
    assertEquals(1, target.items_.length);
    assertEquals(t2, target.items_[0].element);
  
    assertEquals('t', t1.className);
    assertEquals('t tt', t2.className);
    assertFalse(goog.events.hasListener(t1));
    assertFalse(goog.events.hasListener(t2));
  }
  
  
  function testRemoveTargetItem2() {
    source.init();
    target.init();
    addElementsToGroups();
  
    assertEquals(2, target.items_.length);
    assertEquals(t1, target.items_[0].element);
    assertEquals(t2, target.items_[1].element);
  
    assertEquals('t tt', t1.className);
    assertEquals('t tt', t2.className);
    assertFalse(goog.events.hasListener(t1));
    assertFalse(goog.events.hasListener(t2));
  
    target.removeItem(t2);
  
    assertEquals(1, target.items_.length);
    assertEquals(t1, target.items_[0].element);
  
    assertEquals('t tt', t1.className);
    assertEquals('t', t2.className);
    assertFalse(goog.events.hasListener(t1));
    assertFalse(goog.events.hasListener(t2));
  }
  