/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.core.content.contentdata.custom;
import java.io.IOException;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.junit.Before;
import org.junit.Test;
import com.enonic.cms.framework.util.JDOMUtil;
import com.enonic.cms.core.content.contentdata.custom.stringbased.TextDataEntry;
import com.enonic.cms.core.content.contenttype.ContentHandlerName;
import com.enonic.cms.core.content.contenttype.ContentTypeConfig;
import com.enonic.cms.core.content.contenttype.ContentTypeConfigParser;
import static org.junit.Assert.*;
public class CustomContentDataExtensiveEqualsTest
{
private Element standardConfigEl;
private ContentTypeConfig config;
@Before
public void before()
throws IOException, JDOMException
{
StringBuffer standardConfigXml = new StringBuffer();
standardConfigXml.append( "<config name=\"MyContentType\" version=\"1.0\">" );
standardConfigXml.append( " <form>" );
standardConfigXml.append( " <title name=\"myTitle1\"/>" );
standardConfigXml.append( " <block name=\"TestBlock1\">" );
standardConfigXml.append( " <input name=\"myTitle1\" required=\"true\" type=\"text\">" );
standardConfigXml.append( " <display>My title 1</display>" );
standardConfigXml.append( " <xpath>contentdata/mytitle1</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " <input name=\"myTitle2\" required=\"false\" type=\"text\">" );
standardConfigXml.append( " <display>My title 2</display>" );
standardConfigXml.append( " <xpath>contentdata/mytitle2</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " </block>" );
standardConfigXml.append( " <block name=\"TestBlockGroup\" group=\"contentdata/group\">" );
standardConfigXml.append( " <input name=\"groupTitle\" required=\"false\" type=\"text\">" );
standardConfigXml.append( " <display>Group title</display>" );
standardConfigXml.append( " <xpath>grouptitle</xpath>" );
standardConfigXml.append( " </input>" );
standardConfigXml.append( " </block>" );
standardConfigXml.append( " </form>" );
standardConfigXml.append( "</config>" );
standardConfigEl = JDOMUtil.parseDocument( standardConfigXml.toString() ).getRootElement();
config = ContentTypeConfigParser.parse( ContentHandlerName.CUSTOM, standardConfigEl );
}
@Test
public void testEqualsWhenSameValuesAndSameOrder()
{
CustomContentData instance1 = new CustomContentData( config );
instance1.add( new TextDataEntry( config.getInputConfig( "myTitle1" ), "t1" ) );
instance1.add( new TextDataEntry( config.getInputConfig( "myTitle2" ), "t1" ) );
CustomContentData instance2 = new CustomContentData( config );
instance2.add( new TextDataEntry( config.getInputConfig( "myTitle1" ), "t1" ) );
instance2.add( new TextDataEntry( config.getInputConfig( "myTitle2" ), "t1" ) );
assertTrue( instance1.equals( instance2 ) );
}
@Test
public void testEqualsWhenSameValuesButNotSameOrder()
{
CustomContentData instance1 = new CustomContentData( config );
instance1.add( new TextDataEntry( config.getInputConfig( "myTitle1" ), "t1" ) );
instance1.add( new TextDataEntry( config.getInputConfig( "myTitle2" ), "t1" ) );
CustomContentData instance2 = new CustomContentData( config );
instance2.add( new TextDataEntry( config.getInputConfig( "myTitle2" ), "t1" ) );
instance2.add( new TextDataEntry( config.getInputConfig( "myTitle1" ), "t1" ) );
assertTrue( instance1.equals( instance2 ) );
}
@Test
public void testGroupedNotEqualsWhenSameValuesButNotSameOrder()
{
CustomContentData instance1 = new CustomContentData( config );
instance1.add( new TextDataEntry( config.getInputConfig( "myTitle1" ), "t1" ) );
GroupDataEntry group1i1 = new GroupDataEntry( "TestBlockGroup", "contentdata/group" );
instance1.add( group1i1 );
group1i1.add( new TextDataEntry( config.getInputConfig( "groupTitle" ), "g1" ) );
GroupDataEntry group1i2 = new GroupDataEntry( "TestBlockGroup", "contentdata/group" );
instance1.add( group1i2 );
group1i2.add( new TextDataEntry( config.getInputConfig( "groupTitle" ), "g2" ) );
CustomContentData instance2 = new CustomContentData( config );
instance2.add( new TextDataEntry( config.getInputConfig( "myTitle1" ), "t1" ) );
GroupDataEntry group2i1 = new GroupDataEntry( "TestBlockGroup", "contentdata/group" );
instance2.add( group2i1 );
group2i1.add( new TextDataEntry( config.getInputConfig( "groupTitle" ), "g2" ) );
GroupDataEntry group2i2 = new GroupDataEntry( "TestBlockGroup", "contentdata/group" );
instance2.add( group2i2 );
group2i2.add( new TextDataEntry( config.getInputConfig( "groupTitle" ), "g1" ) );
assertFalse( instance1.equals( instance2 ) );
}
@Test
public void testGroupedEqualsWhenSameValuesAndSameOrder()
{
CustomContentData instance1 = new CustomContentData( config );
instance1.add( new TextDataEntry( config.getInputConfig( "myTitle1" ), "t1" ) );
GroupDataEntry group1i1 = new GroupDataEntry( "TestBlockGroup", "contentdata/group" );
instance1.add( group1i1 );
group1i1.add( new TextDataEntry( config.getInputConfig( "groupTitle" ), "g1" ) );
GroupDataEntry group1i2 = new GroupDataEntry( "TestBlockGroup", "contentdata/group" );
instance1.add( group1i2 );
group1i2.add( new TextDataEntry( config.getInputConfig( "groupTitle" ), "g2" ) );
CustomContentData instance2 = new CustomContentData( config );
instance2.add( new TextDataEntry( config.getInputConfig( "myTitle1" ), "t1" ) );
GroupDataEntry group2i1 = new GroupDataEntry( "TestBlockGroup", "contentdata/group" );
instance2.add( group2i1 );
group2i1.add( new TextDataEntry( config.getInputConfig( "groupTitle" ), "g1" ) );
GroupDataEntry group2i2 = new GroupDataEntry( "TestBlockGroup", "contentdata/group" );
instance2.add( group2i2 );
group2i2.add( new TextDataEntry( config.getInputConfig( "groupTitle" ), "g2" ) );
assertTrue( instance1.equals( instance2 ) );
}
}