• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

KSP-CKAN / CKAN / 17444393270

03 Sep 2025 07:47PM UTC coverage: 69.005% (+0.5%) from 68.502%
17444393270

Pull #4429

github

web-flow
Merge 875e7cd1a into 2aea1b16e
Pull Request #4429: Add tests for ModuleInstaller

4884 of 7393 branches covered (66.06%)

Branch coverage included in aggregate %.

28 of 49 new or added lines in 3 files covered. (57.14%)

120 existing lines in 3 files now uncovered.

10420 of 14785 relevant lines covered (70.48%)

1.44 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

85.71
/Core/Extensions/YamlExtensions.cs
1
using System.IO;
2
using System.Linq;
3

4
using YamlDotNet.Core;
5
using YamlDotNet.RepresentationModel;
6
using Newtonsoft.Json.Linq;
7

8
namespace CKAN.Extensions
9
{
10
    public static class YamlExtensions
11
    {
12
        public static YamlMappingNode[] Parse(string input)
13
        {
2✔
14
            return Parse(new StringReader(input));
2✔
15
        }
2✔
16

17
        public static YamlMappingNode[] Parse(TextReader input)
18
        {
2✔
19
            var stream = new YamlStream();
2✔
20
            stream.Load(input);
2✔
21
            return stream.Documents.Select(doc => doc?.RootNode as YamlMappingNode)
2✔
22
                                   .OfType<YamlMappingNode>()
23
                                   .ToArray();
24
        }
2✔
25

26
        /// <summary>
27
        /// Convert a YAML object to a JSON object
28
        /// </summary>
29
        /// <param name="yaml">The input object</param>
30
        /// <returns>
31
        /// A JObject representation of the input data
32
        /// </returns>
33
        public static JObject ToJObject(this YamlMappingNode yaml)
34
        {
2✔
35
            var jobj = new JObject();
2✔
36
            foreach (var kvp in yaml)
5✔
37
            {
2✔
38
                if ((string?)kvp.Key is string k)
2!
39
                {
2✔
40
                    switch (kvp.Value)
2!
41
                    {
42
                        case YamlMappingNode obj:
43
                            jobj.Add(k, obj.ToJObject());
2✔
44
                            break;
2✔
45
                        case YamlSequenceNode array:
46
                            jobj.Add(k, array.ToJarray());
2✔
47
                            break;
2✔
48
                        case YamlScalarNode scalar:
49
                            jobj.Add(k, scalar.ToJValue());
2✔
50
                            break;
2✔
51
                    }
52
                }
2✔
53
            }
2✔
54
            return jobj;
2✔
55
        }
2✔
56

57
        private static JArray ToJarray(this YamlSequenceNode yaml)
58
        {
2✔
59
            var jarr = new JArray();
2✔
60
            foreach (var elt in yaml)
5✔
61
            {
2✔
62
                switch (elt)
2!
63
                {
64
                    case YamlMappingNode obj:
65
                        jarr.Add(obj.ToJObject());
2✔
66
                        break;
2✔
67
                    case YamlSequenceNode array:
UNCOV
68
                        jarr.Add(array.ToJarray());
×
UNCOV
69
                        break;
×
70
                    case YamlScalarNode scalar:
71
                        jarr.Add(scalar.ToJValue());
2✔
72
                        break;
2✔
73
                }
74
            }
2✔
75
            return jarr;
2✔
76
        }
2✔
77

78
        private static JValue ToJValue(this YamlScalarNode yaml)
79
        {
2✔
80
            switch (yaml.Value)
2!
81
            {
82
                case "null":  return JValue.CreateNull();
×
UNCOV
83
                case "true":  return new JValue(true);
×
UNCOV
84
                case "false": return new JValue(false);
×
85
                // Convert unquoted integers to int type
86
                default:      return yaml.Style == ScalarStyle.Plain
2✔
87
                                     && int.TryParse(yaml.Value, out int intVal)
88
                                         ? new JValue(intVal)
89
                                         : new JValue(yaml.Value);
90
            }
91
        }
2✔
92
    }
93
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc