@Test
  public void testParseCascadeWriteOnly() throws Exception {
    final AhcPropertyAccessor accessor =
        new AhcMapperExpressionParser(AhcMapperLogger.DEBUG_STDOUT)
            .parse(ClassCyclicParent.class, "child.writeOnly", String.class, null, true);

    assertEquals(MethodPathBasedPropertyAccessor.class, accessor.getClass());
    assertEquals(true, accessor.isPrimary());
    assertEquals(false, accessor.isReadable());
    assertEquals(true, accessor.isWritable());
    assertEquals("child.writeOnly", accessor.getName());

    final ClassCyclicParent o = new ClassCyclicParent();
    o.setChild(new ClassCyclicChild());
    accessor.setValue(o, "12345");
    assertEquals("12345", o.getChild().getReadOnly());
  }
  @Test
  public void testParseSimpleCascade() throws Exception {
    final AhcPropertyAccessor accessor =
        new AhcMapperExpressionParser(AhcMapperLogger.DEBUG_STDOUT)
            .parse(ClassCyclicParent.class, "child.name", String.class, null, true);

    assertEquals(MethodPathBasedPropertyAccessor.class, accessor.getClass());
    assertEquals(true, accessor.isPrimary());
    assertEquals(true, accessor.isReadable());
    assertEquals(true, accessor.isWritable());
    assertEquals("child.name", accessor.getName());

    final ClassCyclicParent o = new ClassCyclicParent();
    o.setChild(new ClassCyclicChild());
    accessor.setValue(o, "abc");
    assertEquals("abc", o.getChild().getName());
    assertEquals("abc", accessor.getValue(o));

    try {
      accessor.getValue(new ClassCyclicParent());
      fail("exception expected");
    } catch (NullPointerException exc) {
    }
  }