package org.jrebirth.af.core.key; import java.util.ArrayList; import java.util.List; import javafx.scene.Cursor; import javafx.scene.layout.BorderPane; import org.jrebirth.af.api.command.Command; import org.jrebirth.af.api.key.UniqueKey; import org.jrebirth.af.core.application.TestApplication; import org.jrebirth.af.core.command.basic.SwitchFullScreenCommand; import org.jrebirth.af.core.command.basic.UpdateCursorCommand; import org.jrebirth.af.core.facade.CommandFacade; import org.jrebirth.af.core.facade.GlobalFacadeBase; import org.jrebirth.af.core.ui.DefaultModel; import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; /** * The class <strong>FacadeTest</strong>. * * @author Sébastien Bordes */ public class KeyTest { private static GlobalFacadeBase globalFacade; private CommandFacade commandFacade; /** * TODO To complete. * * @throws java.lang.Exception */ @BeforeClass public static void setUpBeforeClass() throws Exception { globalFacade = new GlobalFacadeBase(new TestApplication()); } /** * TODO To complete. * * @throws java.lang.Exception */ @Before public void setUp() throws Exception { // new TestApplication().start(new Stage()); this.commandFacade = globalFacade.getCommandFacade(); } @Test public void testCrossKeyInequality() { final UniqueKey<DefaultModel> key1 = Key.create(DefaultModel.class); final UniqueKey<DefaultModel> key2 = Key.create(DefaultModel.class, new Object()); Assert.assertFalse(key1.equals(key2)); Assert.assertFalse(key2.equals(key1)); } @Test public void testClassKeyEquality() { final Object sameObject = new Object(); final UniqueKey<DefaultModel> key1 = Key.create(DefaultModel.class); final UniqueKey<DefaultModel> key2 = Key.create(DefaultModel.class); Assert.assertTrue(key1.equals(key2)); Assert.assertTrue(key2.equals(key1)); } @Test public void testMultitonKeyEquality1() { final Object sameObject = new Object(); final UniqueKey<DefaultModel> key1 = Key.create(DefaultModel.class, sameObject); final UniqueKey<DefaultModel> key2 = Key.create(DefaultModel.class, sameObject); Assert.assertTrue(key1.equals(key2)); Assert.assertTrue(key2.equals(key1)); } @Test public void testMultitonKeyInequality1() { final Object sameObject = new Object(); final UniqueKey<DefaultModel> key1 = Key.create(DefaultModel.class, sameObject, new Object()); final UniqueKey<DefaultModel> key2 = Key.create(DefaultModel.class, sameObject); Assert.assertFalse(key1.equals(key2)); Assert.assertFalse(key2.equals(key1)); } @Test public void testMultitonKeyInequality2() { final UniqueKey<DefaultModel> key1 = Key.create(DefaultModel.class, new Object()); final UniqueKey<DefaultModel> key2 = Key.create(DefaultModel.class, new Object()); Assert.assertFalse(key1.equals(key2)); Assert.assertFalse(key2.equals(key1)); } @SuppressWarnings("unused") @Test public void registerCommandWithKey() { final List<Command> strongList = new ArrayList<>(); for (int i = 0; i < 100_000; i++) { strongList.add(this.commandFacade.retrieve(SwitchFullScreenCommand.class, new Integer(i))); if (i % 10_000 == 0) { System.out.println(i + " added"); } } strongList.add(this.commandFacade.retrieve(UpdateCursorCommand.class)); strongList.add(this.commandFacade.retrieve(UpdateCursorCommand.class, Cursor.WAIT)); strongList.add(this.commandFacade.retrieve(UpdateCursorCommand.class, Cursor.WAIT, new BorderPane())); checkComponentCount(UpdateCursorCommand.class, 3); checkComponentCount(SwitchFullScreenCommand.class, 100_000); // retain the strong list even method check to avoid compiler optimization that will release item too early System.out.println(strongList.size() + " items strongly retained"); } private <C extends Command> void checkComponentCount(Class<C> componentClass, int nb) { final long begin = System.currentTimeMillis(); final List<?> kcList = this.commandFacade.retrieveAll(Key.create(componentClass)); System.out.println(System.currentTimeMillis() - begin + " ms"); Assert.assertEquals(nb, kcList.size()); } /** * TODO To complete. * * @throws java.lang.Exception */ @After public void tearDown() throws Exception { this.commandFacade = null; } /** * TODO To complete. * * @throws java.lang.Exception */ @AfterClass public static void tearDownAfterClass() throws Exception { globalFacade.stop(); globalFacade = null; } // public class KeyCommand extends DefaultCommand { // // /** // * {@inheritDoc} // */ // @Override // public void perform(final Wave wave) { // // } // } }