public void convert_back_executes_steps_in_reverse_order() { var converter = new MultiConverterGroup(); var values = new object[] { "abc", 123 }; var targetTypes = new Type[] { }; var parameter = "parameter"; var cultureInfo = new CultureInfo("de-DE"); var converterMock3 = new Mock <IMultiValueConverter>(); converterMock3.Setup(x => x.ConvertBack("final converted value", targetTypes, parameter, cultureInfo)).Returns(new object[] { "converted value1", "converted value2" }); var converterMock1 = new Mock <IMultiValueConverter>(); converterMock1.Setup(x => x.ConvertBack("converted value1", targetTypes, parameter, cultureInfo)).Returns(values); var converterMock2 = new Mock <IMultiValueConverter>(); converterMock2.Setup(x => x.ConvertBack("converted value2", targetTypes, parameter, cultureInfo)).Throws <Exception>(); var step1 = new MultiConverterGroupStep(); step1.Converters.Add(converterMock1.Object); step1.Converters.Add(converterMock2.Object); var step2 = new MultiConverterGroupStep(); step2.Converters.Add(converterMock3.Object); converter.Steps.Add(step1); converter.Steps.Add(step2); Assert.Equal(values, converter.ConvertBack("final converted value", targetTypes, parameter, cultureInfo)); }
public void convert_executes_steps_in_order() { var converter = new MultiConverterGroup(); var values = new object[] { "abc", 123 }; var targetType = typeof(int); var parameter = "parameter"; var cultureInfo = new CultureInfo("de-DE"); var converterMock1 = new Mock <IMultiValueConverter>(); converterMock1.Setup(x => x.Convert(values, targetType, parameter, cultureInfo)).Returns("converted value1"); var converterMock2 = new Mock <IMultiValueConverter>(); converterMock2.Setup(x => x.Convert(values, targetType, parameter, cultureInfo)).Returns("converted value2"); var converterMock3 = new Mock <IMultiValueConverter>(); converterMock3.Setup(x => x.Convert(new object[] { "converted value1", "converted value2" }, targetType, parameter, cultureInfo)).Returns("final converted value"); var step1 = new MultiConverterGroupStep(); step1.Converters.Add(converterMock1.Object); step1.Converters.Add(converterMock2.Object); var step2 = new MultiConverterGroupStep(); step2.Converters.Add(converterMock3.Object); converter.Steps.Add(step1); converter.Steps.Add(step2); Assert.Equal("final converted value", converter.Convert(values, targetType, parameter, cultureInfo)); }
public void convert_back_throws_if_number_of_values_produced_by_step_does_not_match_number_of_converters_in_next_step() { var converter = new MultiConverterGroup(); var values = new object[] { "abc", 123 }; var targetTypes = new Type[] { }; var parameter = "parameter"; var cultureInfo = new CultureInfo("de-DE"); var converterMock3 = new Mock <IMultiValueConverter>(); converterMock3.Setup(x => x.ConvertBack("final converted value", targetTypes, parameter, cultureInfo)).Returns(new object[] { "converted value1", "converted value2", "too", "many", "values" }); var converterMock1 = new Mock <IMultiValueConverter>(); converterMock1.Setup(x => x.ConvertBack("converted value1", targetTypes, parameter, cultureInfo)).Returns(values); var converterMock2 = new Mock <IMultiValueConverter>(); converterMock2.Setup(x => x.ConvertBack("converted value2", targetTypes, parameter, cultureInfo)).Throws <Exception>(); var step1 = new MultiConverterGroupStep(); step1.Converters.Add(converterMock1.Object); step1.Converters.Add(converterMock2.Object); var step2 = new MultiConverterGroupStep(); step2.Converters.Add(converterMock3.Object); converter.Steps.Add(step1); converter.Steps.Add(step2); var ex = Assert.Throws <InvalidOperationException>(() => converter.ConvertBack("final converted value", targetTypes, parameter, cultureInfo)); Assert.Equal("Step with index 1 produced 5 values but the subsequent step (index 0) requires 2 values.", ex.Message); }
public void steps_allows_steps_to_be_added() { var converter = new MultiConverterGroup(); var step1 = new MultiConverterGroupStep(); var step2 = new MultiConverterGroupStep(); var step3 = new MultiConverterGroupStep(); converter.Steps.Add(step1); converter.Steps.Add(step2); converter.Steps.Add(step3); Assert.Equal(3, converter.Steps.Count); Assert.True(converter.Steps.Contains(step1)); Assert.True(converter.Steps.Contains(step2)); Assert.True(converter.Steps.Contains(step3)); }
public void convert_throws_if_last_step_has_more_than_one_converter_in_it() { var converter = new MultiConverterGroup(); var step1 = new MultiConverterGroupStep(); var step2 = new MultiConverterGroupStep(); step1.Converters.Add(new Mock<IMultiValueConverter>().Object); step1.Converters.Add(new Mock<IMultiValueConverter>().Object); step2.Converters.Add(new Mock<IMultiValueConverter>().Object); step2.Converters.Add(new Mock<IMultiValueConverter>().Object); converter.Steps.Add(step1); converter.Steps.Add(step2); var ex = Assert.Throws<InvalidOperationException>(() => converter.Convert(new object[] { }, null, null, null)); Assert.Equal("The final step in a MultiConverterGroup must have a single converter added to it.", ex.Message); }
public void convert_throws_if_last_step_has_more_than_one_converter_in_it() { var converter = new MultiConverterGroup(); var step1 = new MultiConverterGroupStep(); var step2 = new MultiConverterGroupStep(); step1.Converters.Add(new Mock <IMultiValueConverter>().Object); step1.Converters.Add(new Mock <IMultiValueConverter>().Object); step2.Converters.Add(new Mock <IMultiValueConverter>().Object); step2.Converters.Add(new Mock <IMultiValueConverter>().Object); converter.Steps.Add(step1); converter.Steps.Add(step2); var ex = Assert.Throws <InvalidOperationException>(() => converter.Convert(new object[] { }, null, null, null)); Assert.Equal("The final step in a MultiConverterGroup must have a single converter added to it.", ex.Message); }
public void convert_back_throws_if_any_step_has_no_converter_in_it() { var converter = new MultiConverterGroup(); var step1 = new MultiConverterGroupStep(); var step2 = new MultiConverterGroupStep(); var step3 = new MultiConverterGroupStep(); step1.Converters.Add(new Mock <IMultiValueConverter>().Object); step1.Converters.Add(new Mock <IMultiValueConverter>().Object); step3.Converters.Add(new Mock <IMultiValueConverter>().Object); converter.Steps.Add(step1); converter.Steps.Add(step2); converter.Steps.Add(step3); var ex = Assert.Throws <InvalidOperationException>(() => converter.ConvertBack(new object[] { }, null, null, null)); Assert.Equal("Each step in a MultiConverterGroup must have at least one converter added to it.", ex.Message); }
public void convert_executes_steps_in_order() { var converter = new MultiConverterGroup(); var values = new object[] { "abc", 123 }; var targetType = typeof(int); var parameter = "parameter"; var cultureInfo = new CultureInfo("de-DE"); var converterMock1 = new Mock<IMultiValueConverter>(); converterMock1.Setup(x => x.Convert(values, targetType, parameter, cultureInfo)).Returns("converted value1"); var converterMock2 = new Mock<IMultiValueConverter>(); converterMock2.Setup(x => x.Convert(values, targetType, parameter, cultureInfo)).Returns("converted value2"); var converterMock3 = new Mock<IMultiValueConverter>(); converterMock3.Setup(x => x.Convert(new object[] { "converted value1", "converted value2" }, targetType, parameter, cultureInfo)).Returns("final converted value"); var step1 = new MultiConverterGroupStep(); step1.Converters.Add(converterMock1.Object); step1.Converters.Add(converterMock2.Object); var step2 = new MultiConverterGroupStep(); step2.Converters.Add(converterMock3.Object); converter.Steps.Add(step1); converter.Steps.Add(step2); Assert.Equal("final converted value", converter.Convert(values, targetType, parameter, cultureInfo)); }
public void convert_returns_unset_value_if_there_are_no_steps() { var converter = new MultiConverterGroup(); Assert.Equal(DependencyProperty.UnsetValue, converter.Convert(new object[] { }, null, null, null)); }
public void convert_back_executes_steps_in_reverse_order() { var converter = new MultiConverterGroup(); var values = new object[] { "abc", 123 }; var targetTypes = new Type[] { }; var parameter = "parameter"; var cultureInfo = new CultureInfo("de-DE"); var converterMock3 = new Mock<IMultiValueConverter>(); converterMock3.Setup(x => x.ConvertBack("final converted value", targetTypes, parameter, cultureInfo)).Returns(new object[] { "converted value1", "converted value2" }); var converterMock1 = new Mock<IMultiValueConverter>(); converterMock1.Setup(x => x.ConvertBack("converted value1", targetTypes, parameter, cultureInfo)).Returns(values); var converterMock2 = new Mock<IMultiValueConverter>(); converterMock2.Setup(x => x.ConvertBack("converted value2", targetTypes, parameter, cultureInfo)).Throws<Exception>(); var step1 = new MultiConverterGroupStep(); step1.Converters.Add(converterMock1.Object); step1.Converters.Add(converterMock2.Object); var step2 = new MultiConverterGroupStep(); step2.Converters.Add(converterMock3.Object); converter.Steps.Add(step1); converter.Steps.Add(step2); Assert.Equal(values, converter.ConvertBack("final converted value", targetTypes, parameter, cultureInfo)); }
public void convert_back_throws_if_number_of_values_produced_by_step_does_not_match_number_of_converters_in_next_step() { var converter = new MultiConverterGroup(); var values = new object[] { "abc", 123 }; var targetTypes = new Type[] { }; var parameter = "parameter"; var cultureInfo = new CultureInfo("de-DE"); var converterMock3 = new Mock<IMultiValueConverter>(); converterMock3.Setup(x => x.ConvertBack("final converted value", targetTypes, parameter, cultureInfo)).Returns(new object[] { "converted value1", "converted value2", "too", "many", "values" }); var converterMock1 = new Mock<IMultiValueConverter>(); converterMock1.Setup(x => x.ConvertBack("converted value1", targetTypes, parameter, cultureInfo)).Returns(values); var converterMock2 = new Mock<IMultiValueConverter>(); converterMock2.Setup(x => x.ConvertBack("converted value2", targetTypes, parameter, cultureInfo)).Throws<Exception>(); var step1 = new MultiConverterGroupStep(); step1.Converters.Add(converterMock1.Object); step1.Converters.Add(converterMock2.Object); var step2 = new MultiConverterGroupStep(); step2.Converters.Add(converterMock3.Object); converter.Steps.Add(step1); converter.Steps.Add(step2); var ex = Assert.Throws<InvalidOperationException>(() => converter.ConvertBack("final converted value", targetTypes, parameter, cultureInfo)); Assert.Equal("Step with index 1 produced 5 values but the subsequent step (index 0) requires 2 values.", ex.Message); }
public void convert_back_throws_if_any_step_has_no_converter_in_it() { var converter = new MultiConverterGroup(); var step1 = new MultiConverterGroupStep(); var step2 = new MultiConverterGroupStep(); var step3 = new MultiConverterGroupStep(); step1.Converters.Add(new Mock<IMultiValueConverter>().Object); step1.Converters.Add(new Mock<IMultiValueConverter>().Object); step3.Converters.Add(new Mock<IMultiValueConverter>().Object); converter.Steps.Add(step1); converter.Steps.Add(step2); converter.Steps.Add(step3); var ex = Assert.Throws<InvalidOperationException>(() => converter.ConvertBack(new object[] { }, null, null, null)); Assert.Equal("Each step in a MultiConverterGroup must have at least one converter added to it.", ex.Message); }
public void ctor_results_in_empty_steps_collection() { var converter = new MultiConverterGroup(); Assert.Empty(converter.Steps); }
public void convert_back_returns_null_if_there_are_no_steps() { var converter = new MultiConverterGroup(); Assert.Null(converter.ConvertBack(new object[] { }, null, null, null)); }