/// <summary>
        /// Return a list of profiles for the Windows Terminal
        /// </summary>
        /// <param name="terminal">Windows Terminal package</param>
        /// <param name="settingsJson">Content of the settings JSON file of the Terminal</param>
        public static List <TerminalProfile> ParseSettings(TerminalPackage terminal, string settingsJson)
        {
            var profiles = new List <TerminalProfile>();

            var options = new JsonDocumentOptions
            {
                CommentHandling = JsonCommentHandling.Skip,
            };

            var json = JsonDocument.Parse(settingsJson, options);

            json.RootElement.TryGetProperty("profiles", out JsonElement profilesElement);
            if (profilesElement.ValueKind != JsonValueKind.Object)
            {
                return(profiles);
            }

            profilesElement.TryGetProperty("list", out JsonElement profilesList);
            if (profilesList.ValueKind != JsonValueKind.Array)
            {
                return(profiles);
            }

            foreach (var profile in profilesList.EnumerateArray())
            {
                profiles.Add(ParseProfile(terminal, profile));
            }

            return(profiles);
        }
Example #2
0
        public void ParseSettingsTest(string file)
        {
            var terminal = new TerminalPackage(string.Empty, new Version(), string.Empty, string.Empty, string.Empty);

            var settingsPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, file);
            var settings     = File.ReadAllText(settingsPath);
            var profiles     = TerminalHelper.ParseSettings(terminal, settings);

            Assert.AreEqual(profiles.Count, 4);
        }
Example #3
0
        public void ParseProfilesTest(string json, string identifier, string name, bool hidden)
        {
            var profileElement = JsonDocument.Parse(json).RootElement;
            var terminal       = new TerminalPackage(string.Empty, new Version(), string.Empty, string.Empty, string.Empty);
            var profile        = TerminalHelper.ParseProfile(terminal, profileElement);

            var expectedIdentifier = identifier != null ? new Guid(identifier) : null as Guid?;

            Assert.AreEqual(profile.Terminal, terminal);
            Assert.AreEqual(profile.Identifier, expectedIdentifier);
            Assert.AreEqual(profile.Name, name);
            Assert.AreEqual(profile.Hidden, hidden);
        }
Example #4
0
        /// <summary>
        /// Return a profile for the Windows Terminal
        /// </summary>
        /// <param name="terminal">Windows Terminal package</param>
        /// <param name="profileElement">Profile from the settings JSON file</param>
        public static TerminalProfile ParseProfile(TerminalPackage terminal, JsonElement profileElement)
        {
            profileElement.TryGetProperty("name", out JsonElement nameElement);
            var name = nameElement.ValueKind == JsonValueKind.String ? nameElement.GetString() : null;

            profileElement.TryGetProperty("hidden", out JsonElement hiddenElement);
            var hidden = (hiddenElement.ValueKind == JsonValueKind.False || hiddenElement.ValueKind == JsonValueKind.True) && hiddenElement.GetBoolean();

            profileElement.TryGetProperty("guid", out JsonElement guidElement);
            var guid = guidElement.ValueKind == JsonValueKind.String ? Guid.Parse(guidElement.GetString()) : null as Guid?;

            return(new TerminalProfile(terminal, name, guid, hidden));
        }