Example usage for org.eclipse.jface.dialogs IMessageProvider ERROR

List of usage examples for org.eclipse.jface.dialogs IMessageProvider ERROR

Introduction

In this page you can find the example usage for org.eclipse.jface.dialogs IMessageProvider ERROR.

Prototype

int ERROR

To view the source code for org.eclipse.jface.dialogs IMessageProvider ERROR.

Click Source Link

Document

Constant for an error message (value 3).

Usage

From source file:com.opera.widgets.ui.editor.validation.AbstractControlValidation.java

License:Open Source License

public static int getMessageType(IStatus status) {
    int severity = status.getSeverity();
    if (severity == IStatus.OK) {
        return IMessageProvider.NONE;
    } else if (severity == IStatus.ERROR) {
        return IMessageProvider.ERROR;
    } else if (severity == IStatus.WARNING) {
        return IMessageProvider.WARNING;
    } else if (severity == IStatus.INFO) {
        return IMessageProvider.INFORMATION;
    }// w  w w . j  ava 2s .co  m
    return IMessageProvider.NONE;
}

From source file:com.puppetlabs.geppetto.ui.editor.GuardedModulePage.java

License:Open Source License

void showGeneralError(boolean show, String msgKey) {
    IMessageManager msgManager = getManagedForm().getMessageManager();
    if (show) {/*www .jav a 2  s.  co  m*/
        String msg = UIPlugin.getLocalString(msgKey);
        msgManager.addMessage(msgKey, msg, null, IMessageProvider.ERROR);
    } else
        msgManager.removeMessage(msgKey);
    msgManager.update();
}

From source file:com.rcpcompany.uibindings.bindingMessages.ValidationLabelDecorator.java

License:Open Source License

@Override
public void decorate(Object element, IDecoration decoration) {
    final Integer severity = myObjectSeverities.get(element);
    if (severity == null)
        return;//from  w  w  w. j  a  va2 s. c o  m
    if (Activator.getDefault() != null && Activator.getDefault().TRACE_LABEL_DECORATOR) {
        LogUtils.debug(this, hashCode() + ": " + element + ": severity: " + severity); //$NON-NLS-1$ //$NON-NLS-2$
    }
    switch (severity) {
    case IMessageProvider.NONE:
        break;
    case IMessageProvider.INFORMATION:
        break;
    case IMessageProvider.WARNING:
        decoration.addOverlay(WARNING_IMAGE);
        break;
    case IMessageProvider.ERROR:
        decoration.addOverlay(ERROR_IMAGE);
        break;
    default:
        break;
    }
}

From source file:com.rcpcompany.uibindings.extests.bindingMessages.LabelDecoratorTest.java

License:Open Source License

/**
 * Test with no propagation of status//from   ww w.  j  a v  a 2 s .  co m
 */
@Test
public void decoratorNoPropagateTest() {
    // Reset to no errors
    c0.setAbbreviation("AA");
    c1.setAbbreviation("BB");
    sleepWithEvents(myLabelDecorator, 2 * VD);

    testLD(myLabelDecorator, c0, IMessageProvider.NONE, -1);
    testLD(myLabelDecorator, c1, IMessageProvider.NONE, -1);

    // Change with no event
    c0.setAbbreviation("CC");
    c1.setAbbreviation("BB");
    sleepWithEvents(myLabelDecorator, 2 * VD);

    testLD(myLabelDecorator, c0, IMessageProvider.NONE, -1);
    testLD(myLabelDecorator, c1, IMessageProvider.NONE, -1);

    // !uppercase => warning
    c0.setAbbreviation("aa");
    c1.setAbbreviation("BB");
    sleepWithEvents(myLabelDecorator, 2 * VD, c0);

    testLD(myLabelDecorator, c0, IMessageProvider.WARNING, -1);
    testLD(myLabelDecorator, c1, IMessageProvider.NONE, -1);

    // length != 2 => error
    c0.setAbbreviation("ABC");
    c1.setAbbreviation("BB");
    sleepWithEvents(myLabelDecorator, 2 * VD, c0);

    testLD(myLabelDecorator, c0, IMessageProvider.ERROR, -1);
    testLD(myLabelDecorator, c1, IMessageProvider.NONE, -1);

    // length != 2 & !uppercase => error
    c0.setAbbreviation("abc");
    c1.setAbbreviation("BB");
    sleepWithEvents(myLabelDecorator, 2 * VD); // no change!

    testLD(myLabelDecorator, c0, IMessageProvider.ERROR, -1);
    testLD(myLabelDecorator, c1, IMessageProvider.NONE, -1);

    // Reset to no errors
    c0.setAbbreviation("AA");
    c1.setAbbreviation("DD");
    sleepWithEvents(myLabelDecorator, 2 * VD, c0);

    testLD(myLabelDecorator, c0, IMessageProvider.NONE, -1);
    testLD(myLabelDecorator, c1, IMessageProvider.NONE, -1);
}

From source file:com.rcpcompany.uibindings.extests.bindingMessages.LabelDecoratorTest.java

License:Open Source License

/**
 * Test with propagation of status//  w  w w. j a  va 2  s  .  com
 * <p>
 * The tree is given as shop->folder->{c0, c1}
 */
@Test
public void testDecoratorePropagateTest() {
    final Object folder = new Object() {
        @Override
        public String toString() {
            return "FOLDER";
        }
    };
    final IPropagationAdapter myAdapter = new IPropagationAdapter() {
        @Override
        public Object getParent(Object object) {
            if (object == c0 || object == c1)
                return folder;
            if (object == folder)
                return myShop;
            return null;
        }
    };

    myLabelDecorator.setPropagationAdapter(myAdapter);

    // Reset to no errors
    c0.setAbbreviation("AA");
    c1.setAbbreviation("BB");
    sleepWithEvents(myLabelDecorator, 2 * VD);

    testLD(myLabelDecorator, myShop, IMessageProvider.NONE, IMessageProvider.NONE);
    testLD(myLabelDecorator, folder, IMessageProvider.NONE, IMessageProvider.NONE);
    testLD(myLabelDecorator, c0, IMessageProvider.NONE, IMessageProvider.NONE);
    testLD(myLabelDecorator, c1, IMessageProvider.NONE, IMessageProvider.NONE);

    // Change with no event
    c0.setAbbreviation("CC");
    c1.setAbbreviation("BB");
    sleepWithEvents(myLabelDecorator, 2 * VD);

    testLD(myLabelDecorator, myShop, IMessageProvider.NONE, IMessageProvider.NONE);
    testLD(myLabelDecorator, folder, IMessageProvider.NONE, IMessageProvider.NONE);
    testLD(myLabelDecorator, c0, IMessageProvider.NONE, IMessageProvider.NONE);
    testLD(myLabelDecorator, c1, IMessageProvider.NONE, IMessageProvider.NONE);

    // !uppercase => warning
    c0.setAbbreviation("aa");
    c1.setAbbreviation("BB");
    sleepWithEvents(myLabelDecorator, 2 * VD, myShop, folder, c0);

    testLD(myLabelDecorator, myShop, IMessageProvider.NONE, IMessageProvider.WARNING);
    testLD(myLabelDecorator, folder, IMessageProvider.NONE, IMessageProvider.WARNING);
    testLD(myLabelDecorator, c0, IMessageProvider.WARNING, IMessageProvider.WARNING);
    testLD(myLabelDecorator, c1, IMessageProvider.NONE, IMessageProvider.NONE);

    // !uppercase && length != 2 => error
    c0.setAbbreviation("aa");
    c1.setAbbreviation("ABC");
    sleepWithEvents(myLabelDecorator, 2 * VD, myShop, folder, c1);

    testLD(myLabelDecorator, myShop, IMessageProvider.NONE, IMessageProvider.ERROR);
    testLD(myLabelDecorator, folder, IMessageProvider.NONE, IMessageProvider.ERROR);
    testLD(myLabelDecorator, c0, IMessageProvider.WARNING, IMessageProvider.WARNING);
    testLD(myLabelDecorator, c1, IMessageProvider.ERROR, IMessageProvider.ERROR);

    // shop no name && !uppercase => warning+error
    myShop.setName("");
    c0.setAbbreviation("aa");
    c1.setAbbreviation("BB");
    sleepWithEvents(myLabelDecorator, 2 * VD, folder, c1);

    testLD(myLabelDecorator, myShop, IMessageProvider.ERROR, IMessageProvider.ERROR);
    testLD(myLabelDecorator, folder, IMessageProvider.NONE, IMessageProvider.WARNING);
    testLD(myLabelDecorator, c0, IMessageProvider.WARNING, IMessageProvider.WARNING);
    testLD(myLabelDecorator, c1, IMessageProvider.NONE, IMessageProvider.NONE);

    // length != 2 => error
    myShop.setName("hello");
    c0.setAbbreviation("ABC");
    c1.setAbbreviation("BB");
    sleepWithEvents(myLabelDecorator, 2 * VD, folder, c0);

    testLD(myLabelDecorator, myShop, IMessageProvider.NONE, IMessageProvider.ERROR);
    testLD(myLabelDecorator, folder, IMessageProvider.NONE, IMessageProvider.ERROR);
    testLD(myLabelDecorator, c0, IMessageProvider.ERROR, IMessageProvider.ERROR);
    testLD(myLabelDecorator, c1, IMessageProvider.NONE, IMessageProvider.NONE);

    // length != 2 & !uppercase => error
    c0.setAbbreviation("abc");
    c1.setAbbreviation("BB");
    sleepWithEvents(myLabelDecorator, 2 * VD); // no change!

    testLD(myLabelDecorator, myShop, IMessageProvider.NONE, IMessageProvider.ERROR);
    testLD(myLabelDecorator, folder, IMessageProvider.NONE, IMessageProvider.ERROR);
    testLD(myLabelDecorator, c0, IMessageProvider.ERROR, IMessageProvider.ERROR);
    testLD(myLabelDecorator, c1, IMessageProvider.NONE, IMessageProvider.NONE);

    // Reset to no errors
    c0.setAbbreviation("AA");
    c1.setAbbreviation("DD");
    sleepWithEvents(myLabelDecorator, 2 * VD, myShop, folder, c0);

    testLD(myLabelDecorator, myShop, IMessageProvider.NONE, IMessageProvider.NONE);
    testLD(myLabelDecorator, folder, IMessageProvider.NONE, IMessageProvider.NONE);
    testLD(myLabelDecorator, c0, IMessageProvider.NONE, IMessageProvider.NONE);
    testLD(myLabelDecorator, c1, IMessageProvider.NONE, IMessageProvider.NONE);
}

From source file:com.rcpcompany.uibindings.extests.bindingMessages.LabelDecoratorTest.java

License:Open Source License

/**
 * Tests whether the element - if it is an {@link EObject} - has the specified message type and
 * whether the specified decorator has the specified decoration.
 * /*from   ww w  .  j a va  2  s . c  o m*/
 * @param labelDecorator the decorator
 * @param element the element in question
 * @param messageType the expected message for the element
 * @param decorationType the expected decoration for the element
 */
private void testLD(ValidationLabelDecorator labelDecorator, Object element, int messageType,
        int decorationType) {
    if (element instanceof EObject) {
        assertEquals(messageType, myValidatorManager.getObjectSeverity((EObject) element));
    }
    if (decorationType == -1) {
        decorationType = messageType;
    }

    myCurrentOverlay = null;
    final IDecoration decoration = new IDecoration() {

        @Override
        public void setForegroundColor(Color color) {
            fail();
        }

        @Override
        public void setFont(Font font) {
            fail();
        }

        @Override
        public void setBackgroundColor(Color color) {
            fail();
        }

        @Override
        public IDecorationContext getDecorationContext() {
            return DecorationContext.DEFAULT_CONTEXT;
        }

        @Override
        public void addSuffix(String suffix) {
            fail();
        }

        @Override
        public void addPrefix(String prefix) {
            fail();
        }

        @Override
        public void addOverlay(ImageDescriptor overlay, int quadrant) {
            fail();
        }

        @Override
        public void addOverlay(ImageDescriptor overlay) {
            assertEquals(null, myCurrentOverlay);
            assertNotNull(overlay);
            myCurrentOverlay = overlay;
        }
    };
    labelDecorator.decorate(element, decoration);
    assertEquals(decorationType, labelDecorator.getElementSeverity(element));
    switch (decorationType) {
    case IMessageProvider.NONE:
        // No overlay expected
        assertEquals(null, myCurrentOverlay);
        break;
    case IMessageProvider.INFORMATION:
        // No overlay expected
        assertEquals(null, myCurrentOverlay);
        break;
    case IMessageProvider.WARNING:
        assertEquals(ValidationLabelDecorator.WARNING_IMAGE, myCurrentOverlay);
        break;
    case IMessageProvider.ERROR:
        assertEquals(ValidationLabelDecorator.ERROR_IMAGE, myCurrentOverlay);
        break;
    }
}

From source file:com.rcpcompany.uibindings.extests.bindingMessages.ScrolledFormAdapterTest.java

License:Open Source License

@Test
public void testValue() {
    final List<IBindingMessage> messages = myMessageDecorator.getMessages();
    assertNotNull(messages);// w  w  w. ja v a 2 s . c  o m

    final Form form = myView.getScrolledForm().getForm();
    assertNotNull(form);
    assertEquals(null, form.getHeadClient());

    myText.setText("");
    yield(); // Decorator updates are made in an asyncExec

    assertEquals(1, messages.size()); // Missing "required value"
    final IBindingMessage message = messages.get(0);
    assertNotNull(message);
    assertEquals(IMessageProvider.ERROR, message.getMessageType());

    assertEquals(message.getPrefix() + message.getMessage(), form.getMessage());

    final List<Hyperlink> widgets = findWidgets(form, Hyperlink.class);
    assertEquals(1, widgets.size());
    final Hyperlink link = widgets.get(0);
    assertEquals(message.getPrefix() + message.getMessage(), link.getText());

    // assertTrue(headClient.setFocus());
    // final Event event = new Event();
    // event.type = SWT.KeyDown;
    // event.keyCode = SWT.CR;
    // headClient.getDisplay().post(event);
}

From source file:com.rcpcompany.uibindings.extests.utils.FormCreatorObjectMessageCollectionTest.java

License:Open Source License

public void test(Runnable run) {
    myView = BaseUIBTestUtils.createUIBTestView(this);
    assertNoLog(run);/*from  w w w.j ava  2  s. co m*/
    yield();

    assertNoLog(new Runnable() {
        @Override
        public void run() {
            assertEquals(2, myValidatorManager.getUnboundMessages().size());

            final IBindingContext context = myForm.getContext();
            final ContextMessageDecorator decorator = context.getService(ContextMessageDecorator.class);
            assertNotNull(context);
            final List<IBindingMessage> messages = decorator.getMessages();
            assertNotNull(messages);

            assertEquals(1, messages.size());
            final IBindingMessage message = messages.get(0);
            // assertEquals(myBinding, message.getBinding());
            // assertEquals(myBinding.getControl(), message.getControl());
            assertEquals(IMessageProvider.ERROR, message.getMessageType());
            assertEquals(BindingMessageSeverity.ERROR, message.getSeverity());
            assertTrue(
                    message.matches(myValidationAdapter.getItem(), null, null, FeatureMatchingAlgorithm.EXACT));
            assertEquals(ERROR_MESSAGE + " for item", message.getMessage());
        }
    });
}

From source file:com.rcpcompany.uibindings.internal.bindingMessages.ValueBindingMessageImageDecorator.java

License:Open Source License

/**
 * @see #updateDecoration()//from ww w  . j  av  a 2s  .  c  o m
 */
protected void updateDecorationDelayed() {
    if (getBinding().getState() != BindingState.OK)
        return;
    /*
     * As this operation is delayed, the widget might be disposed in the mean time...
     */
    if (getBinding().getUIObservable().isDisposed())
        return;

    if (Activator.getDefault().TRACE_LIFECYCLE_VALUE_BINDING_MESSAGE_DECORATOR) {
        LogUtils.debug(this, "update delayed " + hashCode() + ": " + getBinding()); //$NON-NLS-1$ //$NON-NLS-2$
    }
    if (VALIDATION_MANAGER != null) {
        if (getBinding().getModelObservable().isDisposed()) {
            LogUtils.debug(this, "value is disposed");
            return;
        }
        /*
         * Check if the observed object of the binding has changed. If so, then reset the
         * decoration for the validation manager - this will remove all current messages and set
         * up a new set...
         */
        final EObject newObservedObject = getBinding().getModelObject();
        if (myObservedObject != newObservedObject) {
            myObservedObject = newObservedObject;
            VALIDATION_MANAGER.resetDecorator(this);
        }
    }

    /*
     * Make a list of all the potential messages
     */
    final List<IBindingMessage> ml = new ArrayList<IBindingMessage>();
    final BindingMessageSeverity minimumSeverity = IManager.Factory.getManager()
            .getMessageDecorationMinimumSeverity();
    for (final Object v : myMessageProviders) {
        final IBindingMessage message = (IBindingMessage) ((IObservableValue) v).getValue();
        if (message.getSeverity().compareTo(minimumSeverity) < 0) {
            continue;
        }
        ml.add(message);
    }
    final IObservableList decoratorMessages = getBinding().getDecorator().getMessages();
    if (decoratorMessages != null) {
        for (final Object m : decoratorMessages) {
            final IBindingMessage message = (IBindingMessage) m;
            if (message.getSeverity().compareTo(minimumSeverity) < 0) {
                continue;
            }
            ml.add(message);
        }
    }

    for (final IBindingMessage message : myOutstandingMessages) {
        if (message.getSeverity().compareTo(minimumSeverity) < 0) {
            continue;
        }
        ml.add(message);
    }

    /*
     * Find the current max type and the combined messages to use...
     */
    int maxType = IMessageProvider.NONE;
    final List<IBindingMessage> topList = new ArrayList<IBindingMessage>();
    for (final IBindingMessage message : ml) {
        final int type = message.getMessageType();
        if (type > maxType) {
            topList.clear();
            maxType = type;
        }
        if (type == maxType) {
            topList.add(message);
        }
    }

    /*
     * Weed out any superseded messages.
     * 
     * There has to be at least two messages before there any anything to weed out...
     */
    if (topList.size() > 1) {
        final IBindingMessage[] ma = topList.toArray(new IBindingMessage[topList.size()]);
        for (int i = 0; i < ma.length; i++) {
            final IBindingMessage a = ma[i];
            for (int j = i + 1; j < ma.length; j++) {
                final IBindingMessage b = ma[j];
                if (a.supersedes(b)) {
                    topList.remove(b);
                    continue;
                }
                if (b.supersedes(a)) {
                    topList.remove(a);
                    break;
                }
            }
        }
    }

    /*
     * Updated the messages
     */
    for (final IBindingMessage m : topList) {
        if (myMessages.contains(m)) {
            continue;
        }
        myMessagesOL.add(m);
    }
    for (final IBindingMessage m : myMessages.toArray(new IBindingMessage[myMessages.size()])) {
        if (topList.contains(m)) {
            continue;
        }
        myMessagesOL.remove(m);
    }

    final StringBuilder sb = new StringBuilder(100);
    for (final IBindingMessage message : myMessages) {
        if (sb.length() > 0) {
            sb.append('\n');
        }
        sb.append(message.getMessage());
    }

    /*
     * Show the appropriate message decorations
     */
    final Image oldMessageDecorationImage = myMessageDecorationImage;
    final String oldMessageDecorationMessage = myMessageDecorationMessage;
    switch (maxType) {
    case IMessageProvider.NONE:
        myMessageDecorationImage = null;
        break;
    case IMessageProvider.ERROR:
        myMessageDecorationImage = ERROR_FIELD_DECORATOR.getImage();
        break;
    case IMessageProvider.WARNING:
        myMessageDecorationImage = WARNING_FIELD_DECORATOR.getImage();
        break;
    case IMessageProvider.INFORMATION:
        myMessageDecorationImage = INFORMATION_FIELD_DECORATOR.getImage();
        break;
    default:
        break;
    }
    myMessageDecorationMessage = sb.toString();

    /*
     * The alternative stuff is only relevant if the binding is changeable...
     */
    final Image oldAlternativeDecorationImage = myAlternativeDecorationImage;
    final String oldAlternativeDecorationMessage = myAlternativeDecorationMessage;
    if (getBinding().isChangeable()) {
        final IManager manager = IManager.Factory.getManager();

        /*
         * Only show the alternative decorations for controls if they have the focus - but not
         * for checkboxes
         */
        final Control control = getBinding().getControl();
        boolean showAlternativeDecorations = control != null && control.isFocusControl();
        if (control instanceof Button && (control.getStyle() & SWT.CHECK) == SWT.CHECK) {
            showAlternativeDecorations = false;
        }

        // TODO TMTM add key bindings
        if (getQuickfixes().size() > 0 && manager.isQuickfixVBImageDecorationShown()) {
            myAlternativeDecorationImage = QUICKFIX_FIELD_DECORATOR.getImage();
            myAlternativeDecorationMessage = QUICKFIX_FIELD_DECORATOR.getDescription();
        } else if (showAlternativeDecorations && getBinding().getDataType().isRequired()
                && manager.isRequiredVBImageDecorationShown()) {
            myAlternativeDecorationImage = REQUIRED_FIELD_DECORATOR.getImage();
            myAlternativeDecorationMessage = Messages.ValueBindingMessageImageDecorator_ValueRequired;
        } else if (showAlternativeDecorations && getBinding().getDecorator().getValidUIList() != null
                && getBinding().getUIAttribute().getFieldAssistAdapter() != null
                && manager.isAssistVBImageDecorationShown()) {
            myAlternativeDecorationImage = CONTENT_PROPOSAL_FIELD_DECORATOR.getImage();
            myAlternativeDecorationMessage = Messages.ValueBindingMessageImageDecorator_ContentAssistAvailanble;
        } else {
            myAlternativeDecorationImage = null;
            myAlternativeDecorationMessage = null;
        }
    }

    /*
     * If everything is the same, then do nothing
     */
    if (BasicUtils.equals(oldMessageDecorationImage, myMessageDecorationImage)
            && BasicUtils.equals(oldMessageDecorationMessage, myMessageDecorationMessage)
            && BasicUtils.equals(oldAlternativeDecorationImage, myAlternativeDecorationImage)
            && BasicUtils.equals(oldAlternativeDecorationMessage, myAlternativeDecorationMessage))
        return;

    /*
     * Update the binding
     */
    getBinding().updateBinding();
}

From source file:com.rcpcompany.uibindings.internal.validators.BindingMessageCollectionTest.java

License:Open Source License

@Test
public void testBinding() {
    yield();//  w  w w.j a v a 2  s .co m

    assertNotNull(myValidatorManager);
    assertNotNull(myMessageDecorator);

    final int initNoUnboundMessage = myValidatorManager.getUnboundMessages().size();
    assertEquals(0, initNoUnboundMessage);

    myValidatorManager.addRoot(myShop, new ConstraintValidatorAdapter());

    final int noUnboundMessage = myValidatorManager.getUnboundMessages().size();
    assertTrue(noUnboundMessage >= initNoUnboundMessage);

    final List<IBindingMessage> messages = myMessageDecorator.getMessages();
    assertNotNull(messages);

    assertEquals(0, messages.size());
    yield();
    final Point size = myText.getSize();
    assertTrue(size.y > 0);
    assertPixelColor("", myText, -5, size.y - 6, new RGB(255, 255, 255));

    myItem.setPrice(-1.0f);
    assertEquals(noUnboundMessage, myValidatorManager.getUnboundMessages().size());
    assertEquals(0, messages.size());
    yield();
    assertPixelColor("", myText, -5, size.y - 4, new RGB(216, 66, 79));

    // Test before the validation delay - problem already found due to the binding
    // sleep(VD - 150);
    assertEquals(noUnboundMessage, myValidatorManager.getUnboundMessages().size());
    assertEquals(1, messages.size());

    // Test after the validation delay
    sleep(VD);
    assertEquals(noUnboundMessage + 1, myValidatorManager.getUnboundMessages().size());
    // Still just one error, and the two are collapsed into one
    assertEquals(1, messages.size());
    yield();
    assertPixelColor("", myText, -5, size.y - 4, new RGB(216, 66, 79));

    final IBindingMessage message = messages.get(0);
    assertEquals(myBinding, message.getBinding());
    assertEquals(myText, message.getControl());
    assertEquals(IMessageProvider.ERROR, message.getMessageType());
    assertEquals(BindingMessageSeverity.ERROR, message.getSeverity());
    assertTrue(message.matches(myItem, ShopPackage.Literals.SHOP_ITEM__PRICE, null,
            FeatureMatchingAlgorithm.EXACT));
    assertEquals(myLabel.getText() + " ", message.getPrefix());

    myItem.setPrice(100f);
    // assertEquals(noUnboundMessage + 1, myValidatorManager.getUnboundMessages().size());
    assertEquals(1, messages.size());
    assertEquals(message, messages.get(0));
    yield();
    assertPixelColor("", myText, -5, size.y - 4, new RGB(216, 66, 79));

    // Test before the validation delay
    sleep(VD - 100);
    assertEquals(noUnboundMessage + 1, myValidatorManager.getUnboundMessages().size());
    assertEquals(1, messages.size());
    assertEquals(message, messages.get(0));
    yield();
    assertPixelColor("", myText, -5, size.y - 4, new RGB(216, 66, 79));

    // Test after the validation delay
    sleep(300);
    assertEquals(noUnboundMessage, myValidatorManager.getUnboundMessages().size());
    assertEquals(0, messages.size());
    yield();
    assertPixelColor("", myText, -5, size.y - 6, new RGB(255, 255, 255));

    assertEquals(initNoUnboundMessage, myValidatorManager.getUnboundMessages().size());
}