Package er.extensions.eof

Source Code of er.extensions.eof.ERXKeyTest

package er.extensions.eof;

import java.math.BigDecimal;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.webobjects.eocontrol.EOEditingContext;
import com.webobjects.eocontrol.EOSortOrdering;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.foundation.NSRange;
import com.webobjects.foundation.NSTimestamp;

import er.erxtest.ERXTestCase;
import er.erxtest.model.Company;
import er.erxtest.model.Employee;
import er.erxtest.model.Paycheck;
import er.erxtest.model.Role;
import er.extensions.foundation.ERXArrayUtilities;

public class ERXKeyTest extends ERXTestCase {

  private EOEditingContext ec;
 
  private Company acme;
  private Company shinraInc;
  private Company tyrellCorp;
  private Company sortCo;
 
  private Employee moe;
  private Employee larry;
  private Employee curly;
  private Employee tyrell;
  private Employee deckard;
  private Employee rachael;
  private Employee rufus;
  private Employee rude;
  private Employee elena;
  private Employee sephiroth;
  private Employee aaBb;
  private Employee Abba;
 
  private Paycheck paycheck5000;
  private Paycheck paycheck10000;
  private Paycheck paycheck15000;
 
  private Role headHunter;
  private Role bigBoss;
  private Role accountant;
  private Role doctor;
  private Role barber;
  private NSArray<Role> roles;
 
  private NSArray<Employee> shinraEmployees;
  private NSArray<Employee> shinraNonManager;
  private NSArray<String> shinraNonManagerNames;
  private NSArray<Employee> tyrellEmployees;
  private NSArray<Paycheck> paychecks;
 
  private static final String numKey = "num";
  private static final ERXKey<Integer> num = new ERXKey<Integer>(numKey);
  private static final NSDictionary<String, Integer> uno = new NSDictionary<String, Integer>(Integer.valueOf(1), numKey);
  private static final NSDictionary<String, Integer> dos = new NSDictionary<String, Integer>(Integer.valueOf(2), numKey);
  private static final NSDictionary<String, Integer> tres = new NSDictionary<String, Integer>(Integer.valueOf(3), numKey);
  private static final NSDictionary<String, Integer> quatro = new NSDictionary<String, Integer>(Integer.valueOf(4), numKey);
  private static final NSDictionary<String, Integer> cinco = new NSDictionary<String, Integer>(Integer.valueOf(5), numKey);
  private static final NSArray<NSDictionary<String, Integer>> numbers = new NSArray<NSDictionary<String,Integer>>(uno, dos, tres, quatro, cinco);
  private static final NSArray<Integer> simpleNumbers = new NSArray<Integer>(Integer.valueOf(1),Integer.valueOf(2),Integer.valueOf(3),Integer.valueOf(4),Integer.valueOf(5));

 
  @Override
  @Before
  public void setUp() throws Exception {
    ec = ERXEC.newEditingContext();
   
    headHunter = Role.createRole(ec);
    bigBoss = Role.createRole(ec);
    accountant = Role.createRole(ec);
    roles = new NSArray<Role>(headHunter, bigBoss, accountant);
    doctor = Role.createRole(ec);
    barber = Role.createRole(ec);
   
    acme = Company.createCompany(ec, "Acme");
    shinraInc = Company.createCompany(ec, "Shinra Inc.");
    tyrellCorp = Company.createCompany(ec, "Tyrell Corporation");
    sortCo = Company.createCompany(ec, "Sort test");
   
    moe = Employee.createEmployee(ec, "Moe", "Stooge", Boolean.TRUE, acme);
    larry = Employee.createEmployee(ec, "Larry", "Stooge", Boolean.FALSE, acme);
    curly = Employee.createEmployee(ec, "Curly", "Stooge", Boolean.FALSE, acme);
   
    tyrell = Employee.createEmployee(ec, "Eldon", "Tyrell", Boolean.TRUE, tyrellCorp);
    deckard = Employee.createEmployee(ec, "Rick", "Deckard", Boolean.FALSE, tyrellCorp);
    rachael = Employee.createEmployee(ec, "Rachael", "Replicant", Boolean.FALSE, tyrellCorp);
    tyrellEmployees = new NSArray<Employee>(tyrell, deckard, rachael);
   
    rufus = Employee.createEmployee(ec, "Rufus", "Shinra", Boolean.TRUE, shinraInc);
    rude = Employee.createEmployee(ec, "Rude", "Terk", Boolean.FALSE, shinraInc);
    elena = Employee.createEmployee(ec, "Elena", "turk", Boolean.FALSE, shinraInc);
    sephiroth = Employee.createEmployee(ec, "Sephiroth", "Jenova", Boolean.FALSE, shinraInc);
    shinraEmployees = new NSArray<Employee>(rufus, rude, elena, sephiroth);
    shinraNonManager = new NSArray<Employee>(rude, elena, sephiroth);
    shinraNonManagerNames = new NSArray<String>(rude.firstName(), elena.firstName(), sephiroth.firstName());
   
    elena.setBestSalesTotal(BigDecimal.valueOf(10000L));
    rude.setBestSalesTotal(BigDecimal.valueOf(5000L));
   
    aaBb = Employee.createEmployee(ec, "aa", "Bb", Boolean.FALSE, sortCo);
    Abba = Employee.createEmployee(ec, "Ab", "ba", Boolean.FALSE, sortCo);

   
    NSTimestamp now = new NSTimestamp();
    paycheck5000 = Paycheck.createPaycheck(ec, BigDecimal.valueOf(5000L), Boolean.FALSE, now.timestampByAddingGregorianUnits(0, 0, -14, 0, 0, 0), rufus);
    paycheck10000 = Paycheck.createPaycheck(ec, BigDecimal.valueOf(10000L), Boolean.FALSE, now.timestampByAddingGregorianUnits(0, 0, -7, 0, 0, 0), rufus);
    paycheck15000 = Paycheck.createPaycheck(ec, BigDecimal.valueOf(15000L), Boolean.FALSE, now, rufus);
    paychecks = new NSArray(paycheck5000, paycheck10000, paycheck15000);
   
   
    rufus.addToRoles(headHunter);
    rufus.addToRoles(bigBoss);
    sephiroth.addToRoles(headHunter);
    rude.addToRoles(accountant);
    rude.addToRoles(headHunter);
    elena.addToRoles(accountant);
   
    moe.addObjectToBothSidesOfRelationshipWithKey(doctor, Employee.ROLES_KEY);
    moe.addObjectToBothSidesOfRelationshipWithKey(barber, Employee.ROLES_KEY);
   
    ec.saveChanges();   
  }

  @Override
  @After
  public void tearDown() throws Exception {
    roles = null;
    shinraEmployees = null;
    shinraNonManager = null;
    shinraNonManagerNames = null;
    tyrellEmployees = null;

    paychecks = null;

    if (ERXTestCase.adaptorName().equals("JDBC")) {

      ERXEOAccessUtilities.evaluateSQLWithEntity(ec, ERXEOAccessUtilities.entityNamed(ec, "Company"), "delete from Company");
      ERXEOAccessUtilities.evaluateSQLWithEntity(ec, ERXEOAccessUtilities.entityNamed(ec, "Employee"), "delete from Employee");
                  ERXEOAccessUtilities.evaluateSQLWithEntity(ec, ERXEOAccessUtilities.entityNamed(ec, "EmployeeHI"), "delete from EmployeeHI");
                  ERXEOAccessUtilities.evaluateSQLWithEntity(ec, ERXEOAccessUtilities.entityNamed(ec, "EmployeeVI"), "delete from EmployeeVI");
                  ERXEOAccessUtilities.evaluateSQLWithEntity(ec, ERXEOAccessUtilities.entityNamed(ec, "EmployeeRole"), "delete from EmployeeRole");
      ERXEOAccessUtilities.evaluateSQLWithEntity(ec, ERXEOAccessUtilities.entityNamed(ec, "Paycheck"), "delete from Paycheck");
      ERXEOAccessUtilities.evaluateSQLWithEntity(ec, ERXEOAccessUtilities.entityNamed(ec, "Role"), "delete from Role");

    }

    if (ERXTestCase.adaptorName().equals("Memory")) {

      shinraInc.delete();
      tyrellCorp.delete();
      sortCo.delete();
   
      moe.delete();
      larry.delete();
      curly.delete();
      tyrell.delete();
      deckard.delete();
      rachael.delete();
      rufus.delete();
      rude.delete();
      elena.delete();
      sephiroth.delete();
      aaBb.delete();
      Abba.delete();

      paycheck5000.delete();
      paycheck10000.delete();
      paycheck15000.delete();
   
      headHunter.delete();
      bigBoss.delete();
      accountant.delete();
      doctor.delete();
      barber.delete();

      ec.saveChanges();
    }
  }

  @Test
  public void testAppendString() {
    assertEquals("one", new ERXKey(null).append("one").key());
    assertEquals("one", new ERXKey("").append("one").key());
    assertEquals("one.two", new ERXKey("one").append("two").key());
  }
 
  @Test
  public void testAvgNonNullERXKeyOfQ() {
    BigDecimal d = Company.EMPLOYEES.dot(ERXKey.avgNonNull(Employee.BEST_SALES_TOTAL)).valueInObject(shinraInc);
    assertTrue(BigDecimal.valueOf(7500L).compareTo(d) == 0);
  }
 
  @Test
  public void testAvgNonNull() {
    BigDecimal d = Company.EMPLOYEES.dot(Employee.BEST_SALES_TOTAL).dot(ERXKey.avgNonNull()).valueInObject(shinraInc);
    assertTrue(BigDecimal.valueOf(7500L).compareTo(d) == 0);
  }

  @Test
  public void testAtAvgNonNullERXKeyOfQ() {
    BigDecimal d = Company.EMPLOYEES.atAvgNonNull(Employee.BEST_SALES_TOTAL).valueInObject(shinraInc);
    assertTrue(BigDecimal.valueOf(7500L).compareTo(d) == 0);
  }
 
  @Test
  public void testAtAvgNonNull() {
    BigDecimal d = Company.EMPLOYEES.dot(Employee.BEST_SALES_TOTAL).atAvgNonNull().valueInObject(shinraInc);
    assertTrue(BigDecimal.valueOf(7500L).compareTo(d) == 0);
  }

  @Test
  public void testFetchSpecStringERXKeyOfU() {
    NSArray<String> plebs = Company.EMPLOYEES.dot(ERXKey.fetchSpec("plebs", Employee.FIRST_NAME)).valueInObject(shinraInc);
    assertTrue(ERXArrayUtilities.arraysAreIdenticalSets(shinraNonManagerNames, plebs));
  }

  @Test
  public void testAtFetchSpecStringERXKeyOfU() {
    NSArray<String> plebs = Company.EMPLOYEES.atFetchSpec("plebs", Employee.FIRST_NAME).valueInObject(shinraInc);
    assertTrue(ERXArrayUtilities.arraysAreIdenticalSets(shinraNonManagerNames, plebs));
  }

  @Test
  public void testFetchSpecString() {
    NSArray<Employee> plebs = (NSArray<Employee>) Company.EMPLOYEES.dot(ERXKey.fetchSpec("plebs")).valueInObject(shinraInc);
    assertTrue(ERXArrayUtilities.arraysAreIdenticalSets(shinraNonManager, plebs));
  }

  @Test
  public void testAtFetchSpecString() {
    NSArray<Employee> plebs = (NSArray<Employee>) Company.EMPLOYEES.atFetchSpec("plebs").valueInObject(shinraInc);
    assertTrue(ERXArrayUtilities.arraysAreIdenticalSets(shinraNonManager, plebs));
  }

  @Test
  public void testFlattenERXKeyOfU() {
    Object o = Company.EMPLOYEES.dot(Employee.COMPANY).dot(Company.EMPLOYEES).dot(ERXKey.flatten()).dot(Employee.COMPANY).dot(Company.EMPLOYEES).valueInObject(shinraInc);
    NSArray array = (NSArray)o;
    assertTrue(array.count() == 16);
    NSArray<BigDecimal> shinraPaychecks = Company.EMPLOYEES.dot(Employee.PAYCHECKS).dot(ERXKey.flatten(Paycheck.AMOUNT)).valueInObject(shinraInc);
    assertTrue(shinraPaychecks.count() == 3);
  }

  @Test
  public void testAtFlattenERXKeyOfU() {
    BigDecimal shinraPayroll = Company.EMPLOYEES.dot(Employee.PAYCHECKS).atFlatten(Paycheck.AMOUNT).atSum().valueInObject(shinraInc);
    assertTrue(shinraPayroll.compareTo(new BigDecimal(30000L)) == 0);
  }

  @Test
  public void testFlatten() {
    NSArray<Paycheck> shinraPaychecks = (NSArray<Paycheck>) Company.EMPLOYEES.dot(Employee.PAYCHECKS).dot(ERXKey.flatten()).valueInObject(shinraInc);
    assertTrue(ERXArrayUtilities.arraysAreIdenticalSets(paychecks, shinraPaychecks));
  }

  @Test
  public void testAtFlatten() {
    NSArray<Paycheck> shinraPaychecks = (NSArray<Paycheck>) Company.EMPLOYEES.dot(Employee.PAYCHECKS).atFlatten().valueInObject(shinraInc);
    assertTrue(ERXArrayUtilities.arraysAreIdenticalSets(paychecks, shinraPaychecks));
    NSArray<Employee> duplicateEmployees = (NSArray<Employee>) Company.EMPLOYEES.dot(Employee.COMPANY).dot(Company.EMPLOYEES).atFlatten().valueInObject(shinraInc);
    assertEquals(16, duplicateEmployees.count());
  }

  @Test
  public void testIsEmpty() {
    assertEquals(Boolean.TRUE, Employee.PAYCHECKS.dot(ERXKey.isEmpty()).valueInObject(elena));
    assertEquals(Boolean.FALSE, Employee.PAYCHECKS.dot(ERXKey.isEmpty()).valueInObject(rufus));
  }

  @Test
  public void testAtIsEmpty() {
    assertEquals(Boolean.TRUE, Employee.PAYCHECKS.atIsEmpty().valueInObject(elena));
    assertEquals(Boolean.FALSE, Employee.PAYCHECKS.atIsEmpty().valueInObject(rufus));
  }

  @Test
  public void testLimitIntegerERXKeyOfU() {
    NSArray<String> names = Employee.COMPANY.dot(Company.EMPLOYEES).dot(ERXKey.limit(Integer.valueOf(2), Employee.FIRST_NAME)).valueInObject(sephiroth);
    assertTrue(names.count() == 2);
  }

  @Test
  public void testAtLimitIntegerERXKeyOfU() {
    NSArray<String> names = Employee.COMPANY.dot(Company.EMPLOYEES).atLimit(Integer.valueOf(2), Employee.FIRST_NAME).valueInObject(sephiroth);
    assertTrue(names.count() == 2);
  }

  @Test
  public void testLimitInteger() {
    NSArray<Employee> employees = (NSArray<Employee>) Company.EMPLOYEES.dot(ERXKey.limit(Integer.valueOf(2))).valueInObject(shinraInc);
    assertTrue(employees.count() == 2);
  }

  @Test
  public void testAtLimitInteger() {
    NSArray<Employee> employees = (NSArray<Employee>) Company.EMPLOYEES.atLimit(Integer.valueOf(2)).valueInObject(shinraInc);
    assertTrue(employees.count() == 2);
  }
 
  @Test
  public void testMedian() {
    BigDecimal d = Employee.PAYCHECKS.dot(Paycheck.AMOUNT).dot(ERXKey.median()).valueInObject(rufus);
    assertTrue(BigDecimal.valueOf(10000L).compareTo(d) == 0);
    d = ERXKey.median().valueInObject(new NSArray(Integer.valueOf(1000), Integer.valueOf(2000), Integer.valueOf(3000), Integer.valueOf(4000) ));
    assertTrue(BigDecimal.valueOf(2500L).compareTo(d) == 0);
    d = ERXKey.median().valueInObject(new NSArray(Integer.valueOf(2000)));
    assertTrue(BigDecimal.valueOf(2000L).compareTo(d) == 0);
   
    //Should work with strings too
    d = ERXKey.median().valueInObject(new NSArray("1000", "2000", "3000", "4000"));
    assertTrue(BigDecimal.valueOf(2500L).compareTo(d) == 0);
    d = ERXKey.median().valueInObject(new NSArray("1000", "2000", "3000"));
    assertTrue(BigDecimal.valueOf(2000L).compareTo(d) == 0);
    d = ERXKey.median().valueInObject(new NSArray("2000"));
    assertTrue(BigDecimal.valueOf(2000L).compareTo(d) == 0);
   
    //Return null on empty arrays
    d = ERXKey.median().valueInObject(NSArray.EmptyArray);
    assertTrue(d == null);
  }
 
  @Test
  public void testAtMedian() {
    BigDecimal d = Employee.PAYCHECKS.dot(Paycheck.AMOUNT).atMedian().valueInObject(rufus);
    assertTrue(BigDecimal.valueOf(10000L).compareTo(d) == 0);
  }

  @Test
  public void testMedianERXKeyOfQ() {
    BigDecimal d = Employee.PAYCHECKS.dot(ERXKey.median(Paycheck.AMOUNT)).valueInObject(rufus);
    assertTrue(BigDecimal.valueOf(10000L).compareTo(d) == 0);
  }

  @Test
  public void testAtMedianERXKeyOfQ() {
    BigDecimal d = Employee.PAYCHECKS.atMedian(Paycheck.AMOUNT).valueInObject(rufus);
    assertTrue(BigDecimal.valueOf(10000L).compareTo(d) == 0);
  }

  @Test
  public void testObjectAtIndexIntegerERXKeyOfU() {
    String fetched = Company.EMPLOYEES.atFetchSpec("plebs").atObjectAtIndex(Integer.valueOf(0)).dot(Employee.FIRST_NAME).valueInObject(acme);
    assertEquals("Curly", fetched);
  }

  @Test
  public void testAtObjectAtIndexIntegerERXKeyOfU() {
    String fetched = Company.EMPLOYEES.atFetchSpec("plebs").atObjectAtIndex(Integer.valueOf(0)).dot(Employee.FIRST_NAME).valueInObject(shinraInc);
    assertEquals("Elena", fetched);
  }

  @Test
  public void testObjectAtIndexInteger() {
    Employee fetched = (Employee) Company.EMPLOYEES.atFetchSpec("plebs").dot(ERXKey.objectAtIndex(Integer.valueOf(1))).valueInObject(shinraInc);
    assertEquals(rude, fetched);
  }

  @Test
  public void testAtObjectAtIndexInteger() {
    Employee fetched = (Employee) Company.EMPLOYEES.atFetchSpec("plebs").atObjectAtIndex(Integer.valueOf(2)).valueInObject(shinraInc);
    assertEquals(sephiroth, fetched);
  }
 
  @Test
  public void testSortWithKeyPath() {
    EOSortOrdering so = new EOSortOrdering("firstName.length", EOSortOrdering.CompareAscending);
    NSArray<Employee> sortedEmps = shinraInc.employees(null, new NSArray(so), false);
    assertTrue(sortedEmps.objectAtIndex(0).firstName().equals("Rude"));
  }

  @Test
  public void testRemoveNullValuesERXKeyOfU() {
    Object o = Company.EMPLOYEES.dot(Employee.BEST_SALES_TOTAL).valueInObject(shinraInc);
    NSArray<?> d4 = (NSArray<?>) o;
    assertTrue(d4.count() == 4);
    NSArray<BigDecimal> d2 = (NSArray<BigDecimal>) Company.EMPLOYEES.dot(Employee.BEST_SALES_TOTAL).dot(ERXKey.removeNullValues()).valueInObject(shinraInc);
    NSArray<BigDecimal> d2plus = Company.EMPLOYEES.dot(Employee.BEST_SALES_TOTAL).dot(ERXKey.removeNullValues(new ERXKey<NSArray<BigDecimal>>("plus"))).valueInObject(shinraInc);
    assertEquals(d2, d2plus);
  }

  @Test
  public void testAtRemoveNullValuesERXKeyOfU() {
    //These don't actually contain null values, but using remove null values should be benign!
    Object o = Company.EMPLOYEES.atRemoveNullValues(Employee.ROLES).dot(Role.EMPLOYEES).atFlatten().valueInObject(acme);
    NSArray m1 = (NSArray)o;
    assertFalse(m1.contains(larry));
    assertFalse(m1.contains(curly));
    assertTrue(m1.contains(moe));
    assertTrue(m1.count() == 2);
   
    o = Company.EMPLOYEES.dot(Employee.ROLES).atFlatten().atRemoveNullValues(Role.EMPLOYEES).valueInObject(acme);
    NSArray m2 = (NSArray)o;
    assertTrue(m2.count() == 2);
    assertTrue(m2.objectAtIndex(0) instanceof NSArray);
    NSArray m3 = (NSArray)m2.objectAtIndex(0);
    assertTrue(m3.count() == 1);
    assertTrue(m3.objectAtIndex(0) instanceof Employee);
   
    o = Company.EMPLOYEES.dot(Employee.BEST_SALES_TOTAL).valueInObject(shinraInc);
    NSArray<?> d4 = (NSArray<?>) o;
    assertTrue(d4.count() == 4);
    NSArray<BigDecimal> d2 = (NSArray<BigDecimal>) Company.EMPLOYEES.dot(Employee.BEST_SALES_TOTAL).atRemoveNullValues().valueInObject(shinraInc);
    NSArray<BigDecimal> d2plus = Company.EMPLOYEES.dot(Employee.BEST_SALES_TOTAL).atRemoveNullValues(new ERXKey<NSArray<BigDecimal>>("plus")).valueInObject(shinraInc);
    assertEquals(d2, d2plus);
  }

  @Test
  public void testRemoveNullValues() {
    Object o = Company.EMPLOYEES.dot(Employee.BEST_SALES_TOTAL).valueInObject(shinraInc);
    NSArray<?> d4 = (NSArray<?>) o;
    assertTrue(d4.count() == 4);
    NSArray<BigDecimal> d2 = (NSArray<BigDecimal>) Company.EMPLOYEES.dot(Employee.BEST_SALES_TOTAL).dot(ERXKey.removeNullValues()).valueInObject(shinraInc);
    assertTrue(d2.count() == 2);
  }

  @Test
  public void testAtRemoveNullValues() {
    Object o = Company.EMPLOYEES.dot(Employee.BEST_SALES_TOTAL).valueInObject(shinraInc);
    NSArray<?> d4 = (NSArray<?>) o;
    assertTrue(d4.count() == 4);
    NSArray<BigDecimal> d2 = (NSArray<BigDecimal>) Company.EMPLOYEES.dot(Employee.BEST_SALES_TOTAL).atRemoveNullValues().valueInObject(shinraInc);
    assertTrue(d2.count() == 2);
  }

  @Test
  public void testReverseERXKeyOfU() {
    NSArray<Employee> shinraDesc = shinraInc.employees(
        Employee.MANAGER.eq(Boolean.FALSE),
        Employee.FIRST_NAME.descs(),
        true);
    NSArray<String> shinraAscReverse = Company.EMPLOYEES.atFetchSpec("plebs").atReverse(Employee.FIRST_NAME).valueInObject(shinraInc);
    assertEquals(shinraDesc.valueForKey(Employee.FIRST_NAME_KEY), shinraAscReverse);
  }

  @Test
  public void testAtReverseERXKeyOfU() {
    NSArray<Employee> shinraDesc = shinraInc.employees(
        Employee.MANAGER.eq(Boolean.FALSE),
        Employee.FIRST_NAME.descs(),
        true);
    NSArray<String> shinraAscReverse = Company.EMPLOYEES.atFetchSpec("plebs").dot(ERXKey.reverse(Employee.FIRST_NAME)).valueInObject(shinraInc);
    assertEquals(shinraDesc.valueForKey(Employee.FIRST_NAME_KEY), shinraAscReverse);
  }

  @Test
  public void testReverse() {
    NSArray<Employee> shinraAsc = (NSArray<Employee>) Company.EMPLOYEES.atSortAsc(Employee.FIRST_NAME).valueInObject(shinraInc);
    NSArray<Employee> shinraDescReverse = (NSArray<Employee>) Company.EMPLOYEES.atSortDesc(Employee.FIRST_NAME).valueInObject(shinraInc);
    shinraDescReverse = (NSArray<Employee>) ERXKey.reverse().valueInObject(shinraDescReverse);
    assertEquals(shinraAsc, shinraDescReverse);
  }

  @Test
  public void testAtReverse() {
    NSArray<Employee> shinraDesc = shinraInc.employees(
        Employee.MANAGER.eq(Boolean.FALSE),
        Employee.FIRST_NAME.descs(),
        true);
    NSArray<Employee> shinraAscReverse = (NSArray<Employee>) Company.EMPLOYEES.atFetchSpec("plebs").atReverse().valueInObject(shinraInc);
    assertEquals(shinraDesc, shinraAscReverse);
  }

  @Test
  public void testSort() {
    NSArray<Employee> first = (NSArray<Employee>) Company.EMPLOYEES.dot(ERXKey.sort(Employee.FIRST_NAME)).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(Abba, aaBb), first);
    NSArray<Employee> last = (NSArray<Employee>) Company.EMPLOYEES.dot(ERXKey.sort(Employee.LAST_NAME,Employee.FIRST_NAME)).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(aaBb, Abba), last);
  }

  @Test
  public void testAtSort() {
    NSArray<Employee> first = (NSArray<Employee>) Company.EMPLOYEES.atSort(Employee.FIRST_NAME).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(Abba, aaBb), first);
    NSArray<Employee> last = (NSArray<Employee>) Company.EMPLOYEES.atSort(Employee.LAST_NAME,Employee.FIRST_NAME).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(aaBb, Abba), last);
  }

  @Test
  public void testSortAsc() {
    NSArray<Employee> first = (NSArray<Employee>) Company.EMPLOYEES.dot(ERXKey.sortAsc(Employee.FIRST_NAME)).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(Abba, aaBb), first);
    NSArray<Employee> last = (NSArray<Employee>) Company.EMPLOYEES.dot(ERXKey.sortAsc(Employee.LAST_NAME,Employee.FIRST_NAME)).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(aaBb, Abba), last);
  }

  @Test
  public void testAtSortAsc() {
    NSArray<Employee> first = (NSArray<Employee>) Company.EMPLOYEES.atSortAsc(Employee.FIRST_NAME).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(Abba, aaBb), first);
    NSArray<Employee> last = (NSArray<Employee>) Company.EMPLOYEES.atSortAsc(Employee.LAST_NAME,Employee.FIRST_NAME).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(aaBb, Abba), last);
  }

  @Test
  public void testSortDesc() {
    NSArray<Employee> first = (NSArray<Employee>) Company.EMPLOYEES.dot(ERXKey.sortDesc(Employee.FIRST_NAME)).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(aaBb, Abba), first);
    NSArray<Employee> last = (NSArray<Employee>) Company.EMPLOYEES.dot(ERXKey.sortDesc(Employee.LAST_NAME,Employee.FIRST_NAME)).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(Abba, aaBb), last);
  }

  @Test
  public void testAtSortDesc() {
    NSArray<Employee> first = (NSArray<Employee>) Company.EMPLOYEES.atSortDesc(Employee.FIRST_NAME).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(aaBb, Abba), first);
    NSArray<Employee> last = (NSArray<Employee>) Company.EMPLOYEES.atSortDesc(Employee.LAST_NAME,Employee.FIRST_NAME).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(Abba, aaBb), last);
  }

  @Test
  public void testSortInsensitiveAsc() {
    NSArray<Employee> first = (NSArray<Employee>) Company.EMPLOYEES.dot(ERXKey.sortInsensitiveAsc(Employee.FIRST_NAME)).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(aaBb, Abba), first);
    NSArray<Employee> last = (NSArray<Employee>) Company.EMPLOYEES.dot(ERXKey.sortInsensitiveAsc(Employee.LAST_NAME,Employee.FIRST_NAME)).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(Abba, aaBb), last);
  }

  @Test
  public void testAtSortInsensitiveAsc() {
    NSArray<Employee> first = (NSArray<Employee>) Company.EMPLOYEES.atSortInsensitiveAsc(Employee.FIRST_NAME).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(aaBb, Abba), first);
    NSArray<Employee> last = (NSArray<Employee>) Company.EMPLOYEES.atSortInsensitiveAsc(Employee.LAST_NAME,Employee.FIRST_NAME).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(Abba, aaBb), last);
  }

  @Test
  public void testSortInsensitiveDesc() {
    NSArray<Employee> first = (NSArray<Employee>) Company.EMPLOYEES.atSortInsensitiveDesc(Employee.FIRST_NAME).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(Abba, aaBb), first);
    NSArray<Employee> last = (NSArray<Employee>) Company.EMPLOYEES.atSortInsensitiveDesc(Employee.LAST_NAME,Employee.FIRST_NAME).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(aaBb, Abba), last);
  }

  @Test
  public void testAtSortInsensitiveDesc() {
    NSArray<Employee> first = (NSArray<Employee>) Company.EMPLOYEES.dot(ERXKey.sortInsensitiveDesc(Employee.FIRST_NAME)).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(Abba, aaBb), first);
    NSArray<Employee> last = (NSArray<Employee>) Company.EMPLOYEES.dot(ERXKey.sortInsensitiveDesc(Employee.LAST_NAME,Employee.FIRST_NAME)).valueInObject(sortCo);
    assertEquals(new NSArray<Employee>(aaBb, Abba), last);
  }

  @Test
  public void testSubarrayWithRangeNSRangeERXKeyOfU() {
    NSArray<String> acme1_1 = Company.EMPLOYEES.atFetchSpec("plebs").dot(ERXKey.subarrayWithRange(new NSRange(0,1), Employee.FIRST_NAME)).valueInObject(acme);
    assertEquals(new NSArray<String>("Curly"), acme1_1);
  }

  @Test
  public void testAtSubarrayWithRangeNSRangeERXKeyOfU() {
    NSArray<String> acme1_1 = Company.EMPLOYEES.atFetchSpec("plebs").atSubarrayWithRange(new NSRange(1,1), Employee.FIRST_NAME).valueInObject(acme);
    assertEquals(new NSArray<String>("Larry"), acme1_1);
  }

  @Test
  public void testSubarrayWithRangeNSRange() {
    NSArray<Employee> shinraAsc1_2 = (NSArray<Employee>) Company.EMPLOYEES.atFetchSpec("plebs").atSubarrayWithRange(new NSRange(1,2)).valueInObject(shinraInc);
    assertEquals(new NSArray<Employee>(rude,sephiroth), shinraAsc1_2);
  }

  @Test
  public void testAtSubarrayWithRangeNSRange() {
    NSArray<Employee> shinraAsc2_1 = (NSArray<Employee>) Company.EMPLOYEES.atFetchSpec("plebs").atSubarrayWithRange(new NSRange(2,1)).valueInObject(shinraInc);
    assertEquals(new NSArray<Employee>(sephiroth), shinraAsc2_1);
  }

  @Test
  public void testUniqueERXKeyOfU() {
    NSArray<String> companyNames = Employee.COMPANY.atUnique(Company.NAME).valueInObject(tyrellEmployees);
    assertEquals(new NSArray<String>("Tyrell Corporation"), companyNames);
  }

  @Test
  public void testAtUniqueERXKeyOfU() {
    NSArray<String> companyNames = Employee.COMPANY.dot(ERXKey.unique(Company.NAME)).valueInObject(tyrellEmployees);
    assertEquals(new NSArray<String>("Tyrell Corporation"), companyNames);
  }

  @Test
  public void testUnique() {
    NSArray<Employee> duplicates = shinraEmployees.arrayByAddingObjectsFromArray(shinraEmployees);
    NSArray<Employee> uniqued = (NSArray<Employee>)ERXKey.unique().valueInObject(duplicates);
    assertTrue(ERXArrayUtilities.arraysAreIdenticalSets(shinraEmployees, uniqued));
  }

  @Test
  public void testAtUnique() {
    NSArray<Role> uniqueRoles = (NSArray<Role>) Company.EMPLOYEES.dot(Employee.ROLES).atFlatten().atUnique().valueInObject(shinraInc);
    assertTrue(ERXArrayUtilities.arraysAreIdenticalSets(uniqueRoles, roles));
    assertTrue(uniqueRoles.count() == 3);
    NSArray<NSArray<Role>> roleArrays = (NSArray<NSArray<Role>>) Company.EMPLOYEES.dot(Employee.ROLES).atUnique().atFlatten().valueInObject(shinraInc);
    assertTrue(roleArrays.count() == 6);
  }

  @Test
  public void testSumERXKeyOfQ() {
    BigDecimal d = Employee.PAYCHECKS.dot(ERXKey.sum(Paycheck.AMOUNT)).valueInObject(rufus);
    assertTrue(BigDecimal.valueOf(30000L).compareTo(d) == 0);
  }

  @Test
  public void testSum() {
    BigDecimal d = Employee.PAYCHECKS.dot(Paycheck.AMOUNT).dot(ERXKey.sum()).valueInObject(rufus);
    assertTrue(BigDecimal.valueOf(30000L).compareTo(d) == 0);
  }

  @Test
  public void testAtSumERXKeyOfQ() {
    BigDecimal d = Employee.PAYCHECKS.atSum(Paycheck.AMOUNT).valueInObject(rufus);
    assertTrue(BigDecimal.valueOf(30000L).compareTo(d) == 0);
  }

  @Test
  public void testAtSum() {
    BigDecimal d = Employee.PAYCHECKS.dot(Paycheck.AMOUNT).atSum().valueInObject(rufus);
    assertTrue(BigDecimal.valueOf(30000L).compareTo(d) == 0);
  }

  @Test
  public void testAvgERXKeyOfQ() {
    BigDecimal d = Employee.PAYCHECKS.dot(ERXKey.avg(Paycheck.AMOUNT)).valueInObject(rufus);
    assertTrue(BigDecimal.valueOf(10000L).compareTo(d) == 0);
  }

  @Test
  public void testAtAvgERXKeyOfQ() {
    BigDecimal d = Employee.PAYCHECKS.atAvg(Paycheck.AMOUNT).valueInObject(rufus);
    assertTrue(BigDecimal.valueOf(10000L).compareTo(d) == 0);
  }

  @Test
  public void testAvg() {
    BigDecimal d = Employee.PAYCHECKS.dot(Paycheck.AMOUNT).dot(ERXKey.avg()).valueInObject(rufus);
    assertTrue(BigDecimal.valueOf(10000L).compareTo(d) == 0);
  }

  @Test
  public void testAtAvg() {
    BigDecimal d = Employee.PAYCHECKS.dot(Paycheck.AMOUNT).atAvg().valueInObject(rufus);
    assertTrue(BigDecimal.valueOf(10000L).compareTo(d) == 0);
  }

  @Test
  public void testMinERXKeyOfU() {
    BigDecimal d = Employee.PAYCHECKS.dot(ERXKey.min(Paycheck.AMOUNT)).valueInObject(rufus);
    assertTrue(paycheck5000.amount().compareTo(d) == 0);
    NSTimestamp ts = Employee.PAYCHECKS.dot(ERXKey.min(Paycheck.PAYMENT_DATE)).valueInObject(rufus);
    assertTrue(paycheck5000.paymentDate().equals(ts));
    String s = Company.EMPLOYEES.dot(ERXKey.min(Employee.FIRST_NAME)).valueInObject(shinraInc);
    assertTrue(elena.firstName().equals(s));
  }

  @Test
  public void testAtMinERXKeyOfU() {
    BigDecimal d = Employee.PAYCHECKS.atMin(Paycheck.AMOUNT).valueInObject(rufus);
    assertTrue(paycheck5000.amount().compareTo(d) == 0);
    NSTimestamp ts = Employee.PAYCHECKS.atMin(Paycheck.PAYMENT_DATE).valueInObject(rufus);
    assertTrue(paycheck5000.paymentDate().equals(ts));
    String s = Company.EMPLOYEES.atMin(Employee.FIRST_NAME).valueInObject(shinraInc);
    assertTrue(elena.firstName().equals(s));
  }

  @Test
  public void testMin() {
    BigDecimal d = (BigDecimal) Employee.PAYCHECKS.dot(Paycheck.AMOUNT).dot(ERXKey.min()).valueInObject(rufus);
    assertTrue(paycheck5000.amount().compareTo(d) == 0);
    NSTimestamp ts = (NSTimestamp) Employee.PAYCHECKS.dot(Paycheck.PAYMENT_DATE).dot(ERXKey.min()).valueInObject(rufus);
    assertTrue(paycheck5000.paymentDate().equals(ts));
    String s = (String) Company.EMPLOYEES.dot(Employee.FIRST_NAME).dot(ERXKey.min()).valueInObject(shinraInc);
    assertTrue(elena.firstName().equals(s));
  }

  @Test
  public void testAtMin() {
    BigDecimal d = (BigDecimal) Employee.PAYCHECKS.dot(Paycheck.AMOUNT).atMin().valueInObject(rufus);
    assertTrue(paycheck5000.amount().compareTo(d) == 0);
    NSTimestamp ts = (NSTimestamp) Employee.PAYCHECKS.dot(Paycheck.PAYMENT_DATE).atMin().valueInObject(rufus);
    assertTrue(paycheck5000.paymentDate().equals(ts));
    String s = (String) Company.EMPLOYEES.dot(Employee.FIRST_NAME).atMin().valueInObject(shinraInc);
    assertTrue(elena.firstName().equals(s));
  }

  @Test
  public void testMaxERXKeyOfU() {
    BigDecimal d = Employee.PAYCHECKS.dot(ERXKey.max(Paycheck.AMOUNT)).valueInObject(rufus);
    assertTrue(paycheck15000.amount().compareTo(d) == 0);
    NSTimestamp ts = Employee.PAYCHECKS.dot(ERXKey.max(Paycheck.PAYMENT_DATE)).valueInObject(rufus);
    assertTrue(paycheck15000.paymentDate().equals(ts));
    String s = Company.EMPLOYEES.dot(ERXKey.max(Employee.FIRST_NAME)).valueInObject(shinraInc);
    assertTrue(sephiroth.firstName().equals(s));
  }

  @Test
  public void testAtMaxERXKeyOfU() {
    BigDecimal d = Employee.PAYCHECKS.atMax(Paycheck.AMOUNT).valueInObject(rufus);
    assertTrue(paycheck15000.amount().compareTo(d) == 0);
    NSTimestamp ts = Employee.PAYCHECKS.atMax(Paycheck.PAYMENT_DATE).valueInObject(rufus);
    assertTrue(paycheck15000.paymentDate().equals(ts));
    String s = Company.EMPLOYEES.atMax(Employee.FIRST_NAME).valueInObject(shinraInc);
    assertTrue(sephiroth.firstName().equals(s));
  }

  @Test
  public void testMax() {
    BigDecimal d = (BigDecimal) Employee.PAYCHECKS.dot(Paycheck.AMOUNT).dot(ERXKey.max()).valueInObject(rufus);
    assertTrue(paycheck15000.amount().compareTo(d) == 0);
    NSTimestamp ts = (NSTimestamp) Employee.PAYCHECKS.dot(Paycheck.PAYMENT_DATE).dot(ERXKey.max()).valueInObject(rufus);
    assertTrue(paycheck15000.paymentDate().equals(ts));
    String s = (String) Company.EMPLOYEES.dot(Employee.FIRST_NAME).dot(ERXKey.max()).valueInObject(shinraInc);
    assertTrue(sephiroth.firstName().equals(s));
  }

  @Test
  public void testAtMax() {
    BigDecimal d = (BigDecimal) Employee.PAYCHECKS.dot(Paycheck.AMOUNT).atMax().valueInObject(rufus);
    assertTrue(paycheck15000.amount().compareTo(d) == 0);
    NSTimestamp ts = (NSTimestamp) Employee.PAYCHECKS.dot(Paycheck.PAYMENT_DATE).atMax().valueInObject(rufus);
    assertTrue(paycheck15000.paymentDate().equals(ts));
    String s = (String) Company.EMPLOYEES.dot(Employee.FIRST_NAME).atMax().valueInObject(shinraInc);
    assertTrue(sephiroth.firstName().equals(s));
  }

  @Test
  public void testCount() {
    Integer count = Employee.PAYCHECKS.dot(ERXKey.count()).valueInObject(rufus);
    assertEquals(Integer.valueOf(3), count);
    count = ERXKey.count().valueInObject(shinraEmployees);
    assertEquals(Integer.valueOf(4), count);
  }

  @Test
  public void testAtCount() {
    Integer count = Employee.PAYCHECKS.atCount().valueInObject(rufus);
    assertEquals(Integer.valueOf(3), count);
    count = Company.EMPLOYEES.atCount().valueInObject(shinraInc);
    assertEquals(Integer.valueOf(4), count);
    count = Company.EMPLOYEES.dot(Employee.ROLES).atCount().valueInObject(shinraInc);
    assertEquals(Integer.valueOf(4), count);
  }

  public void testPopStdDev() {
    BigDecimal yuri = ERXKey.popStdDev().valueInObject(simpleNumbers);
    assertTrue(BigDecimal.valueOf(Math.sqrt(2)).compareTo(yuri) == 0);
  }

  public void testAtPopStdDev() {
    BigDecimal yuri = num.atPopStdDev().valueInObject(numbers);
    assertTrue(BigDecimal.valueOf(Math.sqrt(2)).compareTo(yuri) == 0);
  }

  public void testPopStdDevERXKeyOfQ() {
    BigDecimal yuri = ERXKey.popStdDev(num).valueInObject(numbers);
    assertTrue(BigDecimal.valueOf(Math.sqrt(2)).compareTo(yuri) == 0);
  }

  public void testAtPopStdDevERXKeyOfQ() {
    //Normally wouldn't need to do this, but works with strings as well as numbers
    BigDecimal yuri = num.atPopStdDev(new ERXKey<String>("toString")).valueInObject(numbers);
    assertTrue(BigDecimal.valueOf(Math.sqrt(2)).compareTo(yuri) == 0);
  }

  public void testStdDev() {
    BigDecimal yuri = ERXKey.stdDev().valueInObject(simpleNumbers);
    assertTrue(BigDecimal.valueOf(Math.sqrt(2.5)).compareTo(yuri) == 0);
  }

  public void testAtStdDev() {
    BigDecimal yuri = num.atStdDev().valueInObject(numbers);
    assertTrue(BigDecimal.valueOf(Math.sqrt(2.5)).compareTo(yuri) == 0);
  }

  public void testStdDevERXKeyOfQ() {
    BigDecimal yuri = ERXKey.stdDev(num).valueInObject(numbers);
    assertTrue(BigDecimal.valueOf(Math.sqrt(2.5)).compareTo(yuri) == 0);
  }

  public void testAtStdDevERXKeyOfQ() {
    //Normally wouldn't need to do this, but works with strings as well as numbers
    BigDecimal yuri = num.atStdDev(new ERXKey<String>("toString")).valueInObject(numbers);
    assertTrue(BigDecimal.valueOf(Math.sqrt(2.5)).compareTo(yuri) == 0);
  }

}
TOP

Related Classes of er.extensions.eof.ERXKeyTest

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.