public Package(XmlNode packageNode, Repository repository)
        {
            _packageXmlNode = packageNode;
            _repository = repository;

            var metadataNodes = new[] {
                packageNode.SelectSingleNode("child::name"),
                packageNode.SelectSingleNode("child::version"),
                packageNode.SelectSingleNode("child::description")
            };

            if (metadataNodes[0] == null)
                throw new InvalidOperationException("Package XML is missing a name tag.");
            if (metadataNodes[1] == null)
                throw new InvalidOperationException("Package XML is missing a version tag.");

            Name = metadataNodes[0].InnerText;
            Version = metadataNodes[1].InnerText;
            Description = metadataNodes[2] != null ? metadataNodes[2].InnerText : string.Empty;

            _resolvers = ResolverUtil.GetResolverChain(this);

            var optionsNode = packageNode.SelectSingleNode("child::options");
            if (optionsNode != null)
                Selectors = (from xmlNode in optionsNode.SelectNodes("child::selector").OfType<XmlNode>()
                             select new Selector(xmlNode)).ToArray();
            else
                Selectors = new Selector[] { };

            Log.DebugFormat("Opened package, ID is {0}, Name is {1}, Version is {2}", ID, Name, Version);
        }
 public void SelectorParsing()
 {
     var xmldoc = new XmlDocument();
     xmldoc.LoadXml("<selector id=\"awesomeselector\"><choice value=\"1\" default=\"false\">A</choice><choice value=\"2\" default=\"true\">B</choice><choice value=\"3\" description=\"test\">C</choice></selector>");
     Selector s = new Selector(xmldoc.FirstChild);
     if (s.AvailableOptions.Count != 3)
         throw new Exception("Options count mismatch");
     if (s.CurrentOption.Value != "2")
         throw new Exception("Default value mismatch");
 }