@Test
  public void testGetId() {
    WidgetAdapterImpl adapter = new WidgetAdapterImpl("id");

    String id = adapter.getId();

    assertEquals("id", id);
  }
  @Test
  public void testGetId_ignoresCustomIdWhenUITestDisabled() {
    WidgetAdapterImpl adapter = new WidgetAdapterImpl("default-id");

    adapter.setCustomId("custom-id");

    assertEquals("default-id", adapter.getId());
  }
  @Test
  public void testIsInitialized_isFalseByDefault() {
    WidgetAdapterImpl adapter = new WidgetAdapterImpl("id");

    boolean initialized = adapter.isInitialized();

    assertFalse(initialized);
  }
  @Test
  public void testGetId_returnsCustomIdWhenUITestEnabled() {
    UITestUtilAdapter.setUITestEnabled(true);
    WidgetAdapterImpl adapter = new WidgetAdapterImpl("default-id");

    adapter.setCustomId("custom-id");

    assertEquals("custom-id", adapter.getId());
  }
  @Test
  public void testSetInitialized() {
    WidgetAdapterImpl adapter = new WidgetAdapterImpl("id");

    adapter.setInitialized(true);
    boolean initialized = adapter.isInitialized();

    assertTrue(initialized);
  }
  @Test
  public void testSetParent() {
    WidgetAdapterImpl adapter = new WidgetAdapterImpl("id");
    Composite parent = mock(Composite.class);

    adapter.setParent(parent);

    assertSame(parent, adapter.getParent());
  }
  @Test
  public void testSetRenderRunnable() {
    WidgetAdapterImpl adapter = new WidgetAdapterImpl("id");
    IRenderRunnable runnable = mock(IRenderRunnable.class);

    adapter.setRenderRunnable(runnable);

    assertSame(runnable, adapter.getRenderRunnable());
  }
  @Test
  public void testSetRenderRunnable_cannotBeCalledTwice() {
    WidgetAdapterImpl adapter = new WidgetAdapterImpl("id");
    adapter.setRenderRunnable(mock(IRenderRunnable.class));
    IRenderRunnable otherRenderRunnable = mock(IRenderRunnable.class);

    try {
      adapter.setRenderRunnable(otherRenderRunnable);
    } catch (IllegalStateException expected) {
    }
  }
  @Test
  public void testSetCustomId_failsAfterWidgetIsInitialised() {
    WidgetAdapterImpl adapter = new WidgetAdapterImpl("default-id");
    adapter.setInitialized(true);

    try {
      adapter.setCustomId("custom-id");
      fail();
    } catch (IllegalStateException expected) {
      assertEquals("Widget is already initialized", expected.getMessage());
    }
  }
  @Test
  public void testSetCustomId_failsWithIllegalId() {
    UITestUtilAdapter.setUITestEnabled(true);
    WidgetAdapterImpl adapter = new WidgetAdapterImpl("default-id");

    try {
      adapter.setCustomId("#!pf");
      fail();
    } catch (IllegalArgumentException expected) {
      assertEquals("The widget id contains illegal characters: #!pf", expected.getMessage());
    }
  }
  @Test
  public void testMarkDisposed() {
    Fixture.fakeNewRequest();
    Fixture.fakeResponseWriter();

    // dispose un-initialized widget: must not occur in list of disposed widgets
    Widget widget = new Shell(display);
    widget.dispose();
    assertTrue(widget.isDisposed());
    assertEquals(0, DisposedWidgets.getAll().length);

    // dispose initialized widget: must be present in list of disposed widgets
    widget = new Shell(display);
    WidgetAdapterImpl adapter = (WidgetAdapterImpl) WidgetUtil.getAdapter(widget);
    adapter.setInitialized(true);
    widget.dispose();

    assertTrue(widget.isDisposed());
    assertEquals(1, DisposedWidgets.getAll().length);
  }
  @Test
  public void testNonSerializableFields() throws Exception {
    String property = "foo";
    WidgetAdapterImpl adapter = new WidgetAdapterImpl("id");
    adapter.setCachedVariant("cachedVariant");
    adapter.setRenderRunnable(mock(IRenderRunnable.class));
    adapter.preserve(property, "bar");

    WidgetAdapterImpl deserializedAdapter = Fixture.serializeAndDeserialize(adapter);

    assertNull(deserializedAdapter.getCachedVariant());
    assertNull(deserializedAdapter.getRenderRunnable());
    assertNull(deserializedAdapter.getPreserved(property));
  }
  @Test
  public void testSerializableFields() throws Exception {
    WidgetAdapterImpl adapter = new WidgetAdapterImpl("id");
    adapter.setInitialized(true);

    WidgetAdapterImpl deserializedAdapter = Fixture.serializeAndDeserialize(adapter);

    assertEquals(adapter.getId(), deserializedAdapter.getId());
    assertTrue(deserializedAdapter.isInitialized());
  }