forked from npgsql/npgsql
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTestUtil.cs
More file actions
138 lines (123 loc) · 4.87 KB
/
TestUtil.cs
File metadata and controls
138 lines (123 loc) · 4.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#region License
// The PostgreSQL License
//
// Copyright (C) 2015 The Npgsql Development Team
//
// Permission to use, copy, modify, and distribute this software and its
// documentation for any purpose, without fee, and without a written
// agreement is hereby granted, provided that the above copyright notice
// and this paragraph and the following two paragraphs appear in all copies.
//
// IN NO EVENT SHALL THE NPGSQL DEVELOPMENT TEAM BE LIABLE TO ANY PARTY
// FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
// INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
// DOCUMENTATION, EVEN IF THE NPGSQL DEVELOPMENT TEAM HAS BEEN ADVISED OF
// THE POSSIBILITY OF SUCH DAMAGE.
//
// THE NPGSQL DEVELOPMENT TEAM SPECIFICALLY DISCLAIMS ANY WARRANTIES,
// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
// ON AN "AS IS" BASIS, AND THE NPGSQL DEVELOPMENT TEAM HAS NO OBLIGATIONS
// TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
#endregion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
namespace Npgsql.Tests
{
public static class TestUtil
{
public static bool IsOnBuildServer {
get {
return Environment.GetEnvironmentVariable("TEAMCITY_VERSION") != null;
}
}
/// <summary>
/// Calls Assert.Ignore() unless we're on the build server, in which case calls
/// Assert.Fail(). We don't to miss any regressions just because something was misconfigured
/// at the build server and caused a test to be inconclusive.
/// </summary>
public static void IgnoreExceptOnBuildServer(string message)
{
if (IsOnBuildServer)
Assert.Fail(message);
else
Assert.Ignore(message);
}
public static void IgnoreExceptOnBuildServer(string message, params object[] args)
{
IgnoreExceptOnBuildServer(String.Format(message, args));
}
}
/// <summary>
/// Semantic attribute that points to an issue linked with this test (e.g. this
/// test reproduces the issue)
/// </summary>
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class IssueLink : Attribute
{
public string LinkAddress { get; private set; }
public IssueLink(string linkAddress)
{
LinkAddress = linkAddress;
}
}
/// <summary>
/// Causes the test to be ignored on mono
/// </summary>
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = false)]
public class MonoIgnore : Attribute, ITestAction
{
readonly string _ignoreText;
public MonoIgnore(string ignoreText = null) { _ignoreText = ignoreText; }
public void BeforeTest(TestDetails testDetails)
{
if (Type.GetType("Mono.Runtime") != null)
{
var msg = "Ignored on mono";
if (_ignoreText != null)
msg += ": " + _ignoreText;
Assert.Ignore(msg);
}
}
public void AfterTest(TestDetails testDetails) { }
public ActionTargets Targets { get { return ActionTargets.Test; } }
}
/// <summary>
/// Causes the test to be ignored if the Postgresql backend version is less than the given one.
/// </summary>
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = false)]
public class MinPgVersion : Attribute, ITestAction
{
readonly Version _minVersion;
readonly string _ignoreText;
public MinPgVersion(int major, int minor, int build, string ignoreText = null)
{
_minVersion = new Version(major, minor, build);
_ignoreText = ignoreText;
}
public void BeforeTest(TestDetails testDetails)
{
var asTestBase = testDetails.Fixture as TestBase;
if (asTestBase == null)
throw new Exception("[MinPgsqlVersion] can only be used in fixtures inheriting from TestBase");
if (asTestBase.Conn.PostgreSqlVersion < _minVersion)
{
var msg = String.Format("Postgresql backend version {0} is less than the required {1}",
asTestBase.Conn.PostgreSqlVersion, _minVersion);
if (_ignoreText != null)
msg += ": " + _ignoreText;
Assert.Ignore(msg);
}
}
public void AfterTest(TestDetails testDetails) { }
public ActionTargets Targets { get { return ActionTargets.Test; } }
}
public enum PrepareOrNot
{
Prepared,
NotPrepared
}
}