@@ -0,0 +1,1355 @@
+package org.realityforge.arez.api2;%0A%0Aimport javax.annotation.Nonnull;%0Aimport javax.annotation.Nullable;%0Aimport org.realityforge.guiceyloops.shared.ValueUtil;%0Aimport org.testng.annotations.Test;%0Aimport static org.testng.Assert.*;%0A%0Apublic class NodeTest%0A  extends AbstractArezTest%0A%7B%0A  static class TestNode%0A    extends Node%0A  %7B%0A    TestNode( @Nonnull final ArezContext context,%0A              @Nullable final String name )%0A    %7B%0A      super( context, name );%0A    %7D%0A  %7D%0A%0A  @Test%0A  public void basicOperation()%0A    throws Exception%0A  %7B%0A    final ArezContext context = new ArezContext();%0A    final String name = ValueUtil.randomString();%0A    final TestNode node = new TestNode( context, name );%0A    assertEquals( node.getName(), name );%0A    assertEquals( node.getContext(), context );%0A    assertEquals( node.toString(), name );%0A  %7D%0A%0A  @Test%0A  public void basicOperation_namesDisabled()%0A    throws Exception%0A  %7B%0A    final ArezConfig.DynamicProvider provider = (ArezConfig.DynamicProvider) ArezConfig.getProvider();%0A    provider.setEnableNames( false );%0A%0A    final ArezContext context = new ArezContext();%0A    final TestNode node = new TestNode( context, null );%0A    assertThrows( node::getName );%0A    assertEquals( node.getContext(), context );%0A    assertTrue( node.toString().startsWith( node.getClass().getName() + %22@%22 ), %22node.toString() == %22 + node );%0A  %7D%0A%7D%0A

Add minimal test for Node