private static void AssertConsistencyProperties(EventType eventType)
        {
            var propertyNames = new List<string>();

            IList<EventPropertyDescriptor> properties = eventType.PropertyDescriptors;
            for (int i = 0; i < properties.Count; i++)
            {
                string propertyName = properties[i].PropertyName;
                propertyNames.Add(propertyName);
                string failedMessage = "failed assertion for property '" + propertyName + "' ";

                // assert presence of descriptor
                ScopeTestHelper.AssertSame(properties[i], eventType.GetPropertyDescriptor(propertyName));

                // test properties that can simply be in a property expression
                if ((!properties[i].RequiresIndex) && (!properties[i].RequiresMapKey))
                {
                    ScopeTestHelper.AssertTrue(failedMessage, eventType.IsProperty(propertyName));
                    ScopeTestHelper.AssertSame(
                        failedMessage, eventType.GetPropertyType(propertyName), properties[i].PropertyType);
                    ScopeTestHelper.AssertNotNull(failedMessage, eventType.GetGetter(propertyName));
                }

                // test indexed property
                if (properties[i].IsIndexed)
                {
                    string propertyNameIndexed = propertyName + "[0]";
                    ScopeTestHelper.AssertTrue(failedMessage, eventType.IsProperty(propertyNameIndexed));
                    ScopeTestHelper.AssertNotNull(failedMessage, eventType.GetPropertyType(propertyNameIndexed));
                    ScopeTestHelper.AssertNotNull(failedMessage, eventType.GetGetter(propertyNameIndexed));
                }

                // test mapped property
                if (properties[i].RequiresMapKey)
                {
                    string propertyNameMapped = propertyName + "('a')";
                    ScopeTestHelper.AssertTrue(failedMessage, eventType.IsProperty(propertyNameMapped));
                    ScopeTestHelper.AssertNotNull(failedMessage, eventType.GetPropertyType(propertyNameMapped));
                    ScopeTestHelper.AssertNotNull(failedMessage, eventType.GetGetter(propertyNameMapped));
                }

                // consistent flags
                ScopeTestHelper.AssertFalse(failedMessage, properties[i].IsIndexed && properties[i].IsMapped);
                if (properties[i].RequiresIndex)
                {
                    ScopeTestHelper.AssertTrue(failedMessage, properties[i].IsIndexed);
                }
                if (properties[i].RequiresMapKey)
                {
                    ScopeTestHelper.AssertTrue(failedMessage, properties[i].IsMapped);
                }
            }

            // assert same property names
            EPAssertionUtil.AssertEqualsAnyOrder(eventType.PropertyNames, propertyNames.ToArray());
        }
 private static void AssertFragmentArray(EventBean @event, bool isNative, string propertyExpression)
 {
     var fragmentBean = (EventBean[]) @event.GetFragment(propertyExpression);
     FragmentEventType fragmentType = @event.EventType.GetFragmentType(propertyExpression);
     ScopeTestHelper.AssertTrue("failed for " + propertyExpression, fragmentType.IsIndexed);
     ScopeTestHelper.AssertEquals("failed for " + propertyExpression, isNative, fragmentType.IsNative);
     ScopeTestHelper.AssertSame(
         "failed for " + propertyExpression, fragmentBean[0].EventType, fragmentType.FragmentType);
     AssertConsistency(fragmentBean[0]);
 }