Package org.cellprofiler.preferences

Source Code of org.cellprofiler.preferences.TestCellProfilerPreferences

/**
* CellProfiler is distributed under the GNU General Public License.
* See the accompanying file LICENSE for details.
*
* Copyright (c) 2003-2009 Massachusetts Institute of Technology
* Copyright (c) 2009-2014 Broad Institute
* All rights reserved.
*
* Please see the AUTHORS file for credits.
*
* Website: http://www.cellprofiler.org
*/
package org.cellprofiler.preferences;

import static org.junit.Assert.*;


import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.WeakHashMap;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;
import java.util.prefs.BackingStoreException;
import java.util.prefs.NodeChangeEvent;
import java.util.prefs.NodeChangeListener;
import java.util.prefs.PreferenceChangeEvent;
import java.util.prefs.PreferenceChangeListener;
import java.util.prefs.Preferences;

import net.imagej.updater.UpToDate;

import org.cellprofiler.headlesspreferences.HeadlessPreferencesFactory;
import org.junit.Ignore;
import org.junit.Test;

/**
* @author Lee Kamentsky
*
*/
public class TestCellProfilerPreferences {
 
  private Preferences getRoot() {
    Preferences root = new HeadlessPreferencesFactory().systemRoot();
    return root;
  }
 
  private Preferences getCPRoot() {
    final WeakHashMap<String, CellProfilerPreferences> map = new WeakHashMap<String, CellProfilerPreferences>();
    final CellProfilerPreferences result = new CellProfilerPreferences(
        null, getRoot(), map);
    map.put("/", result);
    return result;
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#clear()}.
   */
  @Test
  public void testClear() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    delegate.put("Foo", "Bar");
    try {
      prefs.clear();
      assertEquals("Baz", delegate.get("Foo", "Baz"));
    } catch (BackingStoreException e) {
      e.printStackTrace();
      fail();
    }
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#removeNode()}.
   */
  @Test
  public void testRemoveNode() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    delegate.node("/testRemoveNode/Foo").put("Bar", "Baz");
    Preferences foo = prefs.node("/testRemoveNode/Foo");
    try {
      assertTrue(delegate.node("/testRemoveNode/Foo").nodeExists(""));
      foo.removeNode();
      assertFalse(delegate.node("/testRemoveNode/Foo").nodeExists(""));
    } catch (BackingStoreException e) {
      e.printStackTrace();
      fail();
    }
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#isUserNode()}.
   */
  @Test
  public void testIsUserNode() {
    assertFalse(getCPRoot().isUserNode());
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#flush()}.
   */
  @Test
  public void testFlush() {
    try {
      getCPRoot().flush();
    } catch (BackingStoreException e) {
      e.printStackTrace();
      fail();
    }
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#sync()}.
   *
   * Ignored because there is a bug in Java 1.5 that causes this test to fail
   * and it's not my fault and I can't be expected to work around it.
   *
   * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6178148
   * JDK-6178148 : (prefs) Preferences.removeNode() bug causes IllegalStateException
   */
  @Ignore
  @Test
  public void testSync() {
    try {
      getCPRoot().sync();
    } catch (BackingStoreException e) {
      e.printStackTrace();
      fail();
    }
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#getSystemRoot()}.
   */
  @Test
  public void testGetSystemRoot() {
    Preferences prefs = CellProfilerPreferences.getSystemRoot();
    assertFalse(prefs.isUserNode());
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#getUserRoot()}.
   */
  @Test
  public void testGetUserRoot() {
    Preferences prefs = CellProfilerPreferences.getUserRoot();
    assertTrue(prefs.isUserNode());
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#put(java.lang.String, java.lang.String)}.
   */
  @Test
  public void testPutStringString() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    prefs.put("testPutStringString", "Foo");
    assertEquals("Foo", delegate.get("testPutStringString", "Bar"));
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#get(java.lang.String, java.lang.String)}.
   */
  @Test
  public void testGetStringString() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    delegate.put("testGetStringString", "Foo");
    assertEquals("Foo", prefs.get("testGetStringString", "Bar"));
  }
 
  /**
   * Make sure that if we get the latest nag time, we'll get
   * Long.MAX_VALUE
   */
  @Test
  public void testGetLatestNag() {
    String key = UpToDate.class.getSimpleName() + ".latestNag";
    String path = "/"+UpToDate.class.getPackage().getName().replace(".", "/");
    String result = getCPRoot().node(path).get(key, "0");
    assertEquals(Long.MAX_VALUE, Long.parseLong(result));
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#remove(java.lang.String)}.
   */
  @Test
  public void testRemoveString() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    delegate.put("testRemoveString", "Foo");
    prefs.remove("testRemoveString");
    assertEquals("Bar", delegate.get("testRemoveString", "Bar"));
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#putInt(java.lang.String, int)}.
   */
  @Test
  public void testPutIntStringInt() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    prefs.putInt("putIntStringInt", 5);
    assertEquals(5, delegate.getInt("putIntStringInt", 10));
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#getInt(java.lang.String, int)}.
   */
  @Test
  public void testGetIntStringInt() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    delegate.putInt("getIntStringInt", 7);
    assertEquals(7, prefs.getInt("getIntStringInt", 10));
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#putLong(java.lang.String, long)}.
   */
  @Test
  public void testPutLongStringLong() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    prefs.putLong("putLongStringLong", 50);
    assertEquals(50L, delegate.getLong("putLongStringLong", 10));
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#getLong(java.lang.String, long)}.
   */
  @Test
  public void testGetLongStringLong() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    delegate.putLong("getLongStringLong", 70);
    assertEquals(70, prefs.getLong("getLongStringLong", 10));
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#putBoolean(java.lang.String, boolean)}.
   */
  @Test
  public void testPutBooleanStringBoolean() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    prefs.putBoolean("putBooleanStringBoolean", true);
    assertEquals(true, delegate.getBoolean("putBooleanStringBoolean", false));
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#getBoolean(java.lang.String, boolean)}.
   */
  @Test
  public void testGetBooleanStringBoolean() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    delegate.putBoolean("getBooleanStringBoolean", false);
    assertEquals(false, prefs.getBoolean("getBooleanStringBoolean", true));
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#putFloat(java.lang.String, float)}.
   */
  @Test
  public void testPutFloatStringFloat() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    prefs.putFloat("putFloatStringFloat", .7f);
    assertEquals(.7f, delegate.getFloat("putFloatStringFloat", 10), 0.0001);
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#getFloat(java.lang.String, float)}.
   */
  @Test
  public void testGetFloatStringFloat() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    delegate.putFloat("getFloatStringFloat", .8f);
    assertEquals(.8f, prefs.getFloat("getFloatStringFloat", 10), 0.0001);
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#putDouble(java.lang.String, double)}.
   */
  @Test
  public void testPutDoubleStringDouble() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    prefs.putDouble("putDoubleStringDouble", .9);
    assertEquals(.9, delegate.getFloat("putDoubleStringDouble", 10), 0.0001);
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#getDouble(java.lang.String, double)}.
   */
  @Test
  public void testGetDoubleStringDouble() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    delegate.putDouble("getDoubleStringDouble", 1.8);
    assertEquals(1.8, prefs.getDouble("getDoubleStringDouble", 10), 0.0001);
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#putByteArray(java.lang.String, byte[])}.
   */
  @Test
  public void testPutByteArrayStringByteArray() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    byte [] b = "Foo".getBytes();
    prefs.putByteArray("putByteArray", b);
    assertArrayEquals(b, delegate.getByteArray("putByteArray", "Bar".getBytes()));
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#getByteArray(java.lang.String, byte[])}.
   */
  @Test
  public void testGetByteArrayStringByteArray() {
    Preferences delegate = getRoot();
    Preferences prefs = getCPRoot();
    byte [] b = "Baz".getBytes();
    delegate.putByteArray("getByteArray", b);
    assertArrayEquals(b, prefs.getByteArray("getByteArray", "Bar".getBytes()));
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#keys()}.
   */
  @Test
  public void testKeys() {
    Preferences prefs = getCPRoot();
    String path = UpToDate.class.getPackage().getName().replace(".", "/");
    prefs.node(path).put("Foo", "Bar");
    Preferences node = prefs.node(path);
    try {
      List<String> keys = Arrays.asList(node.keys());
      assertTrue(keys.contains("UpToDate.latestNag"));
      assertTrue(keys.contains("Foo"));
    } catch (BackingStoreException e) {
      e.printStackTrace();
      fail();
    }
   
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#childrenNames()}.
   */
  @Test
  public void testChildrenNames() {
    Preferences prefs = getCPRoot();
    String path = "/" + UpToDate.class.getPackage().getName().replace(".", "/");
    Preferences node = prefs.node(path.substring(0, path.lastIndexOf("/")));
    try {
      List<String> names = Arrays.asList(node.childrenNames());
      assertTrue(names.contains(path.substring(path.lastIndexOf("/")+1)));
      names = Arrays.asList(prefs.childrenNames());
      assertTrue(names.contains(path.substring(1, path.indexOf("/", 1))));
    } catch (BackingStoreException e) {
      e.printStackTrace();
      fail();
    }
   
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#parent()}.
   */
  @Test
  public void testParent() {
    Preferences child = getCPRoot().node("/Foo/Bar");
    assertEquals("/Foo", child.parent().absolutePath());
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#node(java.lang.String)}.
   */
  @Test
  public void testNodeString() {
    Preferences node = getCPRoot().node("/Foo/Bar");
    assertEquals("/Foo/Bar", node.absolutePath());
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#nodeExists(java.lang.String)}.
   */
  @Test
  public void testNodeExistsString() {
    getRoot().node("/testNodeExistsString/Foo/Bar");
    try {
      assertTrue(getCPRoot().nodeExists("/testNodeExistsString/Foo/Bar"));
      assertFalse(getCPRoot().nodeExists("/testNodeExistsString/Bar/Foo"));
    } catch (BackingStoreException e) {
      e.printStackTrace();
      fail();
    }
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#name()}.
   */
  @Test
  public void testName() {
    assertEquals("Bar", getRoot().node("/testName/Foo/Bar").name());
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#absolutePath()}.
   */
  @Test
  public void testAbsolutePath() {
    assertEquals("/testAbsolutePath/Foo/Bar", getRoot().node("/testAbsolutePath/Foo/Bar").absolutePath());
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#addPreferenceChangeListener(java.util.prefs.PreferenceChangeListener)}.
   */
  @Test
  public void testAddPreferenceChangeListenerPreferenceChangeListener() {
    final SynchronousQueue<Boolean> done = new SynchronousQueue<Boolean>();
    final String key = "testAddPreferenceChangeListenerPreferenceChangeListener";
    Preferences prefs = getCPRoot().node("testAddPreferenceChangeListener");
    prefs.addPreferenceChangeListener(new PreferenceChangeListener() {

      public void preferenceChange(PreferenceChangeEvent evt) {
        assertEquals(key, evt.getKey());
        assertEquals("Bar", evt.getNewValue());
        try {
          done.put(true);
        } catch (InterruptedException e) {
          fail();
        }
      }});
    prefs.put(key, "Bar");
    try {
      assertTrue(done.poll(10, TimeUnit.SECONDS));
    } catch (InterruptedException e) {
      e.printStackTrace();
      fail();
    }
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#removePreferenceChangeListener(java.util.prefs.PreferenceChangeListener)}.
   */
  @Test
  public void testRemovePreferenceChangeListenerPreferenceChangeListener() {
    final SynchronousQueue<Boolean> done = new SynchronousQueue<Boolean>();
    final String key = "testRemovePreferenceChangeListenerPreferenceChangeListener";
    Preferences prefs = getCPRoot().node(key);
    final PreferenceChangeListener pcl = new PreferenceChangeListener() {

      public void preferenceChange(PreferenceChangeEvent evt) {
        assertEquals(key, evt.getKey());
        assertEquals("Bar", evt.getNewValue());
        try {
          done.put(true);
        } catch (InterruptedException e) {
          e.printStackTrace();
          fail();
        }
      }};
    prefs.addPreferenceChangeListener(pcl);
    prefs.put(key, "Bar");
    try {
      assertTrue(done.poll(1, TimeUnit.SECONDS));
    } catch (InterruptedException e) {
      e.printStackTrace();
      fail();
    }
    prefs.removePreferenceChangeListener(pcl);
    prefs.put(key, "Baz");
    try {
      assertNull(done.poll(200, TimeUnit.MILLISECONDS));
    } catch (InterruptedException e) {
      e.printStackTrace();
      fail();
    }
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#addNodeChangeListener(java.util.prefs.NodeChangeListener)}.
   */
  @Test
  public void testAddNodeChangeListenerNodeChangeListener() {
    final SynchronousQueue<String> done = new SynchronousQueue<String>();
    final String key = "tanclncl";
    Preferences prefs = getCPRoot().node("testAddNodeChangeListenerNodeChangeListener");
    prefs.addNodeChangeListener(new NodeChangeListener() {

      public void childAdded(NodeChangeEvent evt) {
        assertEquals(key, evt.getChild().name());
        try {
          done.put("Added");
        } catch (InterruptedException e) {
          e.printStackTrace();
          fail();
        }
      }

      public void childRemoved(NodeChangeEvent evt) {
        assertEquals(key, evt.getChild().name());
        try {
          done.put("Removed");
        } catch (InterruptedException e) {
          e.printStackTrace();
          fail();
        }
      }});
    Preferences child = prefs.node(key);
    child.put("Foo", "Bar");
    try {
      assertEquals("Added", done.poll(1, TimeUnit.SECONDS));
      child.removeNode();
      assertEquals("Removed", done.poll(1, TimeUnit.SECONDS));
    } catch (BackingStoreException e) {
      e.printStackTrace();
      fail();
    } catch (InterruptedException e1) {
      e1.printStackTrace();
      fail();
    }
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#removeNodeChangeListener(java.util.prefs.NodeChangeListener)}.
   */
  @Test
  public void testRemoveNodeChangeListenerNodeChangeListener() {
    final SynchronousQueue<String> done = new SynchronousQueue<String>();
    final String key = "testRemoveNodeChangeListenerNodeChangeListener";
    Preferences prefs = getCPRoot().node(key);
    final NodeChangeListener ncl = new NodeChangeListener() {

      public void childAdded(NodeChangeEvent evt) {
        assertEquals(key, evt.getChild().name());
        try {
          done.put("Added");
        } catch (InterruptedException e) {
          e.printStackTrace();
          fail();
        }
      }

      public void childRemoved(NodeChangeEvent evt) {
        fail();
      }};
    prefs.addNodeChangeListener(ncl);
    Preferences child = prefs.node(key);
    try {
      assertEquals("Added", done.poll(10, TimeUnit.SECONDS));
      prefs.removeNodeChangeListener(ncl);
      try {
        child.removeNode();
      } catch (BackingStoreException e) {
        e.printStackTrace();
        fail();
      }
      assertNull(done.poll(100, TimeUnit.MILLISECONDS));
    } catch (InterruptedException e1) {
      e1.printStackTrace();
      fail();
    }
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#exportNode(java.io.OutputStream)}.
   */
  @Test
  public void testExportNodeOutputStream() {
    ByteArrayOutputStream os1 = new ByteArrayOutputStream();
    ByteArrayOutputStream os2 = new ByteArrayOutputStream();
    getRoot().put("Foo", "Bar");
    try {
      getCPRoot().exportNode(os1);
      getRoot().exportNode(os2);
      assertArrayEquals(os2.toByteArray(), os1.toByteArray());
    } catch (IOException e) {
      e.printStackTrace();
      fail();
    } catch (BackingStoreException e) {
      e.printStackTrace();
      fail();
    }
  }

  /**
   * Test method for {@link org.cellprofiler.preferences.CellProfilerPreferences#exportSubtree(java.io.OutputStream)}.
   */
  @Test
  public void testExportSubtreeOutputStream() {
    ByteArrayOutputStream os1 = new ByteArrayOutputStream();
    ByteArrayOutputStream os2 = new ByteArrayOutputStream();
    getRoot().node("testExportSubtreeOutputStream").put("Foo", "Bar");
    try {
      getCPRoot().exportSubtree(os1);
      getRoot().exportSubtree(os2);
      assertArrayEquals(os2.toByteArray(), os1.toByteArray());
    } catch (IOException e) {
      e.printStackTrace();
      fail();
    } catch (BackingStoreException e) {
      e.printStackTrace();
      fail();
    }
  }

}
TOP

Related Classes of org.cellprofiler.preferences.TestCellProfilerPreferences

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.