public void ReadRegistry_IgnoreSubToolsetSubKeys()
        {
            string xdir = NativeMethodsShared.IsWindows ? "c:\\xxx" : "/xxx";

            RegistryKey key1 = _toolsVersionsRegistryKey.CreateSubKey("tv1");

            key1.SetValue("msbuildtoolspath", xdir);
            key1.SetValue("name1", "value1");
            RegistryKey subKey1 = key1.CreateSubKey("SubKey1");

            subKey1.SetValue("name1a", "value1a");
            subKey1.SetValue("name2a", "value2a");
            RegistryKey subSubKey1 = subKey1.CreateSubKey("SubSubKey1");

            subSubKey1.SetValue("name2b", "value2b");

            ToolsetReader reader = GetStandardRegistryReader();
            string        msbuildOverrideTasksPath    = null;
            string        defaultOverrideToolsVersion = null;

            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);
            string defaultToolsVersion          = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);

            Assert.Equal(1, values.Count);
            Assert.Equal(1, values["tv1"].Properties.Count);
            Assert.Equal(xdir, values["tv1"].ToolsPath);
            Assert.Equal("value1", values["tv1"].Properties["name1"].EvaluatedValue);
            Assert.Equal(1, values["tv1"].SubToolsets.Count);
            Assert.Equal(2, values["tv1"].SubToolsets["SubKey1"].Properties.Count);
            Assert.Equal("value1a", values["tv1"].SubToolsets["SubKey1"].Properties["name1a"].EvaluatedValue);
            Assert.Equal("value2a", values["tv1"].SubToolsets["SubKey1"].Properties["name2a"].EvaluatedValue);
        }
        public void ReadToolsets_NoBinPathOrToolsPath()
        {
            RegistryKey key1 = _toolsVersionsRegistryKey.CreateSubKey("tv1");

            key1.SetValue("msbuildtoolspath", "c:\\xxx");
            key1.SetValue("name1", "value1");
            RegistryKey key2 = _toolsVersionsRegistryKey.CreateSubKey("tv2");

            key2.SetValue("name2", "value2");
            RegistryKey key3 = _toolsVersionsRegistryKey.CreateSubKey("tv3");

            key3.SetValue("msbuildtoolspath", "c:\\zzz");
            key3.SetValue("name3", "value3");

            ToolsetReader reader = GetStandardRegistryReader();
            string        msbuildOverrideTasksPath    = null;
            string        defaultOverrideToolsVersion = null;

            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);

            //should not throw
            string defaultToolsVersion = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);

            Assert.True(values.ContainsKey("tv1"));

            //should not contain the second toolset because it does not define a tools/bin path
            Assert.False(values.ContainsKey("tv2"));

            Assert.True(values.ContainsKey("tv3"));
        }
        public void ReadRegistry_UnselectedSubToolsetIsIgnored()
        {
            RegistryKey key1 = _toolsVersionsRegistryKey.CreateSubKey("tv1");

            key1.SetValue("msbuildtoolspath", "c:\\xxx");
            key1.SetValue("name1", "value1");
            key1.SetValue("name2", "value2");
            RegistryKey subKey1 = key1.CreateSubKey("Foo");

            subKey1.SetValue("name1", "value1a");
            subKey1.SetValue("name2", "");

            ToolsetReader reader = GetStandardRegistryReader();
            string        msbuildOverrideTasksPath    = null;
            string        defaultOverrideToolsVersion = null;

            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);
            string defaultToolsVersion          = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);

            Assert.Equal(1, values.Count);
            Assert.Equal(2, values["tv1"].Properties.Count);
            Assert.Equal("c:\\xxx", values["tv1"].ToolsPath);
            Assert.Equal("value1", values["tv1"].Properties["name1"].EvaluatedValue);
            Assert.Equal("value2", values["tv1"].Properties["name2"].EvaluatedValue);
        }
Example #4
0
        public void ReadRegistry_Basic()
        {
            string      xdir = NativeMethodsShared.IsWindows ? "c:\\xxx" : "/xxx";
            string      ydir = NativeMethodsShared.IsWindows ? "c:\\yyy" : "/yyy";
            RegistryKey key1 = _toolsVersionsRegistryKey.CreateSubKey("tv1");

            key1.SetValue("msbuildtoolspath", xdir);
            key1.SetValue("name1", "value1");
            RegistryKey key2 = _toolsVersionsRegistryKey.CreateSubKey("tv2");

            key2.SetValue("name2", "value2");
            key2.SetValue("msbuildtoolspath", ydir);

            ToolsetReader reader = GetStandardRegistryReader();
            string        msbuildOverrideTasksPath    = null;
            string        defaultOverrideToolsVersion = null;

            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);

            reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);

            Assert.Equal(2, values.Count);
            Assert.Equal(1, values["tv1"].Properties.Count);
            Assert.True(0 == String.Compare(xdir, values["tv1"].ToolsPath, StringComparison.OrdinalIgnoreCase));
            Assert.True(0 == String.Compare("value1", values["tv1"].Properties["name1"].EvaluatedValue, StringComparison.OrdinalIgnoreCase));
            Assert.Equal(1, values["tv2"].Properties.Count);
            Assert.True(0 == String.Compare(ydir, values["tv2"].ToolsPath, StringComparison.OrdinalIgnoreCase));
            Assert.True(0 == String.Compare("value2", values["tv2"].Properties["name2"].EvaluatedValue, StringComparison.OrdinalIgnoreCase));
        }
        public void ReadRegistry_SubToolsetOverridesBaseToolsetEntries()
        {
            RegistryKey key1 = _toolsVersionsRegistryKey.CreateSubKey("tv1");

            key1.SetValue("msbuildtoolspath", "c:\\xxx");
            key1.SetValue("name1", "value1");
            key1.SetValue("name2", "value2");
            RegistryKey subKey1 = key1.CreateSubKey("Foo");

            subKey1.SetValue("name1", "value1a");
            subKey1.SetValue("name2", "");

            ToolsetReader reader = GetStandardRegistryReader();
            string        msbuildOverrideTasksPath    = null;
            string        defaultOverrideToolsVersion = null;

            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);
            string defaultToolsVersion          = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);

            Assert.Equal(1, values.Count);
            Assert.Equal(2, values["tv1"].Properties.Count);
            Assert.Equal("c:\\xxx", values["tv1"].ToolsPath);
            Assert.Equal("value1", values["tv1"].Properties["name1"].EvaluatedValue);
            Assert.Equal("value2", values["tv1"].Properties["name2"].EvaluatedValue);
            Assert.Equal(1, values["tv1"].SubToolsets.Count);
            Assert.Equal(2, values["tv1"].SubToolsets["Foo"].Properties.Count);
            Assert.Equal("value1a", values["tv1"].SubToolsets["Foo"].Properties["name1"].EvaluatedValue);
            Assert.Equal("", values["tv1"].SubToolsets["Foo"].Properties["name2"].EvaluatedValue);

            // Check when requesting the final evaluated value of the property in the context of its sub-toolset
            // that the sub-toolset overrides
            Assert.Equal("value1a", values["tv1"].GetProperty("name1", "Foo").EvaluatedValue);
            Assert.Equal("", values["tv1"].GetProperty("name2", "Foo").EvaluatedValue);
        }
        public void GetDefaultOverrideToolsVersionFromRegistry_NonStringData()
        {
            _currentVersionRegistryKey.SetValue("DefaultOverrideToolsVersion", new String[] { "2938304894", "3948394.2.3.3.3" }, RegistryValueKind.MultiString);

            ToolsetReader reader = GetStandardRegistryReader();
            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);
            string msbuildOverrideTasksPath     = null;
            string defaultOverrideToolsVersion  = null;
            string defaultToolsVersion          = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);
        }
Example #7
0
        public void GetDefaultToolsVersionFromRegistry_DefaultValueNotSet()
        {
            ToolsetReader reader = GetStandardRegistryReader();
            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);
            string msbuildOverrideTasksPath;
            string defaultOverrideToolsVersion;
            string defaultToolsVersion = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);

            Assert.Null(defaultToolsVersion);
        }
        public void ReadRegistry_NoSubkeyNoValues()
        {
            ToolsetReader reader = GetStandardRegistryReader();
            string        msbuildOverrideTasksPath    = null;
            string        defaultOverrideToolsVersion = null;
            Dictionary <string, Toolset> values       = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);
            string defaultToolsVersion = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);

            Assert.Equal(0, values.Count);
            Assert.Equal(null, defaultToolsVersion);
        }
Example #9
0
        public void ReadRegistry_DeletedKey()
        {
            DeleteTestRegistryKey();

            ToolsetReader reader = GetStandardRegistryReader();
            string        msbuildOverrideTasksPath    = null;
            string        defaultOverrideToolsVersion = null;
            Dictionary <string, Toolset> values       = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);

            reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);
            Assert.Empty(values);
        }
        public void GetDefaultOverrideToolsVersionFromRegistry_Basic()
        {
            _currentVersionRegistryKey.SetValue("DefaultOverrideToolsVersion", "15.0");

            ToolsetReader reader = GetStandardRegistryReader();
            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);

            string msbuildOverrideTasksPath    = null;
            string defaultOverrideToolsVersion = null;
            string defaultToolsVersion         = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);

            Assert.Equal("15.0", defaultOverrideToolsVersion);
        }
Example #11
0
        public void ReadRegistry_NoSubkeysOnlyValues()
        {
            _toolsVersionsRegistryKey.SetValue("Name1", "Value1");
            _toolsVersionsRegistryKey.SetValue("Name2", "Value2");

            ToolsetReader reader = GetStandardRegistryReader();
            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);
            string msbuildOverrideTasksPath;
            string defaultOverrideToolsVersion;
            string defaultToolsVersion = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);

            Assert.Empty(values);
            Assert.Null(defaultToolsVersion);
        }
        public void GetDefaultToolsVersionFromRegistry_NonStringData()
        {
            Assert.Throws <InvalidToolsetDefinitionException>(() =>
            {
                _currentVersionRegistryKey.SetValue("DefaultToolsVersion", new String[] { "2.0.xxxx.a", "2.0.xxxx.b" }, RegistryValueKind.MultiString);

                ToolsetReader reader               = GetStandardRegistryReader();
                string msbuildOverrideTasksPath    = null;
                string defaultOverrideToolsVersion = null;

                Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);
                string defaultToolsVersion          = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);
            }
                                                              );
        }
Example #13
0
        public void GetDefaultToolsVersionFromRegistry_Basic()
        {
            _currentVersionRegistryKey.SetValue("DefaultToolsVersion", "tv1");
            RegistryKey key1 = _toolsVersionsRegistryKey.CreateSubKey("tv1"); // Need matching tools version

            key1.SetValue("msbuildtoolspath", "c:\\xxx");

            ToolsetReader reader = GetStandardRegistryReader();
            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);
            string msbuildOverrideTasksPath;
            string defaultOverrideToolsVersion;
            string defaultToolsVersion = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);

            Assert.Equal("tv1", defaultToolsVersion);
        }
        public void ReadRegistry_NonStringData()
        {
            RegistryKey key1 = _toolsVersionsRegistryKey.CreateSubKey("tv1");

            key1.SetValue("msbuildtoolspath", "c:\\xxx");
            key1.SetValue("name1", "value1");
            RegistryKey key2 = _toolsVersionsRegistryKey.CreateSubKey("tv2");

            key2.SetValue("msbuildtoolspath", "c:\\xxx");
            key2.SetValue("name2", new String[] { "value2a", "value2b" }, RegistryValueKind.MultiString);

            ToolsetReader reader = GetStandardRegistryReader();
            string        msbuildOverrideTasksPath    = null;
            string        defaultOverrideToolsVersion = null;

            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);
            string defaultToolsVersion          = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);
        }
        public void ReadRegistry_OnlyOneSubkey()
        {
            RegistryKey key1 = _toolsVersionsRegistryKey.CreateSubKey("tv1");

            key1.SetValue("msbuildtoolspath", "c:\\xxx");

            ToolsetReader reader = GetStandardRegistryReader();
            string        msbuildOverrideTasksPath    = null;
            string        defaultOverrideToolsVersion = null;

            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);
            string defaultToolsVersion          = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);

            Assert.Equal(null, defaultToolsVersion);
            Assert.Equal(1, values.Count);
            Assert.Equal(0, values["tv1"].Properties.Count);
            Assert.Equal(0, String.Compare("c:\\xxx", values["tv1"].ToolsPath, StringComparison.OrdinalIgnoreCase));
        }
        public void GetOverrideTasksPathFromRegistry_Basic()
        {
            if (NativeMethodsShared.IsUnixLike)
            {
                return; // "Registry is not supported under Unix"
            }

            _currentVersionRegistryKey.SetValue("MsBuildOverrideTasksPath", "c:\\Foo");

            ToolsetReader reader = GetStandardRegistryReader();
            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);

            string msbuildOverrideTasksPath    = null;
            string defaultOverrideToolsVersion = null;
            string defaultToolsVersion         = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);

            Assert.Equal("c:\\Foo", msbuildOverrideTasksPath);
        }
Example #17
0
        public void ReadRegistry_OnlyOneSubkey()
        {
            string xdir = NativeMethodsShared.IsWindows ? "c:\\xxx" : "/xxx";

            RegistryKey key1 = _toolsVersionsRegistryKey.CreateSubKey("tv1");

            key1.SetValue("msbuildtoolspath", xdir);

            ToolsetReader reader = GetStandardRegistryReader();
            Dictionary <string, Toolset> values = new Dictionary <string, Toolset>(StringComparer.OrdinalIgnoreCase);
            string msbuildOverrideTasksPath;
            string defaultOverrideToolsVersion;
            string defaultToolsVersion = reader.ReadToolsets(values, new PropertyDictionary <ProjectPropertyInstance>(), new PropertyDictionary <ProjectPropertyInstance>(), false, out msbuildOverrideTasksPath, out defaultOverrideToolsVersion);

            Assert.Null(defaultToolsVersion);
            Assert.Single(values);
            Assert.Empty(values["tv1"].Properties);
            Assert.Equal(0, String.Compare(xdir, values["tv1"].ToolsPath, StringComparison.OrdinalIgnoreCase));
        }