public ProcessResult Process(ElementNode node, ProcessContext context = null, Dictionary <string, object> settings = null) { EnsureArg.IsNotNull(node); EnsureArg.IsNotNull(context?.VisitedNodes); EnsureArg.IsNotNull(settings); var result = new ProcessResult(); ElementNode valueNode = null; if (s_primitiveValueTypeNames.Contains(node.InstanceType, StringComparer.InvariantCultureIgnoreCase)) { valueNode = node; } else if (s_quantityTypeNames.Contains(node.InstanceType, StringComparer.InvariantCultureIgnoreCase)) { valueNode = node.Children(Constants.ValueNodeName).Cast <ElementNode>().FirstOrDefault(); } // Perturb will not happen if value node is empty or visited. if (valueNode?.Value == null || context.VisitedNodes.Contains(valueNode)) { return(result); } var perturbSetting = PerturbSetting.CreateFromRuleSettings(settings); AddNoise(valueNode, perturbSetting); context.VisitedNodes.UnionWith(node.Descendants().Cast <ElementNode>()); result.AddProcessRecord(AnonymizationOperations.Perturb, node); return(result); }
public void GivenAPerturbSetting_WhenCreate_SettingPropertiesShouldBeParsedCorrectly(Dictionary <string, object> config, double expectedSpan, double expectedRoundTo, PerturbRangeType expectedRangeType) { var perturbSetting = PerturbSetting.CreateFromRuleSettings(config); Assert.Equal(expectedSpan, perturbSetting.Span); Assert.Equal(expectedRoundTo, perturbSetting.RoundTo); Assert.Equal(expectedRangeType, perturbSetting.RangeType); }