예제 #1
0
        public void TestSearchLibraryUpdate()
        {
            //Arrange
            const string nodeName    = "TheNoodle";
            const string catName     = "TheCat";
            const string descr       = "TheCat";
            const string path        = @"C:\temp\graphics.dyn";
            const string newNodeName = "TheTurtle";

            var guid1        = Guid.NewGuid();
            var dummyInfo1   = new CustomNodeInfo(guid1, nodeName, catName, descr, path);
            var dummySearch1 = new CustomNodeSearchElementTest(null, dummyInfo1);
            var newInfo      = new CustomNodeInfo(guid1, newNodeName, catName, descr, path);

            dummySearch1.SearchKeywords.Add("tag1");
            dummySearch1.WeightsCollection.Add(10);

            //Act
            search.Add(dummySearch1);
            dummySearch1.SyncWithCustomNodeInfo(newInfo);
            search.Update(dummySearch1);//internal void Update(TEntry entry, bool isCategoryChanged = false)
            search.Update(dummySearch1, true);

            //Assert
            //Just validate that the tags and weights were added correctly
            Assert.AreEqual(dummySearch1.SearchKeywords.Count, 1);
            Assert.AreEqual(dummySearch1.WeightsCollection.Count, 1);
        }
예제 #2
0
        /// <summary>
        /// As we rely on search when generating markdown files and matching them with content from the DynamoDictionary
        /// we need to add all NodeModel nodes to the SearchModel.
        /// </summary>
        /// <param name="asm"></param>
        /// <param name="nodeModelType"></param>
        /// <param name="searchModel"></param>
        private static void AddNodeModelsToSearchModel(Assembly asm, NodeSearchModel searchModel)
        {
            System.Type[] typesInAsm = null;
            try
            {
                typesInAsm = asm.GetTypes();
            }
            // see https://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly.gettypes?view=netframework-4.8#remarks
            catch (ReflectionTypeLoadException ex)
            {
                Program.VerboseControlLog(ex.Message);
                typesInAsm = ex.Types;
            }

            var nodeTypes = typesInAsm
                            .Where(x => NodeModelAssemblyLoader.IsNodeSubType(x))
                            .Select(t => new TypeLoadData(t))
                            .Where(type => type != null && !type.IsDeprecated && !type.IsHidden)
                            .ToList();

            foreach (var type in nodeTypes)
            {
                Program.VerboseControlLog($"adding nodeModelSearchElement for {type.Category} {type.Name}");
                searchModel.Add(new NodeModelSearchElement(type));
            }
        }
예제 #3
0
 /// <summary>
 /// As we rely on search when generating markdown files and matching them with content from the DynamoDictionary
 /// we need to add all ZT nodes to the SearchModel.
 /// </summary>
 /// <param name="funcGroup"></param>
 /// <param name="nodeSearchModel"></param>
 private static void AddFunctionGroupToSearch(FunctionGroup funcGroup, NodeSearchModel nodeSearchModel)
 {
     foreach (var functionDescriptor in funcGroup.Functions)
     {
         if (functionDescriptor.IsVisibleInLibrary)
         {
             nodeSearchModel.Add(new ZeroTouchSearchElement(functionDescriptor));
         }
     }
 }
예제 #4
0
        public void PopulateSearchTextWithSelectedResultReturnsExpectedResult()
        {
            const string catName = "Animals";
            const string descr   = "";
            const string path    = "";

            model.Add(new CustomNodeSearchElement(null, new CustomNodeInfo(Guid.NewGuid(), "xyz", catName, descr, path)));
            model.Add(new CustomNodeSearchElement(null, new CustomNodeInfo(Guid.NewGuid(), "abc", catName, descr, path)));
            model.Add(new CustomNodeSearchElement(null, new CustomNodeInfo(Guid.NewGuid(), "cat", catName, descr, path)));
            model.Add(new CustomNodeSearchElement(null, new CustomNodeInfo(Guid.NewGuid(), "dog", catName, descr, path)));
            model.Add(new CustomNodeSearchElement(null, new CustomNodeInfo(Guid.NewGuid(), "frog", catName, descr, path)));
            model.Add(new CustomNodeSearchElement(null, new CustomNodeInfo(Guid.NewGuid(), "Noodle", catName, descr, path)));

            viewModel.SearchAndUpdateResults("xy");
            viewModel.PopulateSearchTextWithSelectedResult();
            Assert.AreEqual("xyz", viewModel.SearchText);

            viewModel.SearchAndUpdateResults("ood");
            viewModel.PopulateSearchTextWithSelectedResult();
            Assert.AreEqual("Noodle", viewModel.SearchText);

            viewModel.SearchAndUpdateResults("do");
            viewModel.PopulateSearchTextWithSelectedResult();
            Assert.AreEqual("dog", viewModel.SearchText);
        }
예제 #5
0
        /// <summary>
        /// Helper method for custom node adding and removing
        /// </summary>
        public static void AssertAddAndRemoveCustomNode(
            NodeSearchModel searchModel, string nodeName, string catName, string descr = "Bla",
            string path = "Bla")
        {
            var dummyInfo   = new CustomNodeInfo(Guid.NewGuid(), nodeName, catName, descr, path);
            var dummySearch = new CustomNodeSearchElement(null, dummyInfo);

            searchModel.Add(dummySearch);

            var res = searchModel.Search(nodeName).ToList();

            Assert.AreNotEqual(0, res.Count());
            Assert.AreEqual(res[0].Name, nodeName);

            searchModel.Remove(dummySearch);
            res = searchModel.Search(nodeName).ToList();
            Assert.AreEqual(0, res.Count());
        }
        public void LibraryDataUpdatedEventRaised()
        {
            const string libraryDataUpdated = "libraryDataUpdated";
            var          timeout            = 50; //50 milliseconds
            var          resetevent         = new AutoResetEvent(false);

            var model      = new NodeSearchModel();
            var controller = new Mock <IEventController>();

            controller.Setup(c => c.RaiseEvent(It.IsAny <string>(), It.IsAny <object[]>())).Callback(() => resetevent.Set());

            var customization = new LibraryViewCustomization();

            var disposable = LibraryViewController.SetupSearchModelEventsObserver(model, controller.Object, customization, timeout);

            controller.Verify(c => c.RaiseEvent(libraryDataUpdated, It.IsAny <object[]>()), Times.Never);

            var d1 = MockNodeSearchElement("A", "B");
            var d2 = MockNodeSearchElement("C", "D");
            var d3 = MockNodeSearchElement("E", "F");

            model.Add(d1.Object);
            model.Add(d2.Object);
            model.Add(d3.Object);
            Assert.AreEqual(3, model.NumElements);

            Assert.IsTrue(resetevent.WaitOne(timeout * 200));
            resetevent.Dispose();
            controller.Verify(c => c.RaiseEvent(libraryDataUpdated), Times.Once);

            var spec    = customization.GetSpecification();
            var section = spec.sections.FirstOrDefault();

            Assert.AreEqual(1, spec.sections.Count);
            //There must be a section named "Add-ons" now.
            Assert.AreEqual("Add-ons", section.text);
            Assert.AreEqual(3, section.include.Count);
            Assert.AreEqual("A, C, E", string.Join(", ", section.include.Select(i => i.path)));

            //Dispose
            disposable.Dispose();
            d1 = MockNodeSearchElement("G", "B");
            d2 = MockNodeSearchElement("H", "D");
            d3 = MockNodeSearchElement("I", "F");
            model.Add(d1.Object);
            model.Add(d2.Object);
            model.Add(d3.Object);
            Assert.AreEqual(6, model.NumElements);
            controller.Verify(c => c.RaiseEvent(libraryDataUpdated, It.IsAny <object[]>()), Times.Once);
        }
예제 #7
0
        public void CanRefactorCustomNodeName()
        {
            const string nodeName     = "TheNoodle";
            const string catName      = "TheCat";
            const string descr        = "TheCat";
            const string path         = @"C:\turtle\graphics.dyn";
            var          guid1        = Guid.NewGuid();
            var          dummyInfo1   = new CustomNodeInfo(guid1, nodeName, catName, descr, path);
            var          dummySearch1 = new CustomNodeSearchElement(null, dummyInfo1);

            search.Add(dummySearch1);

            Assert.AreEqual(1, search.NumElements);

            const string newNodeName = "TheTurtle";
            var          newInfo     = new CustomNodeInfo(guid1, newNodeName, catName, descr, path);

            dummySearch1.SyncWithCustomNodeInfo(newInfo);
            search.Update(dummySearch1);

            Assert.AreEqual(1, search.NumElements);

            // search for new name
            var results = search.Search(newNodeName).ToList();

            // results are correct
            Assert.AreEqual(1, results.Count());
            var res1 = results[0];

            Assert.IsInstanceOf <CustomNodeSearchElement>(res1);
            Assert.AreEqual(guid1, ((CustomNodeSearchElement)res1).ID);

            // search for old name
            var results1 = search.Search(nodeName);

            // results are correct
            Assert.AreEqual(0, results1.Count());
        }
예제 #8
0
        /// <summary>
        /// Helper method for custom node adding and removing
        /// </summary>
        public static void AssertAddAndRemoveCustomNode(
            NodeSearchModel searchModel, string nodeName, string catName, string descr = "Bla",
            string path = "Bla")
        {
            var dummyInfo = new CustomNodeInfo(Guid.NewGuid(), nodeName, catName, descr, path);
            var dummySearch = new CustomNodeSearchElement(null, dummyInfo);
            searchModel.Add(dummySearch);

            var res = searchModel.Search(nodeName).ToList();
            Assert.AreNotEqual(0, res.Count());
            Assert.AreEqual(res[0].Name, nodeName);

            searchModel.Remove(dummySearch);
            res = searchModel.Search(nodeName).ToList();
            Assert.AreEqual(0, res.Count());
        }