Package org.mcarthur.sandy.gwt.event.list.test

Source Code of org.mcarthur.sandy.gwt.event.list.test.FilteredEventListTest

/*
* Copyright 2007 Sandy McArthur, Jr.
*
* 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.
*/

package org.mcarthur.sandy.gwt.event.list.test;

import org.mcarthur.sandy.gwt.event.list.client.EventList;
import org.mcarthur.sandy.gwt.event.list.client.EventLists;
import org.mcarthur.sandy.gwt.event.list.client.FilteredEventList;
import org.mcarthur.sandy.gwt.event.list.client.ListEvent;
import org.mcarthur.sandy.gwt.event.list.client.ListEventListener;
import org.mcarthur.sandy.gwt.event.list.client.SortedEventList;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
* Tests for {@link org.mcarthur.sandy.gwt.event.list.client.FilteredEventList}.
*
* @author Sandy McArthur
*/
public class FilteredEventListTest extends TransformedEventListTest {
    private static final FilteredEventList.Filter ODD_FILTER = new FilteredEventList.Filter() {
        public boolean accept(final Object element) {
            final Integer i = (Integer)element;
            return i.intValue() % 2 != 0;
        }
    };
    private static final FilteredEventList.Filter EVEN_FILTER = new FilteredEventList.Filter() {
        public boolean accept(final Object element) {
            final Integer i = (Integer)element;
            return i.intValue() % 2 == 0;
        }
    };

    protected EventList createEmptyEventLists() {
        return EventLists.filteredEventList();
    }

    protected EventList createBackedEventList(final EventList el) {
        return EventLists.filteredEventList(el);
    }

    protected FilteredEventList createBackedFilteredEventList(final EventList el) {
        return (FilteredEventList)createBackedEventList(el);
    }

    public void testToArrayRespectsFilters() {
        final EventList el = EventLists.eventList();
        final FilteredEventList fel = EventLists.filteredEventList(el);
        fel.setFilter(new FilteredEventList.Filter() {
            public boolean accept(final Object element) {
                return ((Number)element).intValue() % 2 == 0;
            }
        });

        for (int i=0; i < 10; i++) {
            el.add(new Integer(i));
        }

        assertEquals(10, el.size());
        assertEquals(5, fel.size());
        assertEquals(5, fel.toArray().length);
    }

    public void testFoo() {
        final EventList el = EventLists.eventList();
        final SortedEventList sel = EventLists.sortedEventList(el);
        final FilteredEventList fel = EventLists.filteredEventList(sel);

        el.add(new Integer(25));
        el.add(new Integer(33));
        el.add(new Integer(55));
        el.add(new Integer(49));
        el.add(new Integer(32));
        el.add(new Integer(57));

        final Comparator natural = new Comparator() {
            public int compare(final Object o1, final Object o2) {
                return ((Comparable)o1).compareTo(o2);
            }
        };
        final Comparator reverse = new Comparator() {
            public int compare(final Object o1, final Object o2) {
                return natural.compare(o2, o1);
            }
        };

        sel.setComparator(natural);

        final FilteredEventList.Filter filter = new FilteredEventList.Filter() {
            public boolean accept(final Object element) {
                final int i = ((Number)element).intValue();
                return  20 < i && i < 50;
            }
        };

        fel.setFilter(filter);

        final List n1 = new ArrayList(fel);

        sel.setComparator(reverse);

        final List r1 = new ArrayList(fel);

        assertEquals(n1.size(), r1.size());
        assertTrue(n1.containsAll(r1));
        assertTrue(r1.containsAll(n1));
    }

    public void testContains() {
        final EventList el = EventLists.eventList();
        prefillWithIntegers(el, 4);
        final FilteredEventList fel = createBackedFilteredEventList(el);

        final List even = new ArrayList();
        even.add(Integer.valueOf(0));
        even.add(Integer.valueOf(2));

        final List odd = new ArrayList();
        odd.add(Integer.valueOf(1));
        odd.add(Integer.valueOf(3));

        fel.setFilter(EVEN_FILTER);

        Collections.shuffle(el);

        assertEquals(EVEN_FILTER, fel.getFilter());

        assertTrue(fel.containsAll(even));
        assertTrue(even.containsAll(fel));

        fel.setFilter(ODD_FILTER);

        assertTrue(fel.containsAll(odd));
        assertTrue(odd.containsAll(fel));
    }

    public void testSetFilter() {
        final EventList el = EventLists.eventList();
        prefillWithIntegers(el, 4);
        final FilteredEventList fel = createBackedFilteredEventList(el);

        final List even = new ArrayList();
        even.add(Integer.valueOf(0));
        even.add(Integer.valueOf(2));

        final List odd = new ArrayList();
        odd.add(Integer.valueOf(1));
        odd.add(Integer.valueOf(3));

        fel.setFilter(EVEN_FILTER);

        assertEquals(2, fel.size());
        assertTrue(even.containsAll(fel));

        fel.setFilter(ODD_FILTER);

        assertEquals(2, fel.size());
        assertTrue(odd.containsAll(fel));

        fel.setFilter(null);

        assertEquals(4, fel.size());
        assertTrue(fel.containsAll(even));
        assertTrue(fel.containsAll(odd));

        fel.setFilter(null);
        assertNull(fel.getFilter());

        final FilteredEventList.Filter noneFilter = new FilteredEventList.Filter() {
            public boolean accept(final Object element) {
                return false;
            }
        };
        fel.setFilter(noneFilter);
        assertEquals(noneFilter, fel.getFilter());

        fel.setFilter(null);
        assertNull(fel.getFilter());
    }

    public void testAdd() {
        super.testAdd();
       
        final EventList el = EventLists.eventList();
        prefillWithIntegers(el, 4);
        final FilteredEventList fel = createBackedFilteredEventList(el);

        final List even = new ArrayList();
        even.add(Integer.valueOf(0));
        even.add(Integer.valueOf(2));

        final List odd = new ArrayList();
        odd.add(Integer.valueOf(1));
        odd.add(Integer.valueOf(3));

        fel.setFilter(EVEN_FILTER);

        fel.add(Integer.valueOf(4));
        try {
            fel.add(Integer.valueOf(5));
            fail("Exepected an IllegalArgumentException.");
        } catch (IllegalArgumentException iae) {
            // expected
        }

        fel.setFilter(ODD_FILTER);

        fel.add(Integer.valueOf(5));
        try {
            fel.add(Integer.valueOf(6));
            fail("Exepected an IllegalArgumentException.");
        } catch (IllegalArgumentException iae) {
            // expected
        }

        fel.add(0,Integer.valueOf(5));
        try {
            fel.add(0, Integer.valueOf(6));
            fail("Exepected an IllegalArgumentException.");
        } catch (IllegalArgumentException iae) {
            // expected
        }
    }

    public void testAddAll() {
        super.testAdd();

        final EventList el = EventLists.eventList();
        prefillWithIntegers(el, 4);
        final FilteredEventList fel = createBackedFilteredEventList(el);

        final List even = new ArrayList();
        even.add(Integer.valueOf(0));
        even.add(Integer.valueOf(2));

        final List odd = new ArrayList();
        odd.add(Integer.valueOf(1));
        odd.add(Integer.valueOf(3));

        fel.setFilter(EVEN_FILTER);

        fel.addAll(even);

        final int beforeSize = fel.size();
        try {
            fel.addAll(odd);
            fail("Exepected an IllegalArgumentException.");
        } catch (IllegalArgumentException iae) {
            // expected
        }
        assertEquals(beforeSize, fel.size());
    }

    public void testRemove() {
        super.testRemove();

        final EventList el = EventLists.eventList();
        prefillWithIntegers(el, 6);

        final FilteredEventList fel = createBackedFilteredEventList(el);

        fel.setFilter(EVEN_FILTER);

        final List even = new ArrayList(fel);

        ListEventListener flel = new ListEventListener() {
            private int count = 0;
            public void listChanged(final ListEvent listEvent) {
                switch (count++) {
                    case 0:
                        assertNull("listEvent: " + listEvent, listEvent);
                        break;
                    default:
                        fail("Unexpected: " + listEvent);
                }
            }
        };
        fel.addListEventListener(flel);
        assertFalse(EVEN_FILTER.accept(el.get(1)));
        assertEquals(3, fel.size());
        Object removed = el.remove(1);
        assertEquals(3, fel.size());
        flel.listChanged(null);
        fel.removeListEventListener(flel);

        el.add(1, removed);

        flel = new ListEventListener() {
            private int count = 0;
            public void listChanged(final ListEvent listEvent) {
                switch (count++) {
                    case 0:
                        assertEquals(ListEvent.createRemoved(fel, 1), listEvent);
                        break;
                    case 1:
                        assertNull("listEvent: " + listEvent, listEvent);
                        break;
                    default:
                        fail("Unexpected: " + listEvent);
                }
            }
        };
        fel.addListEventListener(flel);
        assertTrue(EVEN_FILTER.accept(el.get(2)));
        assertEquals(3, fel.size());
        removed = el.remove(2);
        assertEquals(2, fel.size());
        flel.listChanged(null);
        fel.removeListEventListener(flel);
        assertTrue(even.containsAll(fel));

        el.add(2, removed);

        ListEventListener lel = new ListEventListener() {
            private int count = 0;
            public void listChanged(final ListEvent listEvent) {
                switch (count++) {
                    case 0:
                        assertEquals(ListEvent.createRemoved(el, 2), listEvent);
                        break;
                    case 1:
                        assertNull("listEvent: " + listEvent, listEvent);
                        break;
                    default:
                        fail("Unexpected: " + listEvent);
                }
            }
        };
        flel = new ListEventListener() {
            private int count = 0;
            public void listChanged(final ListEvent listEvent) {
                switch (count++) {
                    case 0:
                        assertEquals(ListEvent.createRemoved(fel, 1), listEvent);
                        break;
                    case 1:
                        assertNull("listEvent: " + listEvent, listEvent);
                        break;
                    default:
                        fail("Unexpected: " + listEvent);
                }
            }
        };
        el.addListEventListener(lel);
        fel.addListEventListener(flel);
        assertTrue(EVEN_FILTER.accept(el.get(2)));
        assertEquals(3, fel.size());
        fel.remove(1);
        assertEquals(2, fel.size());
        lel.listChanged(null);
        flel.listChanged(null);
        fel.removeListEventListener(flel);
    }

    public void testSet() {
        super.testSet(); // TODO: uncomment when FilteredEventListImpl is optimized

        final FilteredEventList fel = (FilteredEventList)createEmptyEventLists();

        prefillWithIntegers(fel, 6);

        fel.setFilter(ODD_FILTER);

        fel.set(0, Integer.valueOf(3));
        try {
            fel.set(0, Integer.valueOf(4));
            fail("Expected IllegalArgumentException.");
        } catch (IllegalArgumentException iae) {
            // expected
        }
    }

    public void testSetViaDeeperList() {
        final EventList el = EventLists.eventList();
        prefillWithIntegers(el, 6);

        final FilteredEventList fel = createBackedFilteredEventList(el);

        fel.setFilter(EVEN_FILTER);

        ListEventListener lel = new ListEventListener() {
            private int count = 0;
            public void listChanged(final ListEvent listEvent) {
                switch (count++) {
                    case 0:
                        assertNull("listEvent: " + listEvent, listEvent);
                        break;
                    default:
                        fail("Unexpected: " + listEvent);
                }
            }
        };
        fel.addListEventListener(lel);
        assertFalse(EVEN_FILTER.accept(Integer.valueOf(-1)));
        el.set(1, Integer.valueOf(-1));
        lel.listChanged(null);
        assertEquals(3, fel.size());
        fel.removeListEventListener(lel);

        lel = new ListEventListener() {
            private int count = 0;
            public void listChanged(final ListEvent listEvent) {
                switch (count++) {
                    case 0:
                        assertEquals(ListEvent.createChanged(fel, 1), listEvent);
                        break;
                    case 1:
                        assertNull("listEvent: " + listEvent, listEvent);
                        break;
                    default:
                        fail("Unexpected: " + listEvent);
                }
            }
        };
        fel.addListEventListener(lel);
        assertTrue(EVEN_FILTER.accept(Integer.valueOf(-2)));
        el.set(2, Integer.valueOf(-2));
        lel.listChanged(null);
        assertEquals(3, fel.size());
        fel.removeListEventListener(lel);

        lel = new ListEventListener() {
            private int count = 0;
            public void listChanged(final ListEvent listEvent) {
                switch (count++) {
                    case 0:
                        assertEquals(ListEvent.createAdded(fel, 2), listEvent);
                        break;
                    case 1:
                        assertNull("listEvent: " + listEvent, listEvent);
                        break;
                    default:
                        fail("Unexpected: " + listEvent);
                }
            }
        };
        fel.addListEventListener(lel);
        assertTrue(EVEN_FILTER.accept(Integer.valueOf(30)));
        el.set(3, Integer.valueOf(30));
        lel.listChanged(null);
        assertEquals(4, fel.size());
        fel.removeListEventListener(lel);

        lel = new ListEventListener() {
            private int count = 0;
            public void listChanged(final ListEvent listEvent) {
                switch (count++) {
                    case 0:
                        assertEquals(ListEvent.createRemoved(fel, 2), listEvent);
                        break;
                    case 1:
                        assertNull("listEvent: " + listEvent, listEvent);
                        break;
                    default:
                        fail("Unexpected: " + listEvent);
                }
            }
        };
        fel.addListEventListener(lel);
        assertFalse(EVEN_FILTER.accept(Integer.valueOf(3)));
        el.set(3, Integer.valueOf(3));
        lel.listChanged(null);
        assertEquals(3, fel.size());
        fel.removeListEventListener(lel);
    }
}
TOP

Related Classes of org.mcarthur.sandy.gwt.event.list.test.FilteredEventListTest

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.