[NUI] Rebase develnui (DevelNUI only patches --> master) (#3910)
[platform/core/csapi/tizenfx.git] / test / Tizen.NUI.Devel.Tests.Ubuntu / nunit.framework / Attributes / CategoryAttribute.cs
1 // ***********************************************************************
2 // Copyright (c) 2009 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 using NUnit.Framework.Interfaces;
31 using NUnit.Framework.Internal;
32
33 namespace NUnit.Framework
34 {
35     /// <summary>
36     /// Attribute used to apply a category to a test
37     /// </summary>
38     [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method|AttributeTargets.Assembly, AllowMultiple=true, Inherited=true)]
39     public class CategoryAttribute : NUnitAttribute, IApplyToTest
40     {
41         /// <summary>
42         /// The name of the category
43         /// </summary>
44         protected string categoryName;
45
46         /// <summary>
47         /// Construct attribute for a given category based on
48         /// a name. The name may not contain the characters ',',
49         /// '+', '-' or '!'. However, this is not checked in the
50         /// constructor since it would cause an error to arise at
51         /// as the test was loaded without giving a clear indication
52         /// of where the problem is located. The error is handled
53         /// in NUnitFramework.cs by marking the test as not
54         /// runnable.
55         /// </summary>
56         /// <param name="name">The name of the category</param>
57         public CategoryAttribute(string name)
58         {
59             this.categoryName = name.Trim();
60         }
61
62         /// <summary>
63         /// Protected constructor uses the Type name as the name
64         /// of the category.
65         /// </summary>
66         protected CategoryAttribute()
67         {
68             this.categoryName = this.GetType().Name;
69             if ( categoryName.EndsWith( "Attribute" ) )
70                 categoryName = categoryName.Substring( 0, categoryName.Length - 9 );
71         }
72
73         /// <summary>
74         /// The name of the category
75         /// </summary>
76         public string Name 
77         {
78             get { return categoryName; }
79         }
80
81         #region IApplyToTest Members
82
83         /// <summary>
84         /// Modifies a test by adding a category to it.
85         /// </summary>
86         /// <param name="test">The test to modify</param>
87         public void ApplyToTest(Test test)
88         {
89             test.Properties.Add(PropertyNames.Category, this.Name);
90
91             if (this.Name.IndexOfAny(new char[] { ',', '!', '+', '-' }) >= 0)
92             {
93                 test.RunState = RunState.NotRunnable;
94                 test.Properties.Set(PropertyNames.SkipReason, "Category name must not contain ',', '!', '+' or '-'");
95             }
96         }
97
98         #endregion
99     }
100 }