I'm not sure what this test program was intended for, but it has revealed an odd condition. The property identifiers "all", "required" and "optional" are special in that they refer to multiple properties rather than one. As such, a ReadProperty request cannot be used to retrieve them since the response can only contain a single property.
But, the LocalDevice.readProperties method detects when a single property identifier was provided, and uses a ReadProperty request for efficiency. I will enhance the method to detect these properties. In the meantime, you can explicitly use a ReadPropertyMultiple request to retrieve "all" object properties.