### Question:
XProperties extends OrderedProperties { @Nonnull public static XProperties from(@Nonnull @NonNull final String absolutePath) throws IOException { final Resource resource = new PathMatchingResourcePatternResolver() .getResource(absolutePath); try (final InputStream in = resource.getInputStream()) { final XProperties xprops = new XProperties(); xprops.included.add(resource.getURI()); xprops.load(in); return xprops; } } XProperties();  XProperties(@Nonnull final Map<String, String> initial); @Nonnull static XProperties from(@Nonnull @NonNull final String absolutePath); void register(@Nonnull final String prefix,
            @Nonnull final Conversion<?, ? extends Exception> factory); @Override synchronized void load(@Nonnull final Reader reader); @Override synchronized void load(final InputStream inStream); @Nullable @Override String getProperty(final String key); @Nullable @Override synchronized Object get(final Object key); @Nullable T getObject(@Nonnull final String key); @Nullable @SuppressWarnings("unchecked") T getObjectOrDefault(@Nonnull final String key,
            @Nullable final T defaultValue);  }### Answer:
@Test public void shouldNoticeRecursiveInclude() throws IOException { thrown.expect(RecursiveIncludeException.class); thrown.expectMessage(containsString(format("%s/tweedle-dee.properties", pathPrefix))); XProperties.from(format("%s/tweedle-dee.properties", pathPrefix)); }