Package org.rssowl.core.tests.model

Source Code of org.rssowl.core.tests.model.PreferencesDAOTest

/*   **********************************************************************  **
**   Copyright notice                                                       **
**                                                                          **
**   (c) 2005-2006 RSSOwl Development Team                                  **
**   http://www.rssowl.org/                                                 **
**                                                                          **
**   All rights reserved                                                    **
**                                                                          **
**   This program and the accompanying materials are made available under   **
**   the terms of the Eclipse Public License v1.0 which accompanies this    **
**   distribution, and is available at:                                     **
**   http://www.rssowl.org/legal/epl-v10.html                               **
**                                                                          **
**   A copy is found in the file epl-v10.html and important notices to the  **
**   license from the team is found in the textfile LICENSE.txt distributed **
**   in this package.                                                       **
**                                                                          **
**   This copyright notice MUST APPEAR in all copies of the file!           **
**                                                                          **
**   Contributors:                                                          **
**     RSSOwl Development Team - initial API and implementation             **
**                                                                          **
**  **********************************************************************  */

package org.rssowl.core.tests.model;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertArrayEquals;

import org.junit.Before;
import org.junit.Test;
import org.rssowl.core.Owl;
import org.rssowl.core.persist.IModelFactory;
import org.rssowl.core.persist.IPreference;
import org.rssowl.core.persist.dao.DynamicDAO;
import org.rssowl.core.persist.dao.IPreferenceDAO;
import org.rssowl.core.persist.event.PreferenceEvent;
import org.rssowl.core.persist.event.PreferenceListener;

import java.util.Arrays;
import java.util.Set;

/**
* @author Ismael Juma (ismael@juma.me.uk)
* @author bpasero
*/
@SuppressWarnings("nls")
public class PreferencesDAOTest {
  private IPreferenceDAO fDao;
  private IModelFactory fFactory;

  /**
   * @throws Exception
   */
  @Before
  public void setUp() throws Exception {
    Owl.getPersistenceService().recreateSchema();
    Owl.getPersistenceService().getModelSearch().shutdown();
    fDao = DynamicDAO.getDAO(IPreferenceDAO.class);
    fFactory = Owl.getModelFactory();
  }

  /**
   * Test adding and getting boolean Preferences.
   *
   * @throws Exception
   */
  @Test
  public final void testPutGetBoolean() throws Exception {
    String key1 = "key1";
    String key2 = "key2";
    String key3 = "key3";

    IPreference pref = fDao.loadOrCreate(key1);
    pref.putBooleans(true);
    fDao.save(pref);

    pref = fDao.loadOrCreate(key2);
    pref.putBooleans(true);
    fDao.save(pref);

    pref = fDao.loadOrCreate(key3);
    pref.putBooleans(false);
    fDao.save(pref);

    assertEquals(Boolean.TRUE, fDao.load(key1).getBoolean());
    assertEquals(Boolean.TRUE, fDao.load(key2).getBoolean());
    assertEquals(Boolean.FALSE, fDao.load(key3).getBoolean());

    pref = fDao.loadOrCreate(key2);
    pref.putBooleans(false);
    fDao.save(pref);

    assertEquals(Boolean.TRUE, fDao.load(key1).getBoolean());
    assertEquals(Boolean.FALSE, fDao.load(key2).getBoolean());
    assertEquals(Boolean.FALSE, fDao.load(key3).getBoolean());
  }

  /**
   * @throws Exception
   */
  @Test
  public final void testActivation() throws Exception   {
    String key = "key";
    IPreference pref = fFactory.createPreference(key);
    pref.putBooleans(true);
    fDao.save(pref);
    pref = null;
    System.gc();
    assertEquals(Boolean.TRUE, fDao.load(key).getBoolean());
    String anotherKey = "anotherKey";
    String[] longs = new String[] { "2", "3", "5"};
    pref = fFactory.createPreference(anotherKey);
    pref.putStrings(longs);
    fDao.save(pref);
    longs = null;
    pref = null;
    System.gc();
    assertEquals(3, fDao.load(anotherKey).getStrings().length);
  }

  /**
   * Test adding and getting Strings Preferences.
   *
   * @throws Exception
   */
  @Test
  public final void testPutGetStrings() throws Exception {
    String key1 = "key1";
    String key2 = "key2";
    String key3 = "key3";

    IPreference pref1 = fFactory.createPreference(key1);
    String[] value1 = new String[] { "value1.1", "value1.2", "value1.3" };
    pref1.putStrings(value1);

    IPreference pref2 = fFactory.createPreference(key2);
    String[] value2 = new String[] { "value2.1", "value2.2", "value2.3" };
    pref2.putStrings(value2);

    IPreference pref3 = fFactory.createPreference(key3);
    String[] value3 = new String[] { "value3.1", "value3.2", "value3.3" };
    pref3.putStrings(value3);

    fDao.save(pref1);
    fDao.save(pref2);
    fDao.save(pref3);

    assertArrayEquals(value1, fDao.load(key1).getStrings());
    assertArrayEquals(value2, fDao.load(key2).getStrings());
    assertArrayEquals(value3, fDao.load(key3).getStrings());

    value2 = new String[] { "newvalue1.1", "newvalue1.2", "newvalue1.3" };
    pref2.putStrings(value2);
    fDao.save(pref2);

    assertArrayEquals(value1, fDao.load(key1).getStrings());
    assertArrayEquals(value2, fDao.load(key2).getStrings());
    assertArrayEquals(value3, fDao.load(key3).getStrings());
  }

  /**
   * Test adding and getting Longs Preferences.
   *
   * @throws Exception
   */
  @Test
  public final void testPutGetLongs() throws Exception {
    String key1 = "key1";
    String key2 = "key2";
    String key3 = "key3";

    long[] value1 = new long[] { 11, 12, 13 };
    long[] value2 = new long[] { 21, 22, 23 };
    long[] value3 = new long[] { 31, 32, 33 };

    IPreference pref = fDao.loadOrCreate(key1);
    pref.putLongs(value1);
    fDao.save(pref);

    pref = fDao.loadOrCreate(key2);
    pref.putLongs(value2);
    fDao.save(pref);

    pref = fDao.loadOrCreate(key3);
    pref.putLongs(value3);
    fDao.save(pref);

    assertEquals(true, Arrays.equals(value1, fDao.load(key1).getLongs()));
    assertEquals(true, Arrays.equals(value2, fDao.load(key2).getLongs()));
    assertEquals(true, Arrays.equals(value3, fDao.load(key3).getLongs()));

    value2 = new long[] { 110, 120, 130 };
    pref = fDao.loadOrCreate(key2);
    pref.putLongs(value2);
    fDao.save(pref);

    assertEquals(true, Arrays.equals(value1, fDao.load(key1).getLongs()));
    assertEquals(true, Arrays.equals(value2, fDao.load(key2).getLongs()));
    assertEquals(true, Arrays.equals(value3, fDao.load(key3).getLongs()));
  }

  /**
   * Test adding and getting Ints Preferences.
   *
   * @throws Exception
   */
  @Test
  public final void testPutGetInts() throws Exception {
    String key1 = "key1";
    String key2 = "key2";
    String key3 = "key3";

    int[] value1 = new int[] { 11, 12, 13 };
    int[] value2 = new int[] { 21, 22, 23 };
    int[] value3 = new int[] { 31, 32, 33 };

    IPreference pref = fFactory.createPreference(key1);
    pref.putIntegers(value1);
    fDao.save(pref);

    pref = fFactory.createPreference(key2);
    pref.putIntegers(value2);
    fDao.save(pref);

    pref = fFactory.createPreference(key3);
    pref.putIntegers(value3);
    fDao.save(pref);

    assertEquals(true, Arrays.equals(value1, fDao.load(key1).getIntegers()));
    assertEquals(true, Arrays.equals(value2, fDao.load(key2).getIntegers()));
    assertEquals(true, Arrays.equals(value3, fDao.load(key3).getIntegers()));

    value2 = new int[] { 110, 120, 130 };
    pref = fDao.loadOrCreate(key2);
    pref.putIntegers(value2);
    fDao.save(pref);

    assertEquals(true, Arrays.equals(value1, fDao.load(key1).getIntegers()));
    assertEquals(true, Arrays.equals(value2, fDao.load(key2).getIntegers()));
    assertEquals(true, Arrays.equals(value3, fDao.load(key3).getIntegers()));
  }

  /**
   * Test adding and getting Long Preferences.
   *
   * @throws Exception
   */
  @Test
  public final void testPutGetLong() throws Exception {
    String key1 = "key1";
    String key2 = "key2";
    String key3 = "key3";

    long value1 = 10;
    long value2 = 15;
    long value3 = 20;

    IPreference pref = fFactory.createPreference(key1);
    pref.putLongs(value1);
    fDao.save(pref);

    pref = fFactory.createPreference(key2);
    pref.putLongs(value2);
    fDao.save(pref);

    pref = fFactory.createPreference(key3);
    pref.putLongs(value3);
    fDao.save(pref);

    assertEquals(Long.valueOf(value1), fDao.load(key1).getLong());
    assertEquals(Long.valueOf(value2), fDao.load(key2).getLong());
    assertEquals(Long.valueOf(value3), fDao.load(key3).getLong());

    value3 = 5;
    pref.putLongs(value3);
    fDao.save(pref);

    assertEquals(Long.valueOf(value1), fDao.load(key1).getLong());
    assertEquals(Long.valueOf(value2), fDao.load(key2).getLong());
    assertEquals(Long.valueOf(value3), fDao.load(key3).getLong());
  }

  /**
   * Test adding and getting String Preference.
   *
   * @throws Exception
   */
  @Test
  public final void testPutGetString() throws Exception {
    String key1 = "key1";
    String key2 = "key2";
    String key3 = "key3";

    String value1 = "value1";
    String value2 = "value2";
    String value3 = "value3";

    IPreference pref = fFactory.createPreference(key1);
    pref.putStrings(value1);
    fDao.save(pref);

    pref = fFactory.createPreference(key2);
    pref.putStrings(value2);
    fDao.save(pref);

    pref = fFactory.createPreference(key3);
    pref.putStrings(value3);
    fDao.save(pref);

    assertEquals(value1, fDao.load(key1).getString());
    assertEquals(value2, fDao.load(key2).getString());
    assertEquals(value3, fDao.load(key3).getString());

    value1 = "newValue1";
    pref = fDao.load(key1);
    pref.putStrings(value1);
    fDao.save(pref);

    assertEquals(value1, fDao.load(key1).getString());
    assertEquals(value2, fDao.load(key2).getString());
    assertEquals(value3, fDao.load(key3).getString());
  }

  /**
   * Test adding and getting Integer Preferences.
   *
   * @throws Exception
   */
  @Test
  public final void testPutGetInteger() throws Exception {
    String key1 = "key1";
    String key2 = "key2";
    String key3 = "key3";

    int value1 = 10;
    int value2 = 15;
    int value3 = 20;

    IPreference pref = fFactory.createPreference(key1);
    pref.putIntegers(value1);
    fDao.save(pref);

    pref = fFactory.createPreference(key2);
    pref.putIntegers(value2);
    fDao.save(pref);

    pref = fFactory.createPreference(key3);
    pref.putIntegers(value3);
    fDao.save(pref);

    assertEquals(Integer.valueOf(value1), fDao.load(key1).getInteger());
    assertEquals(Integer.valueOf(value2), fDao.load(key2).getInteger());
    assertEquals(Integer.valueOf(value3), fDao.load(key3).getInteger());

    value3 = 5;
    pref.putIntegers(value3);
    fDao.save(pref);

    assertEquals(Integer.valueOf(value1), fDao.load(key1).getInteger());
    assertEquals(Integer.valueOf(value2), fDao.load(key2).getInteger());
    assertEquals(Integer.valueOf(value3), fDao.load(key3).getInteger());
  }

  /**
   * Test Deleting Preferences
   *
   * @throws Exception
   */
  @Test
  public final void testDelete() throws Exception {
    String key1 = "key1";
    String key2 = "key2";
    String key3 = "key3";
    String key4 = "key4";
    boolean value1 = true;
    String value2 = "value2";
    int value3 = 34;
    String[] value4 = new String[] { "value4.1", "value4.2", "value4.3" };

    IPreference pref = fFactory.createPreference(key1);
    pref.putBooleans(value1);
    fDao.save(pref);

    pref = fFactory.createPreference(key2);
    pref.putStrings(value2);
    fDao.save(pref);

    pref = fFactory.createPreference(key3);
    pref.putIntegers(value3);
    fDao.save(pref);

    pref = fFactory.createPreference(key4);
    pref.putStrings(value4);
    fDao.save(pref);

    assertEquals(Boolean.valueOf(value1), fDao.load(key1).getBoolean());
    assertEquals(value2, fDao.load(key2).getString());
    assertEquals(Integer.valueOf(value3), fDao.load(key3).getInteger());
    assertArrayEquals(value4, fDao.load(key4).getStrings());

    boolean deleted = fDao.delete(key3);
    assertTrue(deleted);
    assertEquals(Boolean.valueOf(value1), fDao.load(key1).getBoolean());
    assertEquals(value2, fDao.load(key2).getString());
    assertNull("key3 should be null, but it is: " + key3, fDao.load(key3));
    assertArrayEquals(value4, fDao.load(key4).getStrings());

    deleted = fDao.delete(key1);
    assertTrue(deleted);
    assertNull(fDao.load(key1));
    assertEquals(value2, fDao.load(key2).getString());
    assertNull(fDao.load(key3));
    assertArrayEquals(value4, fDao.load(key4).getStrings());

    /* Call delete on key that has already been deleted */
    deleted = fDao.delete(key1);
    assertFalse(deleted);
    assertNull(fDao.load(key1));
    assertEquals(value2, fDao.load(key2).getString());
    assertNull(fDao.load(key3));
    assertArrayEquals(value4, fDao.load(key4).getStrings());

    deleted = fDao.delete(key4);
    assertTrue(deleted);
    assertNull(fDao.load(key1));
    assertEquals(value2, fDao.load(key2).getString());
    assertNull(fDao.load(key3));
    assertNull(fDao.load(key4));

    deleted = fDao.delete(key2);
    assertTrue(deleted);
    assertNull(fDao.load(key1));
    assertNull(fDao.load(key2));
    assertNull(fDao.load(key3));
    assertNull(fDao.load(key4));
  }

  /**
   * Test the Events for getting Add, Update and Delete Events.
   *
   * @throws Exception
   */
  @Test
  public void testPreferenceEvents() throws Exception {
    PreferenceListener prefListener = null;
    try {
      final String key1 = "key1";
      boolean value1 = true;

      final String key2 = "key2";
      int value2 = 1;

      final String key3 = "key3";
      String value3 = "value";

      final String key4 = "key4";
      String value4[] = new String[] { "1", "2", "3", "4" };

      /* Event Handling */
      final boolean additionEvents[] = new boolean[4];
      final boolean updatedEvents[] = new boolean[4];
      final boolean deletionEvents[] = new boolean[4];

      prefListener = new PreferenceListener() {
        public void entitiesAdded(Set<PreferenceEvent> events) {
          assertEquals(1, events.size());
          PreferenceEvent event = events.iterator().next();
          String key = event.getEntity().getKey();
          if (key1.equals(key))
            additionEvents[0] = event.getEntity().getBoolean().booleanValue();
          else if (key2.equals(key))
            additionEvents[1] = event.getEntity().getInteger().intValue() == 1;
          else if (key3.equals(key))
            additionEvents[2] = event.getEntity().getString().equals("value");
          else if (key4.equals(key))
            additionEvents[3] = Arrays.equals(event.getEntity().getStrings(), new String[] { "1", "2", "3", "4" });
        }

        public void entitiesUpdated(Set<PreferenceEvent> events) {
          assertEquals(1, events.size());
          PreferenceEvent event = events.iterator().next();
          String key = event.getEntity().getKey();
          if (key1.equals(key))
            updatedEvents[0] = !event.getEntity().getBoolean().booleanValue();
          else if (key2.equals(key))
            updatedEvents[1] = event.getEntity().getInteger().intValue() == 0;
          else if (key3.equals(key))
            updatedEvents[2] = event.getEntity().getString().equals("updated_value");
          else if (key4.equals(key))
            updatedEvents[3] = Arrays.equals(event.getEntity().getStrings(), new String[] { "4", "3", "2", "1" });
        }

        public void entitiesDeleted(Set<PreferenceEvent> events) {
          assertEquals(1, events.size());
          PreferenceEvent event = events.iterator().next();
          String key = event.getEntity().getKey();
          if (key1.equals(key))
            deletionEvents[0] = true;
          else if (key2.equals(key))
            deletionEvents[1] = true;
          else if (key3.equals(key))
            deletionEvents[2] = true;
          else if (key4.equals(key))
            deletionEvents[3] = true;
        }
      };
      fDao.addEntityListener(prefListener);

      /* Add some Preferences */
      IPreference pref = fFactory.createPreference(key1);
      pref.putBooleans(value1);
      fDao.save(pref);

      pref = fFactory.createPreference(key2);
      pref.putIntegers(value2);
      fDao.save(pref);

      pref = fFactory.createPreference(key3);
      pref.putStrings(value3);
      fDao.save(pref);

      pref = fFactory.createPreference(key4);
      pref.putStrings(value4);
      fDao.save(pref);

      /* Update some Preferences */
      pref = fDao.loadOrCreate(key1);
      pref.putBooleans(false);
      fDao.save(pref);

      pref = fDao.loadOrCreate(key2);
      pref.putIntegers(0);
      fDao.save(pref);

      pref = fDao.loadOrCreate(key3);
      pref.putStrings("updated_value");
      fDao.save(pref);

      pref = fDao.loadOrCreate(key4);
      pref.putStrings("4", "3", "2", "1");
      fDao.save(pref);

      /* Delete some Preferences */
      fDao.delete(key1);
      fDao.delete(key2);
      fDao.delete(key3);
      fDao.delete(key4);

      /* Asserts */
      for (boolean element : additionEvents)
        assertTrue("Missing Preference Added Event", element);

      for (boolean element : updatedEvents)
        assertTrue("Missing Preference Updated Event", element);

      for (boolean element : deletionEvents)
        assertTrue("Missing Preference Deleted Event", element);
    } finally {
      if (prefListener != null)
        fDao.removeEntityListener(prefListener);
    }
  }

  /**
   * Save a single-entry String-Array.
   *
   * @throws Exception
   */
  @Test
  public void testSaveSingleEntryStringArray() throws Exception {
    IPreference pref = fFactory.createPreference("Foo");
    pref.putStrings("Bar");
    fDao.save(pref);
    fDao.load(pref.getKey()).getStrings();
  }

  /**
   * Save Strings that contain equal values.
   *
   * @throws Exception
   */
  @Test
  public void testSaveStringsDuplicate() throws Exception {
    IPreference pref = fFactory.createPreference("Foo");
    pref.putStrings("1", "2", "3", "1", "2", "3");
    fDao.save(pref);
    pref = fDao.loadOrCreate("Foo");
    pref.putStrings("1", "2", "3", "1", "2", "3");
    fDao.save(pref);
  }

  /**
   * Save an array of strings with duplicate elements.
   *
   * @throws Exception
   */
  @Test
  public void testSaveArrayWithDuplicateStrings() throws Exception {
    IPreference pref = fFactory.createPreference("Foo");
    pref.putStrings("1", "2", "3", "1", "2", "3");
    fDao.save(pref);
  }

  /**
   * Saves an array and then updates it.
   * @throws Exception
   */
  @Test
  public void testUpdateArray() throws Exception {
    String key = "Foo";
    IPreference pref = fFactory.createPreference(key);
    pref.putStrings("1", "2", "3", "1", "2", "3");
    fDao.save(pref);
    String[] updatedStrings = new String[] { "1", "3", "2" };
    pref.putStrings(updatedStrings);
    fDao.save(pref);
    String[] savedStrings = fDao.load(key).getStrings();
    assertArrayEquals(updatedStrings, savedStrings);
  }
}
TOP

Related Classes of org.rssowl.core.tests.model.PreferencesDAOTest

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.