package er.extensions.foundation;
import java.util.Properties;
import com.webobjects.foundation.NSKeyValueCoding;
import com.webobjects.foundation.NSKeyValueCodingAdditions;
import com.webobjects.foundation.NSMutableDictionary;
import er.erxtest.ERXTestCase;
public class ERXSimpleTemplateParserTest extends ERXTestCase {
/**
* Uses keys that have keyPath separator in them which will invoke NSDictionary flattened key feature in valueForKeyPath.
*/
public void testParseTemplatedStringWithNSDictionaryObject() {
String template = "The @@animal.description@@ brown @@animal.type@@ jumped over the fence";
NSMutableDictionary<String, String> variables = new NSMutableDictionary<>();
variables.setObjectForKey("LAZY", "animal.description");
variables.setObjectForKey("FOX", "animal.type");
String result = ERXSimpleTemplateParser.parseTemplatedStringWithObject(template, variables);
assertEquals("The LAZY brown FOX jumped over the fence", result);
}
/**
* Uses keys that have keyPath separator in them and a Properties object
*/
public void testParseTemplatedStringWithPropertiesObject() {
String template = "The @@animal.description@@ brown @@animal.type@@ jumped over the fence";
Properties variables = new Properties();
variables.setProperty("animal.description", "LAZY");
variables.setProperty("animal.type", "FOX");
String result = ERXSimpleTemplateParser.parseTemplatedStringWithObject(template, variables);
assertEquals("The LAZY brown FOX jumped over the fence", result);
}
public void testParseTemplatedStringWithNSKeyValueCodingAdditionsObject() {
String template = "The @@animal.description@@ brown @@animal.type@@ jumped over the fence";
// Anonymous classes
NSKeyValueCodingAdditions variables = new AnimalHolder();
String result = ERXSimpleTemplateParser.parseTemplatedStringWithObject(template, variables);
assertEquals("The LAZY brown FOX jumped over the fence", result);
}
public static class Animal implements NSKeyValueCodingAdditions {
public Animal() { }
public String description() {
return "LAZY";
}
public String type() {
return "FOX";
}
@Override
public Object valueForKey(String paramString) {
return NSKeyValueCoding.DefaultImplementation.valueForKey(this, paramString);
}
@Override
public void takeValueForKey(Object paramObject, String paramString) {}
@Override
public Object valueForKeyPath(String paramString) {
return NSKeyValueCodingAdditions.DefaultImplementation.valueForKeyPath(this, paramString);
}
@Override
public void takeValueForKeyPath(Object paramObject, String paramString) { }
}
public static class AnimalHolder implements NSKeyValueCodingAdditions {
public AnimalHolder() { }
@Override
public Object valueForKey(String paramString) {
return NSKeyValueCoding.DefaultImplementation.valueForKey(this, paramString);
}
@Override
public void takeValueForKey(Object paramObject, String paramString) { }
@Override
public Object valueForKeyPath(String paramString) {
return NSKeyValueCodingAdditions.DefaultImplementation.valueForKeyPath(this, paramString);
}
@Override
public void takeValueForKeyPath(Object paramObject, String paramString) { }
private Animal _animal;
/** @return KVCA animal object */
public Animal animal() {
if ( _animal == null ) {
_animal = new Animal();
}
return _animal;
}
}
}