Package com.sun.sgs.test.impl.util

Source Code of com.sun.sgs.test.impl.util.TestBindingKeyedSetImpl

/*
* Copyright 2007-2010 Sun Microsystems, Inc.
*
* This file is part of Project Darkstar Server.
*
* Project Darkstar Server is free software: you can redistribute it
* and/or modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation and
* distributed hereunder to you.
*
* Project Darkstar Server is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*
* --
*/

package com.sun.sgs.test.impl.util;

import com.sun.sgs.app.ManagedObject;
import com.sun.sgs.app.ObjectNotFoundException;
import com.sun.sgs.impl.util.BindingKeyedCollections;
import com.sun.sgs.impl.util.BindingKeyedCollectionsImpl;
import com.sun.sgs.service.DataService;
import com.sun.sgs.test.util.DummyTransactionProxy;
import com.sun.sgs.tools.test.FilteredNameRunner;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

/** Test the BindingKeyedSetImpl class. */
@RunWith(FilteredNameRunner.class)
public class TestBindingKeyedSetImpl extends TestCase {
   
    /** The transaction proxy. */
    private DummyTransactionProxy txnProxy;

    /** The collections factory. */
    private BindingKeyedCollections collectionsFactory;

    /** The data service. */
    private DummyDataService dataService;

    /** Creates an instance. */
    public TestBindingKeyedSetImpl() {
  super();
    }

    /** Prints the test case and sets the service field to a new instance. */
    @Before
    public void setUp() {
  txnProxy = new DummyTransactionProxy();
  dataService = new DummyDataService();
  txnProxy.setComponent(DataService.class, dataService);
  collectionsFactory = new BindingKeyedCollectionsImpl(txnProxy);
    }

    /* -- Tests -- */

    @Test
    public void testNewSetWithNullPrefix() {
  try {
      collectionsFactory.newSet(null);
      fail("expected NullPointerException");
  } catch (NullPointerException e) {
      System.err.println(e);
  }
    }

    @Test
    public void testNewSetWithEmptyPrefix() {
  try {
      collectionsFactory.newSet("");
      fail("expected IllegalArgumentException");
  } catch (IllegalArgumentException e) {
      System.err.println(e);
  }
 
    }

    @Test
    public void testGetKeyPrefix() {
  String prefix = "prefix";
  assertEquals(prefix, collectionsFactory.newSet(prefix).getKeyPrefix());
    }

    @Test
    public void testAddWithNullElement() {
  try {
      collectionsFactory.newSet("x.").add(null);
      fail("expected NullPointerException");
  } catch (NullPointerException e) {
      System.err.println(e);
  }
    }

    @Test
    public void testAddWithNonSerializableElement() {
  try {
      collectionsFactory.newSet("x.").add(new Object());
      fail("expected IllegalArgumentException");
  } catch (IllegalArgumentException e) {
      System.err.println(e);
  }
    }

    @Test
    public void testAddWithRemovedObject() {
  ManagedObject obj = new Managed();
  dataService.removeObject(obj);
  try {
      collectionsFactory.newSet("x.").add(obj);
      fail("expected ObjectNotFoundException");
  } catch (ObjectNotFoundException e) {
      System.err.println(e);
  }
    }

    @Test
    public void testAddWithPreviousElementRemoved() {
  String name = "foo";
  Managed obj = new Managed(name);
  Set<Managed> set = collectionsFactory.newSet("x.");
  assertTrue(set.add(obj));
  dataService.removeObject(obj);
  assertFalse(set.add(new Managed(name)));
    }

    @Test
    public void testAddWithNonManagedElement() {
  Set<Integer> set = collectionsFactory.newSet("x.");
  assertTrue(set.isEmpty());
  for (int i = 0; i < 10; i++) {
      assertFalse(set.contains(i));
      assertTrue(set.add(i));
      assertTrue(set.contains(i));
      assertFalse(set.add(i));
      assertTrue(set.contains(i));     
      assertEquals(i+1, set.size());
  }
  assertFalse(set.isEmpty());
    }

    @Test
    public void testAddWithManagedElement() {
  Set<Managed> control = new HashSet<Managed>();
  Set<Managed> set = collectionsFactory.newSet("x.");
  assertTrue(set.isEmpty());
  for (int i = 0; i < 10; i++) {
      Managed obj = new Managed();
      control.add(obj);
      assertFalse(set.contains(obj));
      assertTrue(set.add(obj));
      assertTrue(set.contains(obj));
      assertFalse(set.add(obj));
      assertTrue(set.contains(obj));     
      assertEquals(i+1, set.size());
  }
  assertFalse(set.isEmpty());
  for (Managed obj : control) {
      assertTrue(set.contains(obj));
  }
    }

    @Test
    public void testContainsWithNullElement() {
  try {
      collectionsFactory.newSet("x.").contains(null);
      fail("expected NullPointerException");
  } catch (NullPointerException e) {
      System.err.println(e);
  }
    }

    @Test
    public void testContainsWithNonExistentElement() {
  assertFalse(collectionsFactory.newSet("x.").contains(new Object()));
    }

    @Test
    public void testContainsWithNonManagedElements() {
  Set<Integer> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      assertFalse(set.contains(i));
      assertTrue(set.add(i));
      assertTrue(set.contains(i));
  }
    }

    @Test
    public void testContainsWithManagedElements() {
  Set<Managed> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      Managed obj = new Managed();
      assertFalse(set.contains(obj));
      assertTrue(set.add(obj));
      assertTrue(set.contains(obj));
  }
    }

    @Test
    public void testContainsWithRemovedObject() {
  Managed obj = new Managed();
  Set<Managed> set = collectionsFactory.newSet("x.");
  set.add(obj);
  assertTrue(set.contains(obj));
  dataService.removeObject(obj);
  assertTrue(set.contains(obj));
    }
   
    @Test
    public void testRemoveWithNullElement() {
  try {
      collectionsFactory.newSet("x.").remove(null);
      fail("expected NullPointerException");
  } catch (NullPointerException e) {
      System.err.println(e);
  }
    }

    @Test
    public void testRemoveWithNonExistentElement() {
  assertFalse(collectionsFactory.newSet("x.").remove(new Object()));
    }
    @Test
    public void testRemoveWithRemovedObject() {
  Managed obj = new Managed();
  Set<Managed> set = collectionsFactory.newSet("x.");
  set.add(obj);
  dataService.removeObject(obj);
  assertTrue(set.remove(obj));
    }

    @Test
    public void testRemoveWithNonManagedElement() {
  Set<Integer> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      set.add(i);
  }
  for (int i = 0; i < 10; i++) {
      assertTrue(set.contains(i));
      assertTrue(set.remove(i));
      assertFalse(set.contains(i));
      assertFalse(set.remove(i));
  }
  assertTrue(set.isEmpty());
  // Make sure wrappers are removed.
  assertEquals(10, dataService.removedObjectsCount());
    }
   
    @Test
    public void testRemoveWithManagedElement() {
  Set<Managed> control = new HashSet<Managed>();
  Set<Managed> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      Managed obj = new Managed();
      control.add(obj);
      assertFalse(set.contains(obj));
      assertTrue(set.add(obj));
      assertTrue(set.contains(obj));
  }
 
  for (Managed obj : control) {
      assertTrue(set.contains(obj));
      assertTrue(set.remove(obj));
      assertFalse(set.contains(obj));
      assertFalse(set.remove(obj));
  }
  assertTrue(set.isEmpty());
  // Make sure managed objects aren't removed.
  assertEquals(0, dataService.removedObjectsCount());
    }
   
    @Test
    public void testClearWithNonManagedElements() {
  Set<Integer> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      set.add(i);
  }
  assertFalse(set.isEmpty());
  assertEquals(10, set.size());
  set.clear();
  assertTrue(set.isEmpty());
  assertEquals(0, set.size());
  // Make sure wrappers are removed.
  assertEquals(10, dataService.removedObjectsCount());
    }
   
    @Test
    public void testClearWithManagedElements() {
  Set<Managed> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      set.add(new Managed());
  }
  assertFalse(set.isEmpty());
  assertEquals(10, set.size());
  set.clear();
  assertTrue(set.isEmpty());
  assertEquals(0, set.size());
  // Make sure managed objects aren't removed.
  assertEquals(0, dataService.removedObjectsCount());
    }

    @Test
    public void testClearWithRemovedObjects() {
  Set<Managed> control = new HashSet<Managed>();
  Set<Managed> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      Managed obj = new Managed();
      control.add(obj);
      set.add(obj);
  }
  for (Managed obj : set) {
      dataService.removeObject(obj);
  }
  assertEquals(10, dataService.removedObjectsCount());
  assertFalse(set.isEmpty());
  assertEquals(10, set.size());
  set.clear();
  assertTrue(set.isEmpty());
  assertEquals(0, set.size());
    }

    @Test
    public void testIteratorWithNonManagedElements() {
  Set<Integer> control = new HashSet<Integer>();
  Set<Integer> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      set.add(i);
      control.add(i);
  }
  for (Integer i : set) {
      assertTrue(control.remove(i));
  }
  assertTrue(control.isEmpty());
  set.clear();
  assertEquals(0, set.size());
  assertTrue(set.isEmpty());
  assertEquals(10, dataService.removedObjectsCount());
    }

    @Test
    public void testIteratorWithManagedElements() {
  Set<Managed> control = new HashSet<Managed>();
  Set<Managed> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      Managed obj = new Managed();
      set.add(obj);
      control.add(obj);
  }
  for (Managed obj : set) {
      assertTrue(control.remove(obj));
  }
  assertTrue(control.isEmpty());
  set.clear();
  assertEquals(0, set.size());
  assertTrue(set.isEmpty());
  assertEquals(0, dataService.removedObjectsCount());
    }

    @Test
    public void testIteratorWithRemovedObjects() {
  Set<Managed> control = new HashSet<Managed>();
  Set<Managed> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      Managed obj = new Managed();
      set.add(obj);
      control.add(obj);
      dataService.removeObject(obj);
  }
  try {
      for (Managed obj : set) {
    System.err.println("obj: " + obj.toString());
      }
      fail("Expected ObjectNotFoundException");
  } catch (ObjectNotFoundException e) {
      System.err.println(e);
  }
  assertEquals(10, control.size());
  set.clear();
  assertEquals(0, set.size());
  assertTrue(set.isEmpty());
    }

    @Test
    public void testIteratorRemove() {
  Set<Managed> control = new HashSet<Managed>();
  Set<Managed> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      Managed obj = new Managed();
      set.add(obj);
      control.add(obj);
  }
  Iterator<Managed> iter = set.iterator();
  while (iter.hasNext()) {
      try {
    iter.remove();
    fail("Expected IllegalStateException");
      } catch (IllegalStateException e) {
      }
      Managed obj = iter.next();
      iter.remove();
      try {
    iter.remove();
    fail("Expected IllegalStateException");
      } catch (IllegalStateException e) {
      }
      assertTrue(control.remove(obj));
  }
  assertTrue(control.isEmpty());
  assertEquals(0, set.size());
  assertTrue(set.isEmpty());
  assertEquals(0, dataService.removedObjectsCount());
    }
 
    @Test
    public void testRemoveNextWhileIterating() {
  Set<Managed> control = new HashSet<Managed>();
  Set<Managed> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      Managed obj = new Managed();
      set.add(obj);
      control.add(obj);
  }
  Iterator<Managed> iter = set.iterator();
  while (iter.hasNext()) {
      Managed obj = iter.next();
      set.remove(obj);
      assertTrue(control.remove(obj));
  }
  assertTrue(control.isEmpty());
  assertEquals(0, set.size());
  assertTrue(set.isEmpty());
  assertEquals(0, dataService.removedObjectsCount());
    }
   
    @Test
    public void testRemoveLaterObjectWhileIterating() {
  List<Managed> control = new ArrayList<Managed>();
  Set<Managed> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      Managed obj = new Managed(Integer.toString(i));
      set.add(obj);
      control.add(obj);
  }
  int i = 1;
  for (Managed obj : set) {
      Managed controlObj = control.get(10-i++);
      assertTrue(set.remove(controlObj));
      assertTrue(control.remove(controlObj));
  }
  assertFalse(control.isEmpty());
  assertEquals(5, control.size());
  assertFalse(set.isEmpty());
  assertEquals(5, set.size());
  assertEquals(0, dataService.removedObjectsCount());
    }

    @Test
    public void testAddWhileIterating() {
  List<Managed> control = new ArrayList<Managed>();
  Set<Managed> set = collectionsFactory.newSet("x.");
  for (int i = 0; i < 10; i++) {
      Managed obj = new Managed(Integer.toString(i));
      set.add(obj);
      control.add(obj);
  }
  int i = 10;
  for (Managed obj : set) {
      if (i < 15) {
    Managed newObj = new Managed(Integer.toString(i++));
    assertTrue(set.add(newObj));
    assertTrue(control.add(newObj));
      }
      control.remove(obj);
  }
  assertTrue(control.isEmpty());
  assertFalse(set.isEmpty());
  assertEquals(15, set.size());
    }
   
    /* -- Other classes -- */

    private static class Managed implements ManagedObject, Serializable {
  private static final long serialVersionUID = 1;

  private final String name;

  Managed() {
      name = null;
  }

  Managed(String name) {
      this.name = name;
  }

  public String toString() {
      return
    name != null ?
    name :
    super.toString();
  }
 
    }
}
TOP

Related Classes of com.sun.sgs.test.impl.util.TestBindingKeyedSetImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.