public void ToComponentTableNameTest()
        {
            NamingConventionsConfig config = new NamingConventionsConfig(null);
            NamingEngine namingEngine = new NamingEngine(config);

            // Component Table Name => ComponentName
            config.UseConventionForTableNames(TablesNamingConvention.CamelCase);
            config.UseConventionForComponentTableNames(ComponentsTableNamingConvention.ComponentName);
            string result = namingEngine.ToComponentTableName(typeof(ProductsOrder), typeof(OrderItem), typeof(ProductsOrder).GetMember("Items").Single());
            Assert.AreEqual("orderItem", result);

            // Component Table Name => EntityName & ComponentName
            config.UseConventionForTableNames(TablesNamingConvention.PascalCase);
            config.UseConventionForComponentTableNames(ComponentsTableNamingConvention.EntityName_ComponentName);
            result = namingEngine.ToComponentTableName(typeof(ProductsOrder), typeof(OrderItem), typeof(ProductsOrder).GetMember("Items").Single());
            Assert.AreEqual("ProductsOrder_OrderItem", result);

            // Component Table Name => EntityName & Relationship Name
            config.UseConventionForTableNames(TablesNamingConvention.Lowercase);
            config.UseConventionForComponentTableNames(ComponentsTableNamingConvention.EntityName_RelationshipName);
            result = namingEngine.ToComponentTableName(typeof(ProductsOrder), typeof(OrderItem), typeof(ProductsOrder).GetMember("Items").Single());
            Assert.AreEqual("products_order_items", result);

            // Component Table Name => EntityName & Relationship Name
            config.UseConventionForTableNames(TablesNamingConvention.CamelCase);
            config.UseConventionForComponentTableNames(ComponentsTableNamingConvention.EntityNameComponentName);
            result = namingEngine.ToComponentTableName(typeof(ProductsOrder), typeof(OrderItem), typeof(ProductsOrder).GetMember("Items").Single());
            Assert.AreEqual("productsOrderOrderItem", result);

            // Component Table Name => EntityName & Relationship Name
            config.UseConventionForTableNames(TablesNamingConvention.Uppercase);
            config.UseConventionForComponentTableNames(ComponentsTableNamingConvention.EntityNameRelationshipName);
            result = namingEngine.ToComponentTableName(typeof(ProductsOrder), typeof(OrderItem), typeof(ProductsOrder).GetMember("Items").Single());
            Assert.AreEqual("PRODUCTS_ORDER_ITEMS", result);

            // Component Table Name => EntityName & Relationship Name
            config.UseConventionForTableNames(TablesNamingConvention.CamelCase);
            config.UseConventionForComponentTableNames(ComponentsTableNamingConvention.RelationshipName);
            result = namingEngine.ToComponentTableName(typeof(ProductsOrder), typeof(OrderItem), typeof(ProductsOrder).GetMember("Items").Single());
            Assert.AreEqual("items", result);

            // Component Table Name => EntityName & Relationship Name
            config.UseConventionForTableNames(TablesNamingConvention.CamelCase);
            config.UseCustomConventionForComponentTableNames((e, c, p) =>
                {
                    Assert.AreEqual(typeof(ProductsOrder), e);
                    Assert.AreEqual(typeof(OrderItem), c);
                    Assert.AreEqual(typeof(ProductsOrder).GetMember("Items").Single(), p);

                    return "CustomComponentTableName";
                });
            result = namingEngine.ToComponentTableName(typeof(ProductsOrder), typeof(OrderItem), typeof(ProductsOrder).GetMember("Items").Single());
            Assert.AreEqual("CustomComponentTableName", result);
        }