Inheritance: System.ComponentModel.TypeConverter
        public void TestExposingStates()
        {
            List<string> variables = ExposedVariableManager.GetExposableMembersFor(mEntitySave, false).Select(m=>m.Member).ToList();

            if (!variables.Contains("CurrentState"))
            {
                throw new Exception("ExposedVariableManager is not properly returning the CurrentState as an exposable variable");
            }
            if (!variables.Contains("CurrentStateCategoryState"))
            {
                throw new Exception("ExposedVariableManager is not properly returning categorized states as exposable variables");
            }

            // Let's remove uncategorized state to make sure the categorized state is still recognized:
            StateSave stateSave = mEntitySave.States[0];
            mEntitySave.States.RemoveAt(0);
            variables = ExposedVariableManager.GetExposableMembersFor(mEntitySave, false).Select(m=>m.Member).ToList();

            if (!variables.Contains("CurrentStateCategoryState"))
            {
                throw new Exception("ExposedVariableManager is not properly returning categorized states when there are no uncategorized states.");
            }
            // Add it back in case it's needed for other tests.
            mEntitySave.States.Add(stateSave);

            variables = ExposedVariableManager.GetExposableMembersFor(mEntityWithCategorizedThatShareVariables, false).Select(m => m.Member).ToList();
            if (!variables.Contains("CurrentState"))
            {
                throw new Exception("Entities that only have states in categories, but those categories share variables with other categories, are not exposing CurrentState and they should!");
            }

            List<string> listOfStates = new List<string>();
            AvailableStates availableStates = new AvailableStates(null, mContainerDerivedEntity, mContainerDerivedEntity.CustomVariables[0], null);
            availableStates.GetListOfStates(listOfStates, "TunneledStateVariable");
            if (listOfStates.Count == 0 || !listOfStates.Contains("StateInCategory1"))
            {
                throw new Exception("SetByDerived variables that tunnel in to categorized states do not properly return their list through GetListOfStates");
            }


            ScreenSave screenSave = new ScreenSave();
            StateSaveCategory category = new StateSaveCategory();
            category.Name = "Whatever";
            screenSave.StateCategoryList.Add(category);
            StateSave stateInScreen = new StateSave();
            stateInScreen.Name = "First";
            category.States.Add(stateInScreen);
            variables = ExposedVariableManager.GetExposableMembersFor(screenSave, false).Select(item=>item.Member).ToList();

            if (variables.Contains("CurrentState") == false)
            {
                throw new NotImplementedException("Screens with states that are in categories that share variables are not properly returning the CurrentState as a possible variable");
            }
        }
Exemple #2
0
        public void Test()
        {
            AvailableStates availableStates = new AvailableStates(
                null,
                mEntitySave,
                mExposedStateInCategoryVariable,
                null);


            List<string> listToFill = new List<string>();



            availableStates.CurrentCustomVariable = mExposedStateVariable;
            listToFill.Clear();
            availableStates.GetListOfStates(listToFill, null);
            if (listToFill.Count != NumberOfUncategorizedAndSharedStates(mEntitySave) + 1 || listToFill[1] != "Uncategorized")
            {
                throw new Exception("GetListOfStates isn't properly filtering out categorized states");
            }



            listToFill.Clear();
            availableStates.CurrentCustomVariable = mExposedStateInCategoryVariable;
            availableStates.GetListOfStates(listToFill, null);

            if(listToFill.Count != 2 || listToFill[1] != "StateInCategory1")
            {
                throw new Exception("GetListOfStates isn't properly filtering out uncategorized states");
            }

            // Test getting states for variables that don't use the "CurrentWhatever" naming in categories
            listToFill.Clear();
            availableStates.CurrentElement = mContainerEntitySave;
            availableStates.CurrentNamedObject = mEntitySaveInstance;
            availableStates.CurrentCustomVariable = null;
            availableStates.GetListOfStates(listToFill, mRenamedExposedCategorizedStateVariable.Name);

            if(listToFill.Contains("StateInCategory1") == false)
            {
                throw new Exception("GetListOfStates doesn't work properly on states that are categorized and have variables that don't follow the typical CurrentWhatever naming.");
            }

            // Test getting states for variables that don't use the "CurrentWhatever" naming in categories, and are accessed through inheritance

            listToFill.Clear();
            availableStates.CurrentElement = mContainerEntitySave;
            availableStates.CurrentNamedObject = mDerivedSaveInstance;
            availableStates.CurrentCustomVariable = null;
            availableStates.GetListOfStates(listToFill, mRenamedExposedUncategorizedStateVariable.Name);
            if (listToFill.Count != mEntitySave.States.Count + 1)
            {
                throw new Exception("GetListOfStates on NOS's that are derived doesn't seem to work properly");
            }


            listToFill.Clear();
            availableStates.CurrentElement = mContainerEntitySave;
            availableStates.CurrentCustomVariable = null;
            availableStates.CurrentNamedObject = mEntitySaveInstance;
            availableStates.GetListOfStates(listToFill, "CurrentState");
            if(listToFill.Count != NumberOfUncategorizedAndSharedStates(mEntitySave) + 1 || listToFill[1] != "Uncategorized") // will include "<NONE>"
            {
                throw new Exception("GetListOfStates isn't properly filtering out categorized states");
            }

            // Test getting states for a variable that doesn't use the typical "CurrentWhatever" naming on uncategorized
            listToFill.Clear();
            availableStates.CurrentElement = mContainerEntitySave;
            availableStates.CurrentCustomVariable = null;
            availableStates.CurrentNamedObject = mEntitySaveInstance;
            availableStates.GetListOfStates(listToFill, mRenamedExposedUncategorizedStateVariable.Name);
            if (listToFill.Count != NumberOfUncategorizedAndSharedStates(mEntitySave) + 1 || listToFill[1] != "Uncategorized") // will include "<NONE>"
            {
                throw new Exception("GetListOfStates isn't properly filtering out categorized states");
            }

            // Test getting states for a tunneled variable that doesn't use the typical "CurrentWhatever" naming on uncategorized
            listToFill.Clear();
            availableStates.CurrentElement = mContainerEntitySave;
            availableStates.CurrentCustomVariable = mTunneledUncategorizedStateInContainer;
            availableStates.CurrentNamedObject = null;
            availableStates.GetListOfStates(listToFill, mRenamedExposedUncategorizedStateVariable.Name);
            if (listToFill.Count != NumberOfUncategorizedAndSharedStates(mEntitySave) + 1 || listToFill[1] != "Uncategorized") // will include "<NONE>"
            {
                throw new Exception("GetListOfStates isn't properly filtering out categorized states");
            }



            listToFill.Clear();
            availableStates.CurrentElement = mContainerEntitySave;
            availableStates.CurrentNamedObject = mEntitySaveInstance;
            availableStates.CurrentCustomVariable = null;

            availableStates.GetListOfStates(listToFill, "CurrentStateCategoryState");
            if(listToFill.Count != 2 || listToFill[1] != "StateInCategory1")
            {
                throw new Exception("GetListOfStates isn't properly filtering out uncategorized states");
            }


            string whyItIsntValid;
            if (NameVerifier.IsStateNameValid("Color", null, null, null, out whyItIsntValid))
            {
                throw new Exception("The state name Color should not be a valid name, but Glue allows it");
            }


            listToFill.Clear();
            availableStates.CurrentElement = mDerivedEntitySave;
            availableStates.CurrentCustomVariable = mDerivedEntitySave.CustomVariables[0];
            availableStates.CurrentNamedObject = null;
            availableStates.GetListOfStates(listToFill, mDerivedEntitySave.CustomVariables[0].Name);

            if (listToFill.Count == 0 || listToFill[1] != "Uncategorized")
            {
                throw new Exception("GetListOfStates is not properly finding uncategorized states defined in a base type");
            }

            listToFill.Clear();
            availableStates.CurrentElement = mDerivedEntitySave;
            availableStates.CurrentCustomVariable = mDerivedEntitySave.CustomVariables[1];
            availableStates.CurrentNamedObject = null;
            availableStates.GetListOfStates(listToFill, mDerivedEntitySave.CustomVariables[1].Name);

            if (listToFill.Count == 0 || listToFill[1] != "StateInCategory1")
            {
                throw new Exception("GetListOfStates is not properly finding categorized states defined in a base type");
            }

            // Test CurrentState variable tate in the Container
            listToFill.Clear();
            availableStates.CurrentElement = mContainerEntitySave;
            availableStates.CurrentCustomVariable = null;
            availableStates.CurrentStateSave = null;
            availableStates.CurrentNamedObject = mDerivedSaveInstance;
            availableStates.GetListOfStates(listToFill, "CurrentState");

            if (listToFill.Count != mEntitySave.States.Count + 1)
            {
                throw new Exception("Getting state on NamedObject that is of a derived type that gets its state from the base type is not working properly");

            }

            ////Test adding same name with shared category
            
            //Test shared vs shared
            var sharedCategoryElement = new EntitySave();
            string outString;
            sharedCategoryElement.StateCategoryList.Add(new StateSaveCategory{Name = "First", SharesVariablesWithOtherCategories = true});
            sharedCategoryElement.StateCategoryList[0].States.Add(new StateSave{Name = "State1"});
            sharedCategoryElement.StateCategoryList.Add(new StateSaveCategory{Name = "Second", SharesVariablesWithOtherCategories = true});
            if(NameVerifier.IsStateNameValid("State1", sharedCategoryElement, sharedCategoryElement.StateCategoryList[1], null,
                                          out outString))
            {
                throw new Exception("Should not allow adding same state name between shared categories.");
            }

            //Test shared vs main
            sharedCategoryElement = new EntitySave();
            sharedCategoryElement.StateCategoryList.Add(new StateSaveCategory { Name = "First", SharesVariablesWithOtherCategories = true });
            sharedCategoryElement.StateCategoryList[0].States.Add(new StateSave { Name = "State1" });
            if (NameVerifier.IsStateNameValid("State1", sharedCategoryElement, null, null,
                                          out outString))
            {
                throw new Exception("Should not allow adding same state name in main when exists in shared categories.");
            }

            //Test main vs shared
            sharedCategoryElement = new EntitySave();
            sharedCategoryElement.States.Add(new StateSave{Name = "State1"});
            sharedCategoryElement.StateCategoryList.Add(new StateSaveCategory { Name = "First", SharesVariablesWithOtherCategories = true });
            if (NameVerifier.IsStateNameValid("State1", sharedCategoryElement, sharedCategoryElement.StateCategoryList[0], null,
                                          out outString))
            {
                throw new Exception("Should not allow adding same state name in shared category when exists in main states.");
            }
        }
Exemple #3
0
        public void TestCategories()
        {
            List<string> listToFill = new List<string>();

            AvailableStates availableStates = new AvailableStates(
                null,
                mEntitySave,
                mExposedStateVariable,
                null);


            listToFill.Clear();
            availableStates.GetListOfStates(listToFill, mDerivedEntitySave.CustomVariables[0].Name);

            if (listToFill.Contains("SharedStateSave") == false)
            {
                throw new Exception("GetListOfStates is not returnign states that are categorized but that share variables with others.");
            }


        }
        public static TypeConverter GetTypeConverter(this CustomVariable customVariable, IElement containingElement, StateSave stateSave, FlatRedBall.Glue.Plugins.ExportedInterfaces.IGlueState glueState)
        {
            TypeConverter typeConverter = null;

            if (customVariable.GetIsVariableState())
            {
                typeConverter = new AvailableStates(
                    FacadeContainer.Self.GlueState.CurrentNamedObjectSave,
                    FacadeContainer.Self.GlueState.CurrentElement,
                    FacadeContainer.Self.GlueState.CurrentCustomVariable,
                    FacadeContainer.Self.GlueState.CurrentStateSave
                );
            }
            else
            {
                Type runtimeType = customVariable.GetRuntimeType();

                if (runtimeType != null)
                {
                    if (runtimeType.IsEnum)
                    {
                        typeConverter = new EnumConverter(runtimeType);
                    }
                    else if (runtimeType == typeof(Color))
                    {
                        return new AvailableColorTypeConverter();
                    }

                    else if ((runtimeType == typeof(string) || runtimeType == typeof(AnimationChainList)) &&
                        customVariable.SourceObjectProperty == "CurrentChainName")
                    {

                        typeConverter = new AvailableAnimationChainsStringConverter(customVariable, stateSave);
                    }
                    else if (customVariable.GetIsFile())
                    {
                        AvailableFileStringConverter converter = new AvailableFileStringConverter(containingElement);
                        converter.QualifiedRuntimeTypeName = runtimeType.FullName;
                        converter.ShowNewFileOption = false;
                        converter.RemovePathAndExtension = true;
                        typeConverter = converter;
                    }
                }
                else if (customVariable.GetIsCsv())
                {
                    if (FacadeContainer.Self.ProjectValues == null)
                    {
                        throw new NullReferenceException("The ProjectValues property in FAcadeContainer.Self.ProjectValues must be set before trying to get the CSV type converter for the variable " + customVariable.ToString());
                    }

                    ReferencedFileSave rfs = ObjectFinder.Self.GetAllReferencedFiles().FirstOrDefault(item =>
                        item.IsCsvOrTreatedAsCsv && item.GetTypeForCsvFile() == customVariable.Type);

                    AvailableSpreadsheetValueTypeConverter converter = null;
                    if (rfs != null)
                    {
                        converter = new AvailableSpreadsheetValueTypeConverter(
                           FacadeContainer.Self.ProjectValues.ContentDirectory + rfs.Name, containingElement);
                    }
                    else
                    {

                        converter = new AvailableSpreadsheetValueTypeConverter(
                            FacadeContainer.Self.ProjectValues.ContentDirectory + customVariable.Type, containingElement);
                    }
                    converter.ShouldAppendFileName = true;

                    typeConverter = converter;
                }
                else if (customVariable.GetIsFile())
                {
                    // If we got here, that means that the
                    // CustomVariable is a file, but it doesn't
                    // have a System.Type, so it only knows its runtime
                    // type;
                    AvailableFileStringConverter converter = new AvailableFileStringConverter(containingElement);
                    converter.UnqualifiedRuntimeTypeName = customVariable.Type;
                    converter.ShowNewFileOption = false;
                    converter.RemovePathAndExtension = true;
                    typeConverter = converter;
                }
            }


            return typeConverter;
        }