/**
* Copyright (c) 2014 - 2017 Frank Appel
* 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:
* Frank Appel - initial API and implementation
*/
package com.codeaffine.eclipse.swt.layout;
import org.assertj.core.api.AbstractAssert;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.widgets.Control;
public class FormDatasAssert extends AbstractAssert<FormDatasAssert, FormDatas> {
private static final String PATTERN_ASSIGNED_TO
= "Expected FormData <%s> to be assigned to given control but was <%s>.";
private static final String PATTERN_ATTACHMENT_EXISTS = "Expected %s attachment to exist but was null.";
private static final String PATTERN_SAME = "Expected %s to be <%s> but was <%s>.";
public FormDatasAssert( FormDatas actual ) {
super( actual, FormDatasAssert.class );
}
public static FormDatasAssert assertThat( FormDatas actual ) {
return new FormDatasAssert( actual );
}
public FormDatasAssert isAssignedTo( Control control ) {
isNotNull();
if( actual.getFormData() == null ) {
failWithMessage( "Expected actual FormData not to be null but it was." );
}
if( actual.getFormData() != control.getLayoutData() ) {
failWithMessage( PATTERN_ASSIGNED_TO, actual.getFormData(), control.getLayoutData() );
}
return this;
}
public FormDatasAssert hasWidth( int width ) {
isNotNull();
isEquals( "width", width, actual.getFormData().width );
return this;
}
public FormDatasAssert hasHeight( int height ) {
isNotNull();
isEquals( "height", height, actual.getFormData().height );
return this;
}
public FormDatasAssert isAttachedToLeft( int numerator, int margin ) {
isNotNull();
verifyAttachment( actual.getFormData().left, "left", numerator, margin );
return this;
}
public FormDatasAssert isAttachedToRight( int numerator, int margin ) {
isNotNull();
verifyAttachment( actual.getFormData().right, "right", numerator, margin );
return this;
}
public FormDatasAssert isAttachedToTop( int numerator, int margin ) {
isNotNull();
verifyAttachment( actual.getFormData().top, "top", numerator, margin );
return this;
}
public FormDatasAssert isAttachedToBottom( int numerator, int margin ) {
isNotNull();
verifyAttachment( actual.getFormData().bottom, "bottom", numerator, margin );
return this;
}
public FormDatasAssert isAttachedAtLeftTo( Control control, int margin, int alignment ) {
isNotNull();
verifyAttachment( actual.getFormData().left, "left", control, margin, alignment );
return this;
}
public FormDatasAssert isAttachedAtRightTo( Control control, int margin, int alignment ) {
isNotNull();
verifyAttachment( actual.getFormData().right, "right", control, margin, alignment );
return this;
}
public FormDatasAssert isAttachedAtTopTo( Control control, int margin, int alignment ) {
isNotNull();
verifyAttachment( actual.getFormData().top, "top", control, margin, alignment );
return this;
}
public FormDatasAssert isAttachedAtBottomTo( Control control, int margin, int alignment ) {
isNotNull();
verifyAttachment( actual.getFormData().bottom, "bottom", control, margin, alignment );
return this;
}
private void attachmentExists( FormAttachment attachment, String direction ) {
if( null == attachment ) {
failWithMessage( PATTERN_ATTACHMENT_EXISTS, direction );
}
}
private void verifyAttachment( FormAttachment attachment, String direction, int numerator, int margin ) {
attachmentExists( attachment, direction );
verifyAttachment( attachment, numerator, margin );
}
private void verifyAttachment( FormAttachment attachment , int numerator , int margin ) {
isEquals( "numerator", numerator, attachment.numerator );
isEquals( "offset", margin, attachment.offset );
isEquals( "aligment", 0, attachment.alignment );
isSame( "control", null, attachment.control );
}
private void verifyAttachment(
FormAttachment attachment, String direction, Control control, int margin, int alignment )
{
attachmentExists( attachment, direction );
verifyAttachment( attachment, control, margin, alignment );
}
private void verifyAttachment( FormAttachment attachment , Control control , int margin , int alignment ) {
isSame( "control", control, attachment.control );
isEquals( "offset", margin, attachment.offset );
isEquals( "aligment", alignment, attachment.alignment );
isEquals( "numerator", 0, attachment.numerator );
}
private void isSame( String name, Object first, Object second ) {
if( first != second ) {
failWithMessage( PATTERN_SAME, name, first, second );
}
}
private void isEquals( String name, int first, int second ) {
if( first != second ) {
failWithMessage( PATTERN_SAME, name, first, second );
}
}
}