public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { if (writer == null) { throw new ArgumentNullException(nameof(writer)); } if (!(value is SuppressionStates)) { writer.WriteValue(value); return; } string flagsEnumValue = value.ToString(); string[] tokens = flagsEnumValue.Split(','); for (int i = 0; i < tokens.Length; i++) { tokens[i] = EnumConverter.ConvertToCamelCase(tokens[i].Trim()); } writer.WriteRawValue("[\"" + String.Join("\",\"", tokens) + "\"]"); }
public void EnumConverter_ConvertToCamelCase() { Assert.Equal("m", EnumConverter.ConvertToCamelCase("M")); Assert.Equal("md", EnumConverter.ConvertToCamelCase("MD")); Assert.Equal("md5", EnumConverter.ConvertToCamelCase("MD5")); Assert.Equal("mdFoo", EnumConverter.ConvertToCamelCase("MDFoo")); Assert.Equal("mfoo", EnumConverter.ConvertToCamelCase("Mfoo")); // NOTE: our heuristics for identifying two letter terms that // require casing as a group are necessarily limited to our // specific cases. Doing a reasonable job of this requires // maintaining a dictionary of two letter words to distinguish // them from two letter acronyms (which are cased as a group). // Even with a dictionary, there is overlap, such as with // Io, a moon of jupiter, and IO. Assert.Equal("meToo", EnumConverter.ConvertToCamelCase("METoo")); Assert.Equal("meToo", EnumConverter.ConvertToCamelCase("MeToo")); }
public void AnnotatedCodeLocationKind_AllMembers() { var testTuples = new List <Tuple <AnnotatedCodeLocationKind, string> >(); foreach (string name in Enum.GetNames(typeof(AnnotatedCodeLocationKind))) { var kind = (AnnotatedCodeLocationKind)Enum.Parse(typeof(AnnotatedCodeLocationKind), name); if (kind == 0) { continue; } string serializedValue = EnumConverter.ConvertToCamelCase(name); testTuples.Add(new Tuple <AnnotatedCodeLocationKind, string>(kind, serializedValue)); } foreach (var testTuple in testTuples) { string expected = @"{ ""$schema"": """ + SarifSchemaUri + @""", ""version"": """ + SarifFormatVersion + @""", ""runs"": [ { ""tool"": { ""name"": null }, ""results"": [ { ""codeFlows"": [ { ""locations"": [ { ""physicalLocation"": { ""uri"": ""file:///c:/test.c"" }, ""kind"": """ + testTuple.Item2 + @""" } ] } ] } ] } ] }"; string actual = GetJson(uut => { var run = new Run(); uut.Initialize(id: null, automationId: null); uut.WriteTool(DefaultTool); var result = new Result { CodeFlows = new CodeFlow[] { new CodeFlow { Locations = new AnnotatedCodeLocation[] { new AnnotatedCodeLocation { PhysicalLocation = new PhysicalLocation { Uri = new Uri(@"c:\test.c", UriKind.Absolute), }, Kind = testTuple.Item1 } } } } }; uut.WriteResults(new[] { result }); }); Assert.AreEqual(expected, actual); var sarifLog = JsonConvert.DeserializeObject <SarifLog>(actual); Assert.AreEqual(testTuple.Item1, sarifLog.Runs[0].Results[0].CodeFlows[0].Locations[0].Kind); } }