public IDropAction GetAction(DropQuery qry)
 {
     _log.Debug("Searching for " + qry);
     var matching = _actions.Select(a => new { Match= a.Match(qry), Action=a }).Where(x => x.Match > 0).OrderByDescending(x => x.Match).ToList();
      _log.Debug("Actions:" + matching);
         return matching.FirstOrDefault()?.Action;
 }
        public void test_Drop()
        {
            var d = new DropQuery
            {
                Table = "TestTable"
            };

            Assert.AreEqual("DROP TABLE TestTable;", d.ToString());
        }
        public void test_Drop_IfExists()
        {
            var d = new DropQuery
            {
                Table    = "TestTable",
                IfExists = true
            };

            Assert.AreEqual("DROP TABLE IF EXISTS TestTable;", d.ToString());
        }
        public void commalist_dropaction_if_dragging_members_and_Dropping_into_method()
        {
            var svc = getService();
            var query = new DropQuery()
            {
                ShiftDown = false,
                ContainsClasses = false ,
                ContainsMembers = true ,
                DroppingIntoMethod = true,
                DroppingIntoClass = true
            };

            var actual = svc.GetAction(query);

            Assert.IsNotNull(actual);
            Assert.IsInstanceOf<CommaDelimitedListDropAction>(actual);
        }
        public void method_level_declaration_dropaction_if_dragging_classes_and_Dropping_into_class()
        {
            var svc = getService();
            var query = new DropQuery()
            {
                ShiftDown = true,
                ContainsClasses = true,
                ContainsMembers = false,
                DroppingIntoMethod = true ,
                DroppingIntoClass = true
            };

            var actual = svc.GetAction(query);

            Assert.IsNotNull(actual);
            Assert.IsInstanceOf<ClassVarDropAction>(actual);
        }
        public void match_compares_shift()
        {
            var c = new DropActionConfiguration() { ShiftMustBeDown = true };
            var qry = new DropQuery() { ShiftDown = true };

            Assert.AreEqual(1, qry.Match(c));
            Assert.AreEqual(0, new DropQuery().Match(c));
        }
        public void match_compares_shift_and_alt_and_ctl()
        {
            var c = new DropActionConfiguration() { ShiftMustBeDown = true, AltMustBeDown = true, ControlMustBeDown=true  };
            var qry = new DropQuery() { ShiftDown = true, AltDown = true, ControlDown=true  };

            Assert.AreEqual(3, qry.Match(c));
            Assert.AreEqual(0, new DropQuery().Match(c));
        }
        public void match_compares_members()
        {
            var c = new DropActionConfiguration() { SupportsMembers = true };
            var qry = new DropQuery() { ContainsMembers = true };

            Assert.AreEqual(1, qry.Match(c));
            Assert.AreEqual(0, new DropQuery().Match(c));
        }
        public void match_compares_dropping_into_class()
        {
            var c = new DropActionConfiguration() { SupportsDroppingIntoClass = true };
            var qry = new DropQuery() { DroppingIntoClass=true  };

            Assert.AreEqual(1, qry.Match(c));

            c = new DropActionConfiguration() { SupportsDroppingIntoClass = false  };
            Assert.AreEqual(0, new DropQuery().Match(c));
        }
        public void update_dropaction_if_dragging_members_and_Dropping_into_method()
        {
            var svc = getService( );
            var query = new DropQuery()
            {
                AltDown = true,
                ContainsClasses = true ,
                ContainsMembers = true,
                DroppingIntoMethod = true,
                DroppingIntoClass = true
            };

            var actual = svc.GetAction(query);

            Assert.IsNotNull(actual);
            Assert.IsInstanceOf<MemberUpdateDropAction>(actual);
        }
        private IDropAction getDropAction(IEnumerable<Node> nodes, DragDropInfo dragDropInfo, DropLocation dropLocation )
        {
            var qry = new DropQuery()
            {
                AltDown = ((dragDropInfo.KeyStates & DragDropKeyStates.AltKey) != 0),
                ShiftDown = ((dragDropInfo.KeyStates & DragDropKeyStates.ShiftKey) != 0),
                ControlDown = ((dragDropInfo.KeyStates & DragDropKeyStates.ControlKey) != 0),
                ContainsClasses = (nodes.Any(x => x.IsClass)),
                ContainsMembers = (nodes.Any(x => !x.IsClass)),
                DroppingIntoClass = dropLocation.Class != null,
                DroppingIntoMethod = dropLocation.Function != null
            };

            return _dropActionProvider.GetAction(qry);
        }
 public virtual int Match(DropQuery qry)
 {
     return 1;
 }