package gov.nist.registry.ws.sq.test; import gov.nist.registry.common2.exception.MetadataValidationException; import gov.nist.registry.common2.exception.XdsInternalException; import gov.nist.registry.common2.registry.And; import gov.nist.registry.common2.registry.storedquery.ParamParser; import gov.nist.registry.common2.registry.storedquery.SqParams; import java.util.ArrayList; import java.util.HashMap; import junit.framework.TestCase; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMText; public class ParamParserTest extends TestCase { OMElement query = null; OMElement adhocquery = null; protected OMFactory fac = null; ParamParser parser = null; OMFactory om_factory() { if (fac == null) fac = OMAbstractFactory.getOMFactory(); return fac; } public void setUp() { query = om_factory().createOMElement("AdhocQueryRequest", null); OMElement response_option = om_factory().createOMElement("ResponseOption", null); response_option.addAttribute("returnComposedObjects", "true", null); response_option.addAttribute("returnType", "LeafClass", null); query.addChild(response_option); adhocquery = om_factory().createOMElement("AdhocQuery", null); query.addChild(adhocquery); parser = new ParamParser(); } void addSlot(String name, String value_string) { OMElement slot = om_factory().createOMElement("Slot", null); adhocquery.addChild(slot); slot.addAttribute("name", name, null); OMElement valuelist = om_factory().createOMElement("ValueList", null); slot.addChild(valuelist); OMElement value = om_factory().createOMElement("Value", null); valuelist.addChild(value); OMText text = om_factory().createOMText(value_string); value.addChild(text); } void addSlot(String name, String value_string1, String value_string2) { OMElement slot = om_factory().createOMElement("Slot", null); adhocquery.addChild(slot); slot.addAttribute("name", name, null); OMElement valuelist = om_factory().createOMElement("ValueList", null); slot.addChild(valuelist); OMElement value1 = om_factory().createOMElement("Value", null); valuelist.addChild(value1); OMText text1 = om_factory().createOMText(value_string1); value1.addChild(text1); OMElement value2 = om_factory().createOMElement("Value", null); valuelist.addChild(value2); OMText text2 = om_factory().createOMText(value_string2); value2.addChild(text2); } public void test_parse_int() throws MetadataValidationException, XdsInternalException { addSlot("foo", "2"); SqParams map = parser.parse(query); assertTrue(map.size() == 1); Object value_object = map.getParm("foo"); assertTrue("class is " + value_object.getClass().getName(), value_object.getClass().getName().equals("java.util.ArrayList")); ArrayList<Object> al = (ArrayList<Object>) value_object; Object val = al.get(0); assertTrue("class is " + val.getClass().getName(), val.getClass().getName().equals("java.lang.Integer")); Integer in = (Integer) val; int value_int = in.intValue(); assertTrue(value_int == 2); } public void test_parse_string() throws MetadataValidationException, XdsInternalException { addSlot("foo", "'bar'"); SqParams map = parser.parse(query); assertTrue("map size is " + map.size(), map.size() == 1); Object value_object = map.getParm("foo"); assertTrue("class is " + value_object.getClass().getName(), value_object.getClass().getName().equals("java.util.ArrayList")); ArrayList<Object> al = (ArrayList<Object>) value_object; Object val = al.get(0); assertTrue("class is " + val.getClass().getName(), val.getClass().getName().equals("java.lang.String")); String in = (String) val; assertTrue("in is " + in, in.equals("bar")); } public void test_parse_string_with_single_quote() throws MetadataValidationException, XdsInternalException { addSlot("foo", "'ba''r'"); SqParams map = parser.parse(query); assertTrue("map size is " + map.size(), map.size() == 1); Object value_object = map.getParm("foo"); assertTrue("class is " + value_object.getClass().getName(), value_object.getClass().getName().equals("java.util.ArrayList")); ArrayList<Object> al = (ArrayList<Object>) value_object; Object val = al.get(0); assertTrue("class is " + val.getClass().getName(), val.getClass().getName().equals("java.lang.String")); String in = (String) val; assertTrue("in is " + in, in.equals("ba''r")); } public void test_parse_int_array() throws MetadataValidationException, XdsInternalException { addSlot("foo", "(2,3)"); SqParams map = parser.parse(query); assertTrue("map size is " + map.size(), map.size() == 1); Object value_object = map.getParm("foo"); assertTrue("class is " + value_object.getClass().getName(), value_object.getClass().getName().equals("java.util.ArrayList")); ArrayList in = (ArrayList) value_object; assertTrue("size is " + in.size() + "\nvalues are " + in.toString(), in.size() == 2); Object val1_object = in.get(0); assertTrue("class is " + val1_object.getClass().getName(), val1_object.getClass().getName().equals("java.lang.Integer")); int val1 = ((Integer)val1_object).intValue(); assertTrue(val1 == 2); Object val2_object = in.get(1); assertTrue("class is " + val2_object.getClass().getName(), val2_object.getClass().getName().equals("java.lang.Integer")); int val2 = ((Integer)val2_object).intValue(); assertTrue("val2 is " + val2, val2 == 3); } public void test_parse_string_array() throws MetadataValidationException, XdsInternalException { addSlot("foo", "('2', '3' )"); SqParams map = parser.parse(query); assertTrue("map size is " + map.size(), map.size() == 1); Object value_object = map.getParm("foo"); assertTrue("class is " + value_object.getClass().getName(), value_object.getClass().getName().equals("java.util.ArrayList")); ArrayList in = (ArrayList) value_object; assertTrue("size is " + in.size() + "\nvalues are " + in.toString(), in.size() == 2); Object val1_object = in.get(0); assertTrue("class is " + val1_object.getClass().getName(), val1_object.getClass().getName().equals("java.lang.String")); String val1 = (String)val1_object; assertTrue("val1 is " + val1, val1.equals("2")); Object val2_object = in.get(1); assertTrue("class is " + val2_object.getClass().getName(), val2_object.getClass().getName().equals("java.lang.String")); String val2 = (String)val2_object; assertTrue("val2 is " + val2, val2.equals("3")); } public void test_multiple_int_slot_values() throws MetadataValidationException, XdsInternalException { addSlot("foo", "2", "3"); SqParams map = parser.parse(query); assertTrue("map size is " + map.size(), map.size() == 1); Object value_object = map.getParm("foo"); assertTrue("class is " + value_object.getClass().getName(), value_object.getClass().getName().equals("java.util.ArrayList")); ArrayList in = (ArrayList) value_object; assertTrue("size is " + in.size() + "\nvalues are " + in.toString(), in.size() == 2); Object val1_object = in.get(0); assertTrue("class is " + val1_object.getClass().getName(), val1_object.getClass().getName().equals("java.lang.Integer")); int val1 = ((Integer)val1_object).intValue(); assertTrue(val1 == 2); Object val2_object = in.get(1); assertTrue("class is " + val2_object.getClass().getName(), val2_object.getClass().getName().equals("java.lang.Integer")); int val2 = ((Integer)val2_object).intValue(); assertTrue("val2 is " + val2, val2 == 3); } public void test_multiple_string_slot_values() throws MetadataValidationException, XdsInternalException { addSlot("foo", "('foo','bar')", "('fuz', 'baz')"); SqParams map = parser.parse(query); //System.out.println(map.toString()); assertTrue("map size is " + map.size(), map.size() == 1); Object value_object = map.getParm("foo"); assertTrue("class is " + value_object.getClass().getName(), value_object.getClass().getName().equals("java.util.ArrayList")); ArrayList in = (ArrayList) value_object; assertTrue("size is " + in.size() + "\nvalues are " + in.toString(), in.size() == 4); Object val1_object = in.get(0); assertTrue("class is " + val1_object.getClass().getName(), val1_object.getClass().getName().equals("java.lang.String")); Object val2_object = in.get(1); assertTrue("class is " + val2_object.getClass().getName(), val2_object.getClass().getName().equals("java.lang.String")); } public void test_multiple_string_slots() throws MetadataValidationException, XdsInternalException { addSlot("floo", "('foo', 'fax')"); addSlot("floo", "('bar')"); SqParams map = parser.parse(query); //System.out.println("and is " + map.toString()); Object floo = map.getParm("floo"); String flooClass = floo.getClass().getName(); assertTrue("Class is " + flooClass, flooClass.endsWith((".And"))); And and = (And) floo; assertTrue("size is " + and.size(), and.size() == 2); Object and0 = and.get(0); String and0Class = and0.getClass().getName(); assertTrue("and0Class is " + and0Class, and0Class.endsWith(".ArrayList")); ArrayList<String> and0Al = (ArrayList<String>) and0; assertTrue("@0 is " + and0Al.get(0), and0Al.get(0).equals("foo")); } public void test_multiple_param() throws MetadataValidationException, XdsInternalException { addSlot("foo", "2"); addSlot("bar", "3"); SqParams map1 = parser.parse(query); //System.out.println("map1 is " + map1.toString()); assertTrue(map1.size() == 2); Object value_object1 = map1.getParm("foo"); String class1 = value_object1.getClass().getName(); assertTrue("class is " + class1 + " value is " + value_object1.toString(), class1.endsWith(".ArrayList")); ArrayList<Integer> al1 = (ArrayList<Integer>) value_object1; assertTrue("size is " + al1.size(), al1.size() == 1); assertTrue("@0 = " + al1.get(0), al1.get(0).intValue() == 2); } }