Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell11
提交
16fae4fa
D
dragonwell11
项目概览
openanolis
/
dragonwell11
通知
7
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell11
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
16fae4fa
编写于
11月 28, 2014
作者:
I
iignatyev
浏览文件
操作
浏览文件
下载
差异文件
Merge
上级
5cbb6f7a
8c09032f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
162 addition
and
26 deletion
+162
-26
hotspot/test/testlibrary/com/oracle/java/testlibrary/Asserts.java
...test/testlibrary/com/oracle/java/testlibrary/Asserts.java
+16
-18
hotspot/test/testlibrary/com/oracle/java/testlibrary/Platform.java
...est/testlibrary/com/oracle/java/testlibrary/Platform.java
+12
-8
hotspot/test/testlibrary_tests/TestMutuallyExclusivePlatformPredicates.java
...ibrary_tests/TestMutuallyExclusivePlatformPredicates.java
+134
-0
未找到文件。
hotspot/test/testlibrary/com/oracle/java/testlibrary/Asserts.java
浏览文件 @
16fae4fa
...
...
@@ -68,8 +68,7 @@ public class Asserts {
* @see #assertLessThan(T, T, String)
*/
public
static
<
T
extends
Comparable
<
T
>>
void
assertLessThan
(
T
lhs
,
T
rhs
)
{
String
msg
=
"Expected that "
+
format
(
lhs
)
+
" < "
+
format
(
rhs
);
assertLessThan
(
lhs
,
rhs
,
msg
);
assertLessThan
(
lhs
,
rhs
,
null
);
}
/**
...
...
@@ -81,7 +80,7 @@ public class Asserts {
* @throws RuntimeException if the assertion isn't valid.
*/
public
static
<
T
extends
Comparable
<
T
>>
void
assertLessThan
(
T
lhs
,
T
rhs
,
String
msg
)
{
assertTrue
(
compare
(
lhs
,
rhs
,
msg
)
<
0
,
msg
);
assertTrue
(
compare
(
lhs
,
rhs
,
msg
)
<
0
,
getMessage
(
lhs
,
rhs
,
"<"
,
msg
)
);
}
/**
...
...
@@ -108,8 +107,7 @@ public class Asserts {
* @see #assertLessThanOrEqual(T, T, String)
*/
public
static
<
T
extends
Comparable
<
T
>>
void
assertLessThanOrEqual
(
T
lhs
,
T
rhs
)
{
String
msg
=
"Expected that "
+
format
(
lhs
)
+
" <= "
+
format
(
rhs
);
assertLessThanOrEqual
(
lhs
,
rhs
,
msg
);
assertLessThanOrEqual
(
lhs
,
rhs
,
null
);
}
/**
...
...
@@ -121,7 +119,7 @@ public class Asserts {
* @throws RuntimeException if the assertion isn't valid.
*/
public
static
<
T
extends
Comparable
<
T
>>
void
assertLessThanOrEqual
(
T
lhs
,
T
rhs
,
String
msg
)
{
assertTrue
(
compare
(
lhs
,
rhs
,
msg
)
<=
0
,
msg
);
assertTrue
(
compare
(
lhs
,
rhs
,
msg
)
<=
0
,
getMessage
(
lhs
,
rhs
,
"<="
,
msg
)
);
}
/**
...
...
@@ -148,8 +146,7 @@ public class Asserts {
* @see #assertEquals(T, T, String)
*/
public
static
void
assertEquals
(
Object
lhs
,
Object
rhs
)
{
String
msg
=
"Expected "
+
format
(
lhs
)
+
" to equal "
+
format
(
rhs
);
assertEquals
(
lhs
,
rhs
,
msg
);
assertEquals
(
lhs
,
rhs
,
null
);
}
/**
...
...
@@ -166,7 +163,7 @@ public class Asserts {
error
(
msg
);
}
}
else
{
assertTrue
(
lhs
.
equals
(
rhs
),
msg
);
assertTrue
(
lhs
.
equals
(
rhs
),
getMessage
(
lhs
,
rhs
,
"=="
,
msg
)
);
}
}
...
...
@@ -194,8 +191,7 @@ public class Asserts {
* @see #assertGreaterThanOrEqual(T, T, String)
*/
public
static
<
T
extends
Comparable
<
T
>>
void
assertGreaterThanOrEqual
(
T
lhs
,
T
rhs
)
{
String
msg
=
"Expected that "
+
format
(
lhs
)
+
" >= "
+
format
(
rhs
);
assertGreaterThanOrEqual
(
lhs
,
rhs
,
msg
);
assertGreaterThanOrEqual
(
lhs
,
rhs
,
null
);
}
/**
...
...
@@ -207,7 +203,7 @@ public class Asserts {
* @throws RuntimeException if the assertion isn't valid.
*/
public
static
<
T
extends
Comparable
<
T
>>
void
assertGreaterThanOrEqual
(
T
lhs
,
T
rhs
,
String
msg
)
{
assertTrue
(
compare
(
lhs
,
rhs
,
msg
)
>=
0
,
msg
);
assertTrue
(
compare
(
lhs
,
rhs
,
msg
)
>=
0
,
getMessage
(
lhs
,
rhs
,
">="
,
msg
)
);
}
/**
...
...
@@ -234,8 +230,7 @@ public class Asserts {
* @see #assertGreaterThan(T, T, String)
*/
public
static
<
T
extends
Comparable
<
T
>>
void
assertGreaterThan
(
T
lhs
,
T
rhs
)
{
String
msg
=
"Expected that "
+
format
(
lhs
)
+
" > "
+
format
(
rhs
);
assertGreaterThan
(
lhs
,
rhs
,
msg
);
assertGreaterThan
(
lhs
,
rhs
,
null
);
}
/**
...
...
@@ -247,7 +242,7 @@ public class Asserts {
* @throws RuntimeException if the assertion isn't valid.
*/
public
static
<
T
extends
Comparable
<
T
>>
void
assertGreaterThan
(
T
lhs
,
T
rhs
,
String
msg
)
{
assertTrue
(
compare
(
lhs
,
rhs
,
msg
)
>
0
,
msg
);
assertTrue
(
compare
(
lhs
,
rhs
,
msg
)
>
0
,
getMessage
(
lhs
,
rhs
,
">"
,
msg
)
);
}
/**
...
...
@@ -274,8 +269,7 @@ public class Asserts {
* @see #assertNotEquals(T, T, String)
*/
public
static
void
assertNotEquals
(
Object
lhs
,
Object
rhs
)
{
String
msg
=
"Expected "
+
format
(
lhs
)
+
" to not equal "
+
format
(
rhs
);
assertNotEquals
(
lhs
,
rhs
,
msg
);
assertNotEquals
(
lhs
,
rhs
,
null
);
}
/**
...
...
@@ -292,7 +286,7 @@ public class Asserts {
error
(
msg
);
}
}
else
{
assertFalse
(
lhs
.
equals
(
rhs
),
msg
);
assertFalse
(
lhs
.
equals
(
rhs
),
getMessage
(
lhs
,
rhs
,
"!="
,
msg
)
);
}
}
...
...
@@ -450,4 +444,8 @@ public class Asserts {
throw
new
RuntimeException
(
msg
);
}
private
static
String
getMessage
(
Object
lhs
,
Object
rhs
,
String
op
,
String
msg
)
{
return
(
msg
==
null
?
""
:
msg
+
" "
)
+
"(assert failed: "
+
format
(
lhs
)
+
" "
+
op
+
" "
+
format
(
rhs
)
+
")"
;
}
}
hotspot/test/testlibrary/com/oracle/java/testlibrary/Platform.java
浏览文件 @
16fae4fa
...
...
@@ -23,6 +23,8 @@
package
com.oracle.java.testlibrary
;
import
java.util.regex.Pattern
;
public
class
Platform
{
private
static
final
String
osName
=
System
.
getProperty
(
"os.name"
);
private
static
final
String
dataModel
=
System
.
getProperty
(
"sun.arch.data.model"
);
...
...
@@ -94,29 +96,31 @@ public class Platform {
// Returns true for sparc and sparcv9.
public
static
boolean
isSparc
()
{
return
isArch
(
"sparc"
);
return
isArch
(
"sparc
.*
"
);
}
public
static
boolean
isARM
()
{
return
isArch
(
"arm"
);
return
isArch
(
"arm
.*
"
);
}
public
static
boolean
isPPC
()
{
return
isArch
(
"ppc"
);
return
isArch
(
"ppc
.*
"
);
}
public
static
boolean
isX86
()
{
// On Linux it's 'i386', Windows 'x86'
return
(
isArch
(
"i386"
)
||
isArch
(
"x86"
)
);
// On Linux it's 'i386', Windows 'x86'
without '_64' suffix.
return
isArch
(
"(i386)|(x86(?!_64))"
);
}
public
static
boolean
isX64
()
{
// On OSX it's 'x86_64' and on other (Linux, Windows and Solaris) platforms it's 'amd64'
return
(
isArch
(
"amd64"
)
||
isArch
(
"x86_64"
)
);
return
isArch
(
"(amd64)|(x86_64)"
);
}
private
static
boolean
isArch
(
String
archname
)
{
return
osArch
.
toLowerCase
().
startsWith
(
archname
.
toLowerCase
());
private
static
boolean
isArch
(
String
archnameRE
)
{
return
Pattern
.
compile
(
archnameRE
,
Pattern
.
CASE_INSENSITIVE
)
.
matcher
(
osArch
)
.
matches
();
}
public
static
String
getOsArch
()
{
...
...
hotspot/test/testlibrary_tests/TestMutuallyExclusivePlatformPredicates.java
0 → 100644
浏览文件 @
16fae4fa
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import
com.oracle.java.testlibrary.Asserts
;
import
com.oracle.java.testlibrary.Platform
;
import
java.lang.reflect.InvocationTargetException
;
import
java.lang.reflect.Method
;
import
java.util.Arrays
;
import
java.util.Collections
;
import
java.util.EnumSet
;
import
java.util.HashSet
;
import
java.util.List
;
import
java.util.Set
;
/**
* @test
* @summary Verify that for each group of mutually exclusive predicates defined
* in com.oracle.java.testlibrary.Platform one and only one predicate
* evaluates to true.
* @library /testlibrary
* @run main TestMutuallyExclusivePlatformPredicates
*/
public
class
TestMutuallyExclusivePlatformPredicates
{
private
static
enum
MethodGroup
{
ARCH
(
"isARM"
,
"isPPC"
,
"isSparc"
,
"isX86"
,
"isX64"
),
BITNESS
(
"is32bit"
,
"is64bit"
),
OS
(
"isLinux"
,
"isSolaris"
,
"isWindows"
,
"isOSX"
),
VM_TYPE
(
"isClient"
,
"isServer"
,
"isGraal"
,
"isMinimal"
),
IGNORED
(
"isEmbedded"
,
"isDebugBuild"
);
public
final
List
<
String
>
methodNames
;
private
MethodGroup
(
String
...
methodNames
)
{
this
.
methodNames
=
Collections
.
unmodifiableList
(
Arrays
.
asList
(
methodNames
));
}
}
public
static
void
main
(
String
args
[])
{
EnumSet
<
MethodGroup
>
notIgnoredMethodGroups
=
EnumSet
.
complementOf
(
EnumSet
.
of
(
MethodGroup
.
IGNORED
));
notIgnoredMethodGroups
.
forEach
(
TestMutuallyExclusivePlatformPredicates:
:
verifyPredicates
);
TestMutuallyExclusivePlatformPredicates
.
verifyCoverage
();
}
/**
* Verifies that one and only one predicate method defined in
* {@link com.oracle.java.testlibrary.Platform}, whose name included into
* methodGroup will return {@code true}.
* @param methodGroup The group of methods that should be tested.
*/
private
static
void
verifyPredicates
(
MethodGroup
methodGroup
)
{
System
.
out
.
println
(
"Verifying method group: "
+
methodGroup
.
name
());
long
truePredicatesCount
=
methodGroup
.
methodNames
.
stream
()
.
filter
(
TestMutuallyExclusivePlatformPredicates
::
evaluatePredicate
)
.
count
();
Asserts
.
assertEQ
(
truePredicatesCount
,
1L
,
String
.
format
(
"Only one predicate from group %s should be evaluated to true "
+
"(Actually %d predicates were evaluated to true)."
,
methodGroup
.
name
(),
truePredicatesCount
));
}
/**
* Verifies that all predicates defined in
* {@link com.oracle.java.testlibrary.Platform} were either tested or
* explicitly ignored.
*/
private
static
void
verifyCoverage
()
{
Set
<
String
>
allMethods
=
new
HashSet
<>();
for
(
MethodGroup
group
:
MethodGroup
.
values
())
{
allMethods
.
addAll
(
group
.
methodNames
);
}
for
(
Method
m
:
Platform
.
class
.
getMethods
())
{
if
(
m
.
getParameterCount
()
==
0
&&
m
.
getReturnType
()
==
boolean
.
class
)
{
Asserts
.
assertTrue
(
allMethods
.
contains
(
m
.
getName
()),
"All Platform's methods with signature '():Z' should "
+
"be tested "
);
}
}
}
/**
* Evaluates predicate method with name {@code name} defined in
* {@link com.oracle.java.testlibrary.Platform}.
*
* @param name The name of a predicate to be evaluated.
* @return evaluated predicate's value.
* @throws java.lang.Error if predicate is not defined or could not be
* evaluated.
*/
private
static
boolean
evaluatePredicate
(
String
name
)
{
try
{
System
.
out
.
printf
(
"Trying to evaluate predicate with name %s%n"
,
name
);
boolean
value
=
(
Boolean
)
Platform
.
class
.
getMethod
(
name
).
invoke
(
null
);
System
.
out
.
printf
(
"Predicate evaluated to: %s%n"
,
value
);
return
value
;
}
catch
(
NoSuchMethodException
e
)
{
throw
new
Error
(
"Predicate with name "
+
name
+
" is not defined in "
+
Platform
.
class
.
getName
(),
e
);
}
catch
(
IllegalAccessException
|
InvocationTargetException
e
)
{
throw
new
Error
(
"Unable to evaluate predicate "
+
name
,
e
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录