private void RunAssertionBeanNav( RegressionEnvironment env, string typename, FunctionSendEvent4IntWArrayNested send, RegressionPath path) { var epl = "@Name('s0') select * from " + typename; env.CompileDeploy(epl, path).AddListener("s0"); send.Invoke(typename, env, 1, 2, 3, 4); var @event = env.Listener("s0").AssertOneGetNewAndReset(); EPAssertionUtil.AssertProps( @event, "l1[0].lvl1,l1[0].l2[0].lvl2,l1[0].l2[0].l3[0].lvl3,l1[0].l2[0].l3[0].l4[0].lvl4".SplitCsv(), new object[] { 1, 2, 3, 4 }); SupportEventTypeAssertionUtil.AssertConsistency(@event); var isNative = typename.Equals(BEAN_TYPENAME); SupportEventTypeAssertionUtil.AssertFragments(@event, isNative, true, "l1,l1[0].l2,l1[0].l2[0].l3,l1[0].l2[0].l3[0].l4"); SupportEventTypeAssertionUtil.AssertFragments(@event, isNative, false, "l1[0],l1[0].l2[0],l1[0].l2[0].l3[0],l1[0].l2[0].l3[0].l4[0]"); RunAssertionEventInvalidProp(@event); env.UndeployModuleContaining("s0"); }
private void RunAssertionTypeValidProp( RegressionEnvironment env, bool preconfigured, string typeName, FunctionSendEvent4IntWArrayNested send, Type nestedClass, string fragmentTypeName) { var eventType = preconfigured ? env.Runtime.EventTypeService.GetEventTypePreconfigured(typeName) : env.Runtime.EventTypeService.GetEventType(env.DeploymentId("types"), typeName); var arrayType = nestedClass == typeof(object[]) ? nestedClass : TypeHelper.GetArrayType(nestedClass); //arrayType = arrayType == typeof(GenericRecord[]) ? typeof(ICollection) : arrayType; var expectedType = new object[][] { new object[] { "l1", arrayType, fragmentTypeName, true } }; SupportEventTypeAssertionUtil.AssertEventTypeProperties(expectedType, eventType, SupportEventTypeAssertionEnumExtensions.GetSetWithFragment()); EPAssertionUtil.AssertEqualsAnyOrder(new string[] { "l1" }, eventType.PropertyNames); foreach (var prop in Arrays.AsList("l1[0]", "l1[0].lvl1", "l1[0].l2", "l1[0].l2[0]", "l1[0].l2[0].lvl2")) { Assert.IsNotNull(eventType.GetGetter(prop)); Assert.IsTrue(eventType.IsProperty(prop)); } Assert.IsTrue(TypeHelper.IsSubclassOrImplementsInterface(eventType.GetPropertyType("l1"), arrayType)); foreach (var prop in Arrays.AsList("l1[0].lvl1", "l1[0].l2[0].lvl2", "l1[0].l2[0].l3[0].lvl3")) { Assert.AreEqual(typeof(int?), eventType.GetPropertyType(prop).GetBoxedType()); } var lvl1Fragment = eventType.GetFragmentType("l1"); Assert.IsTrue(lvl1Fragment.IsIndexed); var isNative = typeName.Equals(BEAN_TYPENAME); Assert.AreEqual(isNative, lvl1Fragment.IsNative); Assert.AreEqual(fragmentTypeName, lvl1Fragment.FragmentType.Name); var lvl2Fragment = eventType.GetFragmentType("l1[0].l2"); Assert.IsTrue(lvl2Fragment.IsIndexed); Assert.AreEqual(isNative, lvl2Fragment.IsNative); if (typeName.Equals(JSON_TYPENAME)) { arrayType = TypeHelper.GetArrayType(SupportJsonEventTypeUtil.GetNestedUnderlyingType((JsonEventType)eventType, "l1")); nestedClass = arrayType.GetElementType(); } Assert.AreEqual(new EventPropertyDescriptor("l1", arrayType, nestedClass, false, false, true, false, true), eventType.GetPropertyDescriptor("l1")); }
private void RunAssertion( RegressionEnvironment env, bool preconfigured, string typename, FunctionSendEvent4IntWArrayNested send, Type nestedClass, string fragmentTypeName, RegressionPath path) { RunAssertionSelectNested(env, typename, send, path); RunAssertionBeanNav(env, typename, send, path); RunAssertionTypeValidProp(env, preconfigured, typename, send, nestedClass, fragmentTypeName); RunAssertionTypeInvalidProp(env, typename); }
private void RunAssertionSelectNested( RegressionEnvironment env, string typename, FunctionSendEvent4IntWArrayNested send, RegressionPath path) { var epl = "@Name('s0') select " + "l1[0].lvl1 as c0, " + "exists(l1[0].lvl1) as exists_c0, " + "l1[0].l2[0].lvl2 as c1, " + "exists(l1[0].l2[0].lvl2) as exists_c1, " + "l1[0].l2[0].l3[0].lvl3 as c2, " + "exists(l1[0].l2[0].l3[0].lvl3) as exists_c2, " + "l1[0].l2[0].l3[0].l4[0].lvl4 as c3, " + "exists(l1[0].l2[0].l3[0].l4[0].lvl4) as exists_c3 " + "from " + typename; env.CompileDeploy(epl, path).AddListener("s0"); var fields = "c0,exists_c0,c1,exists_c1,c2,exists_c2,c3,exists_c3".SplitCsv(); var eventType = env.Statement("s0").EventType; foreach (var property in fields) { Assert.AreEqual(property.StartsWith("exists") ? typeof(bool?) : typeof(int?), eventType.GetPropertyType(property).GetBoxedType()); } send.Invoke(typename, env, 1, 2, 3, 4); var @event = env.Listener("s0").AssertOneGetNewAndReset(); EPAssertionUtil.AssertProps(@event, fields, new object[] { 1, true, 2, true, 3, true, 4, true }); SupportEventTypeAssertionUtil.AssertConsistency(@event); send.Invoke(typename, env, 10, 5, 50, 400); EPAssertionUtil.AssertProps(env.Listener("s0").AssertOneGetNewAndReset(), fields, new object[] { 10, true, 5, true, 50, true, 400, true }); env.UndeployModuleContaining("s0"); }