### Question:
EmbulkSystemProperties extends Properties { private static boolean parseBoolean(final String text, final boolean defaultValue) { final String textTrimmed = text.trim(); if ("true".equals(textTrimmed) || "True".equals(textTrimmed)) { return true; } if ("false".equals(textTrimmed) || "False".equals(textTrimmed)) { return false; } if (textTrimmed.length() == 0) { return defaultValue; } if ("null".equals(textTrimmed)) { return defaultValue; } throw new IllegalArgumentException("Only \"true\" or \"false\" is recognized."); } private  EmbulkSystemProperties(final Properties inner); static EmbulkSystemProperties of(final Properties mutable); boolean getPropertyAsBoolean(final String key, final boolean defaultValue); int getPropertyAsInteger(final String key, final int defaultValue); @Override // From Properties void load(final InputStream inStream); @Override // From Properties void load(final Reader reader); @Override // From Properties void loadFromXML(final InputStream in); @Override // From Properties Object setProperty(final String key, final String value); @Override // From Hashtable void clear(); @Override // From Hashtable Object compute(
            final Object key, final BiFunction<? super Object, ? super Object, ? extends Object> remappingFunction); @Override // From Hashtable Object computeIfAbsent(
            final Object key, final Function<? super Object, ? extends Object> mappingFunction); @Override // From Hashtable Object computeIfPresent(
            final Object key, final BiFunction<? super Object, ? super Object, ? extends Object> remappingFunction); @Override // From Hashtable Set<Map.Entry<Object, Object>> entrySet(); @Override // From Hashtable void forEach(final BiConsumer<? super Object, ? super Object> action); @Override // From HashTable Set<Object> keySet(); @Override // From HashTable Object merge(
            final Object key, final Object value,
            final BiFunction<? super Object, ? super Object, ? extends Object> remappingFunction); @Override // From HashTable Object put(final Object key, final Object value); @Override // From HashTable void putAll(final Map<? extends Object, ? extends Object> t); @Override // From HashTable Object putIfAbsent(final Object key, final Object value); @Override // From HashTable Object remove(final Object key); @Override // From HashTable boolean remove(final Object key, final Object value); @Override // From HashTable Object replace(final Object key, final Object value); @Override // From HashTable boolean replace(final Object key, final Object oldValue, final Object newValue); @Override // From HashTable void replaceAll(final BiFunction<? super Object, ? super Object, ? extends Object> function); @Override // From Hashtable Collection<Object> values();  }### Answer:
@Test public void testParseBoolean() { assertBoolean("true", true, false); assertBoolean("True", true, false); assertBoolean("false", false, false); assertBoolean("false", false, false); assertBoolean(" true", true, true); assertBoolean(" True", true, true); assertBoolean(" false ", false, true); assertBoolean(" false ", false, true); assertBoolean("", false, false); assertBoolean("", true, true); assertBoolean(" ", false, false); assertBoolean(" ", true, true); assertBoolean("null", false, false); assertBoolean("null", true, true); assertBoolean(" null ", false, false); assertBoolean(" null ", true, true); }