[NUI] Rebase develnui (DevelNUI only patches --> master) (#3910)
[platform/core/csapi/tizenfx.git] / test / Tizen.NUI.Devel.Tests.Ubuntu / nunit.framework / Constraints / StringConstraint.cs
1 // ***********************************************************************
2 // Copyright (c) 2007 Charlie Poole
3 //
4 // Permission is hereby granted, free of charge, to any person obtaining
5 // a copy of this software and associated documentation files (the
6 // "Software"), to deal in the Software without restriction, including
7 // without limitation the rights to use, copy, modify, merge, publish,
8 // distribute, sublicense, and/or sell copies of the Software, and to
9 // permit persons to whom the Software is furnished to do so, subject to
10 // the following conditions:
11 // 
12 // The above copyright notice and this permission notice shall be
13 // included in all copies or substantial portions of the Software.
14 // 
15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 // ***********************************************************************
23 #define PORTABLE
24 #define TIZEN
25 #define NUNIT_FRAMEWORK
26 #define NUNITLITE
27 #define NET_4_5
28 #define PARALLEL
29 using System;
30
31 namespace NUnit.Framework.Constraints
32 {
33     /// <summary>
34     /// StringConstraint is the abstract base for constraints
35     /// that operate on strings. It supports the IgnoreCase
36     /// modifier for string operations.
37     /// </summary>
38     public abstract class StringConstraint : Constraint
39     {
40         /// <summary>
41         /// The expected value
42         /// </summary>
43         protected string expected;
44
45         /// <summary>
46         /// Indicates whether tests should be case-insensitive
47         /// </summary>
48         protected bool caseInsensitive;
49
50         /// <summary>
51         /// Description of this constraint
52         /// </summary>
53         protected string descriptionText;
54
55         /// <summary>
56         /// The Description of what this constraint tests, for
57         /// use in messages and in the ConstraintResult.
58         /// </summary>
59         public override string Description
60         {
61             get 
62             { 
63                 string desc = string.Format("{0} {1}", descriptionText, MsgUtils.FormatValue(expected));
64                 if (caseInsensitive)
65                     desc += ", ignoring case";
66                 return desc;
67             }
68         }
69
70         /// <summary>
71         /// Constructs a StringConstraint without an expected value
72         /// </summary>
73         protected StringConstraint() { }
74
75         /// <summary>
76         /// Constructs a StringConstraint given an expected value
77         /// </summary>
78         /// <param name="expected">The expected value</param>
79         protected StringConstraint(string expected)
80             : base(expected)
81         {
82             this.expected = expected;
83         }
84
85         /// <summary>
86         /// Modify the constraint to ignore case in matching.
87         /// </summary>
88         public StringConstraint IgnoreCase
89         {
90             get { caseInsensitive = true; return this; }
91         }
92
93         /// <summary>
94         /// Test whether the constraint is satisfied by a given value
95         /// </summary>
96         /// <param name="actual">The value to be tested</param>
97         /// <returns>True for success, false for failure</returns>
98         public override ConstraintResult ApplyTo<TActual>(TActual actual)
99         {
100             string actualAsString = actual as string;
101             if (actual != null && actualAsString == null)
102                 throw new ArgumentException("Actual value must be a string", "actual");
103
104             return new ConstraintResult(this, actual, Matches(actualAsString));
105         }
106
107         /// <summary>
108         /// Test whether the constraint is satisfied by a given string
109         /// </summary>
110         /// <param name="actual">The string to be tested</param>
111         /// <returns>True for success, false for failure</returns>
112         protected abstract bool Matches(string actual);
113     }
114 }