Package org.eclipse.sapphire.tests.modeling.events

Source Code of org.eclipse.sapphire.tests.modeling.events.TestPropertyEvents

/******************************************************************************
* Copyright (c) 2014 Oracle
* 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.eclipse.org/legal/epl-v10.html
*
* Contributors:
*    Konstantin Komissarchik - initial implementation and ongoing maintenance
******************************************************************************/

package org.eclipse.sapphire.tests.modeling.events;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.sapphire.Event;
import org.eclipse.sapphire.Listener;
import org.eclipse.sapphire.Property;
import org.eclipse.sapphire.modeling.Status;
import org.eclipse.sapphire.tests.SapphireTestCase;
import org.junit.Test;

/**
* Tests delivery of property events.
*
* @author <a href="mailto:konstantin.komissarchik@oracle.com">Konstantin Komissarchik</a>
*/

public final class TestPropertyEvents extends SapphireTestCase
{
    private List<Event> monitor( final TestElement element )
    {
        return monitor( element, null );
    }
   
    private List<Event> monitor( final TestElement element, final String path )
    {
        final List<Event> events = new ArrayList<Event>();
       
        final Listener listener = new Listener()
        {
            @Override
            public void handle( final Event event )
            {
                events.add( event );
            }
        };
       
        if( path == null )
        {
            element.attach( listener );
           
            for( Property property : element.properties() )
            {
                property.attach( listener );
            }
        }
        else
        {
            element.attach( listener, path );
        }
       
        return events;
    }
   
    @Test
   
    public void testEventsValuePropertyPlain() throws Exception
    {
        final TestElement element = TestElement.TYPE.instantiate();
       
        try
        {
            final List<Event> events = monitor( element );
           
            assertEquals( 0, events.size() );
           
            element.getValuePlain().text();
            element.setValuePlain( "a" );
           
            assertEquals( 1, events.size() );
            assertValuePropertyContentEvent( events.get( 0 ), element.getValuePlain(), null, "a" );
           
            events.clear();
           
            element.getValuePlain().validation();
            element.setValuePlain( "b" );
           
            assertEquals( 1, events.size() );
            assertValuePropertyContentEvent( events.get( 0 ), element.getValuePlain(), "a", "b" );
           
            events.clear();

            element.getValuePlain().enabled();
            element.setValuePlain( "c" );
           
            assertEquals( 1, events.size() );
            assertValuePropertyContentEvent( events.get( 0 ), element.getValuePlain(), "b", "c" );
        }
        finally
        {
            element.dispose();
        }
    }
   
    @Test

    public void testEventsValuePropertyConstrained() throws Exception
    {
        final TestElement element = TestElement.TYPE.instantiate();
       
        try
        {
            final List<Event> events = monitor( element );
           
            assertEquals( 0, events.size() );
           
            element.getValueConstrained().text();
            element.setValueConstrained( "a" );
           
            assertEquals( 1, events.size() );
            assertValuePropertyContentEvent( events.get( 0 ), element.getValueConstrained(), null, "a" );
           
            events.clear();
           
            element.getValueConstrained().validation();
            element.setValueConstrained( "b" );
           
            assertEquals( 1, events.size() );
            assertValuePropertyContentEvent( events.get( 0 ), element.getValueConstrained(), "a", "b" );
           
            events.clear();
           
            element.setValueConstrained( null );
           
            assertEquals( 2, events.size() );
            assertValuePropertyContentEvent( events.get( 0 ), element.getValueConstrained(), "b", null );
            assertPropertyValidationEvent( events.get( 1 ), element.getValueConstrained(), Status.createOkStatus(), Status.createErrorStatus( "Value constrained must be specified" ) );
           
            events.clear();

            element.getValueConstrained().enabled();
            element.setValueConstrained( "c" );
           
            assertEquals( 2, events.size() );
            assertValuePropertyContentEvent( events.get( 0 ), element.getValueConstrained(), null, "c" );
            assertPropertyValidationEvent( events.get( 1 ), element.getValueConstrained(), Status.createErrorStatus( "Value constrained must be specified" ), Status.createOkStatus() );
           
            events.clear();
           
            element.setEnablement( false );
           
            assertEquals( 2, events.size() );
            assertValuePropertyContentEvent( events.get( 0 ), element.getEnablement(), null, "false" );
            assertPropertyEnablementEvent( events.get( 1 ), element.getValueConstrained(), true, false );
        }
        finally
        {
            element.dispose();
        }
    }
   
    @Test
   
    public void testEventsListPropertyDescendents() throws Exception
    {
        final TestElement element = TestElement.TYPE.instantiate();
       
        try
        {
            final List<Event> events = monitor( element, "List/*" );
           
            assertEquals( 0, events.size() );

            final TestElement.ListEntry a = element.getList().insert();
           
            assertEquals( 1, events.size() );
            assertPropertyContentEvent( events.get( 0 ), element.getList() );
           
            events.clear();
           
            final TestElement.ListEntry b = element.getList().insert();

            assertEquals( 1, events.size() );
            assertPropertyContentEvent( events.get( 0 ), element.getList() );
           
            events.clear();
           
            a.setValue( "abc" );
            b.setValue( "def" );
           
            assertEquals( 2, events.size() );
            assertPropertyContentEvent( events.get( 0 ), a.getValue() );
            assertPropertyContentEvent( events.get( 1 ), b.getValue() );
           
            events.clear();
           
            element.getList().remove( a );
           
            assertEquals( 1, events.size() );
            assertPropertyContentEvent( events.get( 0 ), element.getList() );
           
            events.clear();
           
            final TestElement.ListEntry ba = b.getChildren().insert();
            final TestElement.ListEntry bb = b.getChildren().insert();

            assertEquals( 2, events.size() );
            assertPropertyContentEvent( events.get( 0 ), b.getChildren() );
            assertPropertyContentEvent( events.get( 1 ), b.getChildren() );
           
            events.clear();
           
            ba.setValue( "ghi" );
            bb.setValue( "jkl" );

            assertEquals( 2, events.size() );
            assertPropertyContentEvent( events.get( 0 ), ba.getValue() );
            assertPropertyContentEvent( events.get( 1 ), bb.getValue() );
        }
        finally
        {
            element.dispose();
        }
    }

    @Test
   
    public void testEventsListPropertyPath() throws Exception
    {
        final TestElement element = TestElement.TYPE.instantiate();
       
        try
        {
            final List<Event> events = monitor( element, "List/Children/Value" );
           
            assertEquals( 0, events.size() );

            final TestElement.ListEntry a = element.getList().insert();
           
            assertEquals( 1, events.size() );
            assertPropertyContentEvent( events.get( 0 ), element.getList() );
           
            events.clear();
           
            final TestElement.ListEntry b = element.getList().insert();

            assertEquals( 1, events.size() );
            assertPropertyContentEvent( events.get( 0 ), element.getList() );
           
            events.clear();
           
            a.setValue( "abc" );
            b.setValue( "def" );
           
            assertEquals( 0, events.size() );
           
            element.getList().remove( a );
           
            assertEquals( 1, events.size() );
            assertPropertyContentEvent( events.get( 0 ), element.getList() );
           
            events.clear();
           
            final TestElement.ListEntry ba = b.getChildren().insert();
            final TestElement.ListEntry bb = b.getChildren().insert();

            assertEquals( 2, events.size() );
            assertPropertyContentEvent( events.get( 0 ), b.getChildren() );
            assertPropertyContentEvent( events.get( 1 ), b.getChildren() );
           
            events.clear();
           
            ba.setValue( "ghi" );
            bb.setValue( "jkl" );

            assertEquals( 2, events.size() );
            assertPropertyContentEvent( events.get( 0 ), ba.getValue() );
            assertPropertyContentEvent( events.get( 1 ), bb.getValue() );
        }
        finally
        {
            element.dispose();
        }
    }

}
TOP

Related Classes of org.eclipse.sapphire.tests.modeling.events.TestPropertyEvents

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.