Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
dragonwell8_hotspot
提交
2dcab4bb
D
dragonwell8_hotspot
项目概览
openanolis
/
dragonwell8_hotspot
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
dragonwell8_hotspot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
2dcab4bb
编写于
4月 30, 2015
作者:
B
bmoloden
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
8058846: c.o.j.t.Platform::isX86 and isX64 may simultaneously return true
Reviewed-by: kvn
上级
138a1f59
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
147 addition
and
8 deletion
+147
-8
test/testlibrary/com/oracle/java/testlibrary/Platform.java
test/testlibrary/com/oracle/java/testlibrary/Platform.java
+12
-8
test/testlibrary_tests/TestMutuallyExclusivePlatformPredicates.java
...ibrary_tests/TestMutuallyExclusivePlatformPredicates.java
+135
-0
未找到文件。
test/testlibrary/com/oracle/java/testlibrary/Platform.java
浏览文件 @
2dcab4bb
...
@@ -23,6 +23,8 @@
...
@@ -23,6 +23,8 @@
package
com.oracle.java.testlibrary
;
package
com.oracle.java.testlibrary
;
import
java.util.regex.Pattern
;
import
com.oracle.java.testlibrary.Utils
;
import
com.oracle.java.testlibrary.Utils
;
public
class
Platform
{
public
class
Platform
{
...
@@ -99,29 +101,31 @@ public class Platform {
...
@@ -99,29 +101,31 @@ public class Platform {
// Returns true for sparc and sparcv9.
// Returns true for sparc and sparcv9.
public
static
boolean
isSparc
()
{
public
static
boolean
isSparc
()
{
return
isArch
(
"sparc"
);
return
isArch
(
"sparc
.*
"
);
}
}
public
static
boolean
isARM
()
{
public
static
boolean
isARM
()
{
return
isArch
(
"arm"
);
return
isArch
(
"arm
.*
"
);
}
}
public
static
boolean
isPPC
()
{
public
static
boolean
isPPC
()
{
return
isArch
(
"ppc"
);
return
isArch
(
"ppc
.*
"
);
}
}
public
static
boolean
isX86
()
{
public
static
boolean
isX86
()
{
// On Linux it's 'i386', Windows 'x86'
// On Linux it's 'i386', Windows 'x86'
without '_64' suffix.
return
(
isArch
(
"i386"
)
||
isArch
(
"x86"
)
);
return
isArch
(
"(i386)|(x86(?!_64))"
);
}
}
public
static
boolean
isX64
()
{
public
static
boolean
isX64
()
{
// On OSX it's 'x86_64' and on other (Linux, Windows and Solaris) platforms it's 'amd64'
// 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
)
{
private
static
boolean
isArch
(
String
archnameRE
)
{
return
osArch
.
toLowerCase
().
startsWith
(
archname
.
toLowerCase
());
return
Pattern
.
compile
(
archnameRE
,
Pattern
.
CASE_INSENSITIVE
)
.
matcher
(
osArch
)
.
matches
();
}
}
public
static
String
getOsArch
()
{
public
static
String
getOsArch
()
{
...
...
test/testlibrary_tests/TestMutuallyExclusivePlatformPredicates.java
0 → 100644
浏览文件 @
2dcab4bb
/*
* 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
(
"isAix"
,
"isLinux"
,
"isSolaris"
,
"isWindows"
,
"isOSX"
),
VM_TYPE
(
"isClient"
,
"isServer"
,
"isGraal"
,
"isMinimal"
),
IGNORED
(
"isEmbedded"
,
"isDebugBuild"
,
"shouldSAAttach"
,
"canPtraceAttachLinux"
,
"canAttachOSX"
);
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录