PageRenderTime 45ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/src/tests/Attributes/ValueListAttributeFixture.cs

https://github.com/sflanker/commandline
C# | 102 lines | 65 code | 11 blank | 26 comment | 0 complexity | 76421ac31a1a70c3c74c6afefd81e611 MD5 | raw file
Possible License(s): Apache-2.0
  1. #region License
  2. //
  3. // Command Line Library: ValueListAttributeFixture.cs
  4. //
  5. // Author:
  6. // Giacomo Stelluti Scala (gsscoder@gmail.com)
  7. //
  8. // Copyright (C) 2005 - 2013 Giacomo Stelluti Scala
  9. //
  10. // Permission is hereby granted, free of charge, to any person obtaining a copy
  11. // of this software and associated documentation files (the "Software"), to deal
  12. // in the Software without restriction, including without limitation the rights
  13. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  14. // copies of the Software, and to permit persons to whom the Software is
  15. // furnished to do so, subject to the following conditions:
  16. //
  17. // The above copyright notice and this permission notice shall be included in
  18. // all copies or substantial portions of the Software.
  19. //
  20. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  21. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  22. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  23. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  24. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  25. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  26. // THE SOFTWARE.
  27. //
  28. #endregion
  29. #region Using Directives
  30. using System;
  31. using System.Collections.Generic;
  32. using System.ComponentModel;
  33. using Xunit;
  34. using FluentAssertions;
  35. #endregion
  36. namespace CommandLine.Tests
  37. {
  38. public class ValueListAttributeFixture : BaseFixture
  39. {
  40. #region Mock Objects
  41. private class MockSpecializedList : List<string>
  42. {
  43. }
  44. private class MockOptions
  45. {
  46. [ValueList(typeof(List<string>))]
  47. public IList<string> Values { get; set; }
  48. }
  49. #endregion
  50. [Fact]
  51. public void Will_throw_exception_if_concrete_type_is_null()
  52. {
  53. Assert.Throws<ArgumentNullException>(
  54. () => new ValueListAttribute(null));
  55. }
  56. [Fact]
  57. public void Will_throw_exception_if_concrete_type_is_incompatible()
  58. {
  59. Assert.Throws<ParserException>(
  60. () => new ValueListAttribute(new List<object>().GetType()));
  61. }
  62. [Fact]
  63. public void Concrete_type_is_generic_list_of_string()
  64. {
  65. new ValueListAttribute(new List<string>().GetType());
  66. }
  67. [Fact]
  68. public void Concrete_type_is_generic_list_of_string_sub_type()
  69. {
  70. new ValueListAttribute(new MockSpecializedList().GetType());
  71. }
  72. [Fact]
  73. public void Get_generic_list_of_string_interface_reference()
  74. {
  75. var options = new MockOptions();
  76. IList<string> values = ValueListAttribute.GetReference(options);
  77. values.Should().NotBeNull();
  78. values.GetType().Should().Be(typeof(List<string>));
  79. }
  80. [Fact]
  81. public void Use_generic_list_of_string_interface_reference()
  82. {
  83. var options = new MockOptions();
  84. var values = ValueListAttribute.GetReference(options);
  85. values.Add("value0");
  86. values.Add("value1");
  87. values.Add("value2");
  88. base.ElementsShouldBeEqual(new string[] { "value0", "value1", "value2" }, options.Values);
  89. }
  90. }
  91. }