Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录/注册
切换导航
H
h2database
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
Administrator
h2database
Commits
50d1b061
提交
50d1b061
authored
11月 22, 2016
作者:
Noel Grandin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
use assertContains in more places
so we get nicer error messages when things fail
上级
98b53a8c
隐藏空白字符变更
内嵌
并排
正在显示
17 个修改的文件
包含
56 行增加
和
56 行删除
+56
-56
TestFunctions.java
h2/src/test/org/h2/test/db/TestFunctions.java
+1
-1
TestIndex.java
h2/src/test/org/h2/test/db/TestIndex.java
+1
-1
TestLinkedTable.java
h2/src/test/org/h2/test/db/TestLinkedTable.java
+1
-1
TestOptimizations.java
h2/src/test/org/h2/test/db/TestOptimizations.java
+4
-4
TestOptimizerHints.java
h2/src/test/org/h2/test/db/TestOptimizerHints.java
+5
-5
TestSequence.java
h2/src/test/org/h2/test/db/TestSequence.java
+2
-2
TestPreparedStatement.java
h2/src/test/org/h2/test/jdbc/TestPreparedStatement.java
+2
-2
TestConnectionPool.java
h2/src/test/org/h2/test/jdbcx/TestConnectionPool.java
+1
-1
TestWeb.java
h2/src/test/org/h2/test/server/TestWeb.java
+4
-4
TestMVTableEngine.java
h2/src/test/org/h2/test/store/TestMVTableEngine.java
+1
-1
TestNestedJoins.java
h2/src/test/org/h2/test/synth/TestNestedJoins.java
+2
-2
TestOuterJoins.java
h2/src/test/org/h2/test/synth/TestOuterJoins.java
+1
-1
TestJmx.java
h2/src/test/org/h2/test/unit/TestJmx.java
+7
-7
TestPageStore.java
h2/src/test/org/h2/test/unit/TestPageStore.java
+1
-1
TestPgServer.java
h2/src/test/org/h2/test/unit/TestPgServer.java
+2
-2
TestRecovery.java
h2/src/test/org/h2/test/unit/TestRecovery.java
+1
-1
TestTools.java
h2/src/test/org/h2/test/unit/TestTools.java
+20
-20
没有找到文件。
h2/src/test/org/h2/test/db/TestFunctions.java
浏览文件 @
50d1b061
...
...
@@ -366,7 +366,7 @@ public class TestFunctions extends TestBase implements AggregateFunction {
ResultSet
rs
;
rs
=
stat
.
executeQuery
(
"select * from information_schema.views"
);
rs
.
next
();
assert
True
(
rs
.
getString
(
"VIEW_DEFINITION"
).
contains
(
"SCHEMA2.FUNC"
)
);
assert
Contains
(
rs
.
getString
(
"VIEW_DEFINITION"
),
"SCHEMA2.FUNC"
);
stat
.
execute
(
"drop view test"
);
stat
.
execute
(
"drop schema schema2"
);
...
...
h2/src/test/org/h2/test/db/TestIndex.java
浏览文件 @
50d1b061
...
...
@@ -164,7 +164,7 @@ public class TestIndex extends TestBase {
int
start
=
m
.
indexOf
(
'\"'
),
end
=
m
.
indexOf
(
'\"'
,
start
+
1
);
String
s
=
m
.
substring
(
start
+
1
,
end
);
for
(
String
t
:
expected
)
{
assert
True
(
t
+
" not in "
+
s
,
s
.
contains
(
t
)
);
assert
Contains
(
s
,
t
);
}
}
stat
.
execute
(
"drop table test"
);
...
...
h2/src/test/org/h2/test/db/TestLinkedTable.java
浏览文件 @
50d1b061
...
...
@@ -137,7 +137,7 @@ public class TestLinkedTable extends TestBase {
"(null, 'jdbc:h2:mem:', 'sa', 'pwd', 'DUAL2')"
);
fail
();
}
catch
(
SQLException
e
)
{
assert
True
(
e
.
toString
().
contains
(
"pwd"
)
);
assert
Contains
(
e
.
toString
(),
"pwd"
);
}
try
{
conn
.
createStatement
().
execute
(
"create linked table test"
+
...
...
h2/src/test/org/h2/test/db/TestOptimizations.java
浏览文件 @
50d1b061
...
...
@@ -338,12 +338,12 @@ public class TestOptimizations extends TestBase {
rs
=
stat
.
executeQuery
(
"explain select * from test "
+
"where id > 10 order by id"
);
rs
.
next
();
assert
True
(
rs
.
getString
(
1
).
contains
(
"IDX_ID_ASC"
)
);
assert
Contains
(
rs
.
getString
(
1
),
"IDX_ID_ASC"
);
rs
=
stat
.
executeQuery
(
"explain select * from test "
+
"where id < 10 order by id desc"
);
rs
.
next
();
assert
True
(
rs
.
getString
(
1
).
contains
(
"IDX_ID_DESC"
)
);
assert
Contains
(
rs
.
getString
(
1
),
"IDX_ID_DESC"
);
rs
.
next
();
stat
.
execute
(
"drop table test"
);
...
...
@@ -635,7 +635,7 @@ public class TestOptimizations extends TestBase {
rs
.
next
();
if
(!
config
.
mvcc
)
{
String
plan
=
rs
.
getString
(
1
);
assert
True
(
plan
.
indexOf
(
"direct"
)
>
0
);
assert
Contains
(
plan
,
"direct"
);
}
rs
=
stat
.
executeQuery
(
"select min(x), max(x) from test"
);
rs
.
next
();
...
...
@@ -667,7 +667,7 @@ public class TestOptimizations extends TestBase {
"WHERE id < 100 and type=2 AND id<100"
);
rs
.
next
();
String
plan
=
rs
.
getString
(
1
);
assert
True
(
plan
.
indexOf
(
"TYPE_INDEX"
)
>
0
);
assert
Contains
(
plan
,
"TYPE_INDEX"
);
conn
.
close
();
}
...
...
h2/src/test/org/h2/test/db/TestOptimizerHints.java
浏览文件 @
50d1b061
...
...
@@ -43,19 +43,19 @@ public class TestOptimizerHints extends TestBase {
String
plan
;
plan
=
plan
(
s
,
"select * from t1, t2 where t1.id = t2.t1_id"
);
assert
True
(
plan
,
plan
.
contains
(
"INNER JOIN PUBLIC.T2"
)
);
assert
Contains
(
plan
,
"INNER JOIN PUBLIC.T2"
);
plan
=
plan
(
s
,
"select * from t2, t1 where t1.id = t2.t1_id"
);
assert
True
(
plan
,
plan
.
contains
(
"INNER JOIN PUBLIC.T1"
)
);
assert
Contains
(
plan
,
"INNER JOIN PUBLIC.T1"
);
plan
=
plan
(
s
,
"select * from t2, t1 where t1.id = 1"
);
assert
True
(
plan
,
plan
.
contains
(
"INNER JOIN PUBLIC.T1"
)
);
assert
Contains
(
plan
,
"INNER JOIN PUBLIC.T1"
);
plan
=
plan
(
s
,
"select * from t2, t1 where t1.id = t2.t1_id and t2.id = 1"
);
assert
True
(
plan
,
plan
.
contains
(
"INNER JOIN PUBLIC.T1"
)
);
assert
Contains
(
plan
,
"INNER JOIN PUBLIC.T1"
);
plan
=
plan
(
s
,
"select * from t1, t2 where t1.id = t2.t1_id and t2.id = 1"
);
assert
True
(
plan
,
plan
.
contains
(
"INNER JOIN PUBLIC.T2"
)
);
assert
Contains
(
plan
,
"INNER JOIN PUBLIC.T2"
);
checkPlanComma
(
s
,
"t1"
,
"t2"
,
"t3"
,
"t4"
);
checkPlanComma
(
s
,
"t4"
,
"t2"
,
"t3"
,
"t1"
);
...
...
h2/src/test/org/h2/test/db/TestSequence.java
浏览文件 @
50d1b061
...
...
@@ -393,7 +393,7 @@ public class TestSequence extends TestBase {
getNext
(
stat
);
fail
(
"Expected error: "
+
finalError
);
}
catch
(
SQLException
e
)
{
assert
True
(
e
.
getMessage
().
contains
(
finalError
)
);
assert
Contains
(
e
.
getMessage
(),
finalError
);
}
}
...
...
@@ -405,7 +405,7 @@ public class TestSequence extends TestBase {
stat
.
execute
(
sql
);
fail
(
"Expected error: "
+
error
);
}
catch
(
SQLException
e
)
{
assert
True
(
e
.
getMessage
(),
e
.
getMessage
().
contains
(
error
)
);
assert
Contains
(
e
.
getMessage
(),
error
);
}
}
...
...
h2/src/test/org/h2/test/jdbc/TestPreparedStatement.java
浏览文件 @
50d1b061
...
...
@@ -760,7 +760,7 @@ public class TestPreparedStatement extends TestBase {
ResultSet
rs
=
prep
.
executeQuery
();
rs
.
next
();
String
plan
=
rs
.
getString
(
1
);
assert
True
(
plan
.
contains
(
".tableScan"
)
);
assert
Contains
(
plan
,
".tableScan"
);
rs
=
prepExe
.
executeQuery
();
rs
.
next
();
assertEquals
(
"World"
,
rs
.
getString
(
2
));
...
...
@@ -771,7 +771,7 @@ public class TestPreparedStatement extends TestBase {
rs
=
prep
.
executeQuery
();
rs
.
next
();
String
plan1
=
rs
.
getString
(
1
);
assert
True
(
plan1
.
contains
(
"IDXNAME"
)
);
assert
Contains
(
plan1
,
"IDXNAME"
);
rs
=
prepExe
.
executeQuery
();
rs
.
next
();
assertEquals
(
"Hello"
,
rs
.
getString
(
2
));
...
...
h2/src/test/org/h2/test/jdbcx/TestConnectionPool.java
浏览文件 @
50d1b061
...
...
@@ -103,7 +103,7 @@ public class TestConnectionPool extends TestBase {
man
.
getConnection
();
fail
();
}
catch
(
SQLException
e
)
{
assert
True
(
e
.
toString
().
toLowerCase
().
contains
(
"timeout"
)
);
assert
Contains
(
e
.
toString
().
toLowerCase
(),
"timeout"
);
time
=
System
.
currentTimeMillis
()
-
time
;
assertTrue
(
"timeout after "
+
time
+
" ms"
,
time
>
1000
);
}
finally
{
...
...
h2/src/test/org/h2/test/server/TestWeb.java
浏览文件 @
50d1b061
...
...
@@ -142,7 +142,7 @@ public class TestWeb extends TestBase {
Server
server
=
Server
.
createWebServer
(
"-webPort"
,
"8182"
,
"-properties"
,
"null"
);
server
.
start
();
assert
True
(
server
.
getStatus
().
contains
(
"server running"
)
);
assert
Contains
(
server
.
getStatus
(),
"server running"
);
Server
server2
=
Server
.
createWebServer
(
"-webPort"
,
"8182"
,
"-properties"
,
"null"
);
assertEquals
(
"Not started"
,
server2
.
getStatus
());
...
...
@@ -150,9 +150,9 @@ public class TestWeb extends TestBase {
server2
.
start
();
fail
();
}
catch
(
Exception
e
)
{
assert
True
(
e
.
toString
().
contains
(
"port may be in use"
)
);
assert
True
(
server2
.
getStatus
().
contains
(
"could not be started"
)
)
;
assert
Contains
(
e
.
toString
(),
"port may be in use"
);
assert
Contains
(
server2
.
getStatus
(),
"could not be started"
);
}
server
.
stop
();
}
...
...
h2/src/test/org/h2/test/store/TestMVTableEngine.java
浏览文件 @
50d1b061
...
...
@@ -542,7 +542,7 @@ public class TestMVTableEngine extends TestBase {
rs
.
next
();
plan
=
rs
.
getString
(
1
);
// transaction log is larger than the table, so read the table
assert
True
(
plan
,
plan
.
contains
(
"reads:"
)
);
assert
Contains
(
plan
,
"reads:"
);
rs
=
stat2
.
executeQuery
(
"select count(*) from test"
);
rs
.
next
();
assertEquals
(
10000
,
rs
.
getInt
(
1
));
...
...
h2/src/test/org/h2/test/synth/TestNestedJoins.java
浏览文件 @
50d1b061
...
...
@@ -285,7 +285,7 @@ public class TestNestedJoins extends TestBase {
"inner join c on c.id = b.id on b.id = a.id"
);
assertTrue
(
rs
.
next
());
sql
=
rs
.
getString
(
1
);
assert
True
(
"nested"
,
sql
.
contains
(
"("
)
);
assert
Contains
(
sql
,
"("
);
stat
.
execute
(
"drop table a, b, c"
);
// see roadmap, tag: swapInnerJoinTables
...
...
@@ -350,7 +350,7 @@ public class TestNestedJoins extends TestBase {
"left outer join (test c) on a.id = c.id"
);
assertTrue
(
rs
.
next
());
sql
=
rs
.
getString
(
1
);
assert
True
(
sql
.
contains
(
"PRIMARY_KEY"
)
);
assert
Contains
(
sql
,
"PRIMARY_KEY"
);
stat
.
execute
(
"drop table test"
);
/*
...
...
h2/src/test/org/h2/test/synth/TestOuterJoins.java
浏览文件 @
50d1b061
...
...
@@ -304,7 +304,7 @@ public class TestOuterJoins extends TestBase {
"left outer join (test c) on a.id = c.id"
);
assertTrue
(
rs
.
next
());
sql
=
rs
.
getString
(
1
);
assert
True
(
sql
.
contains
(
"PRIMARY_KEY"
)
);
assert
Contains
(
sql
,
"PRIMARY_KEY"
);
stat
.
execute
(
"drop table test"
);
/*
...
...
h2/src/test/org/h2/test/unit/TestJmx.java
浏览文件 @
50d1b061
...
...
@@ -102,32 +102,32 @@ public class TestJmx extends TestBase {
getAttribute
(
name
,
"Version"
).
toString
().
startsWith
(
"1."
));
assertEquals
(
14
,
info
.
getAttributes
().
length
);
result
=
mbeanServer
.
invoke
(
name
,
"listSettings"
,
null
,
null
).
toString
();
assert
True
(
result
.
contains
(
"ANALYZE_AUTO"
)
);
assert
Contains
(
result
,
"ANALYZE_AUTO"
);
conn
.
setAutoCommit
(
false
);
stat
.
execute
(
"create table test(id int)"
);
stat
.
execute
(
"insert into test values(1)"
);
result
=
mbeanServer
.
invoke
(
name
,
"listSessions"
,
null
,
null
).
toString
();
assert
True
(
result
.
contains
(
"session id"
)
);
assert
Contains
(
result
,
"session id"
);
if
(
config
.
mvcc
||
config
.
mvStore
)
{
assert
True
(
result
.
contains
(
"read lock"
)
);
assert
Contains
(
result
,
"read lock"
);
}
else
{
assert
True
(
result
.
contains
(
"write lock"
)
);
assert
Contains
(
result
,
"write lock"
);
}
assertEquals
(
2
,
info
.
getOperations
().
length
);
assert
True
(
info
.
getDescription
().
contains
(
"database"
)
);
assert
Contains
(
info
.
getDescription
(),
"database"
);
attrMap
=
New
.
hashMap
();
for
(
MBeanAttributeInfo
a
:
info
.
getAttributes
())
{
attrMap
.
put
(
a
.
getName
(),
a
);
}
assert
True
(
attrMap
.
get
(
"CacheSize"
).
getDescription
().
contains
(
"KB"
)
);
assert
Contains
(
attrMap
.
get
(
"CacheSize"
).
getDescription
(),
"KB"
);
opMap
=
New
.
hashMap
();
for
(
MBeanOperationInfo
o
:
info
.
getOperations
())
{
opMap
.
put
(
o
.
getName
(),
o
);
}
assert
True
(
opMap
.
get
(
"listSessions"
).
getDescription
().
contains
(
"lock"
)
);
assert
Contains
(
opMap
.
get
(
"listSessions"
).
getDescription
(),
"lock"
);
assertEquals
(
MBeanOperationInfo
.
INFO
,
opMap
.
get
(
"listSessions"
).
getImpact
());
conn
.
close
();
...
...
h2/src/test/org/h2/test/unit/TestPageStore.java
浏览文件 @
50d1b061
...
...
@@ -138,7 +138,7 @@ public class TestPageStore extends TestBase {
InputStream
in
=
FileUtils
.
newInputStream
(
getBaseDir
()
+
"/pageStoreLogLimit.trace.db"
);
String
s
=
IOUtils
.
readStringAndClose
(
new
InputStreamReader
(
in
),
-
1
);
assert
True
(
s
.
indexOf
(
"Transaction log could not be truncated"
)
>
0
);
assert
Contains
(
s
,
"Transaction log could not be truncated"
);
conn
.
commit
();
ResultSet
rs
=
stat2
.
executeQuery
(
"select * from test"
);
assertTrue
(
rs
.
next
());
...
...
h2/src/test/org/h2/test/unit/TestPgServer.java
浏览文件 @
50d1b061
...
...
@@ -236,8 +236,8 @@ public class TestPgServer extends TestBase {
"select version(), pg_postmaster_start_time(), current_schema()"
);
rs
.
next
();
String
s
=
rs
.
getString
(
1
);
assert
True
(
s
.
contains
(
"H2"
)
);
assert
True
(
s
.
contains
(
"PostgreSQL"
)
);
assert
Contains
(
s
,
"H2"
);
assert
Contains
(
s
,
"PostgreSQL"
);
s
=
rs
.
getString
(
2
);
s
=
rs
.
getString
(
3
);
assertEquals
(
s
,
"PUBLIC"
);
...
...
h2/src/test/org/h2/test/unit/TestRecovery.java
浏览文件 @
50d1b061
...
...
@@ -290,7 +290,7 @@ public class TestRecovery extends TestBase {
rec
.
setOut
(
new
PrintStream
(
buff
));
rec
.
runTool
(
"-dir"
,
getBaseDir
(),
"-db"
,
"recovery"
,
"-trace"
);
String
out
=
new
String
(
buff
.
toByteArray
());
assert
True
(
out
.
contains
(
"Created file"
)
);
assert
Contains
(
out
,
"Created file"
);
Connection
conn2
=
getConnection
(
"recovery2"
);
Statement
stat2
=
conn2
.
createStatement
();
...
...
h2/src/test/org/h2/test/unit/TestTools.java
浏览文件 @
50d1b061
...
...
@@ -536,23 +536,23 @@ public class TestTools extends TestBase {
try
{
result
=
runServer
(
0
,
new
String
[]{
"-?"
});
assert
True
(
result
.
contains
(
"Starts the H2 Console"
)
);
assert
Contains
(
result
,
"Starts the H2 Console"
);
assertTrue
(
result
.
indexOf
(
"Unknown option"
)
<
0
);
result
=
runServer
(
1
,
new
String
[]{
"-xy"
});
assert
True
(
result
.
contains
(
"Starts the H2 Console"
)
);
assert
True
(
result
.
contains
(
"Feature not supported"
)
);
assert
Contains
(
result
,
"Starts the H2 Console"
);
assert
Contains
(
result
,
"Feature not supported"
);
result
=
runServer
(
0
,
new
String
[]{
"-tcp"
,
"-tcpPort"
,
"9001"
,
"-tcpPassword"
,
"abc"
});
assert
True
(
result
.
contains
(
"tcp://"
)
);
assert
True
(
result
.
contains
(
":9001"
)
);
assert
True
(
result
.
contains
(
"only local"
)
);
assert
Contains
(
result
,
"tcp://"
);
assert
Contains
(
result
,
":9001"
);
assert
Contains
(
result
,
"only local"
);
assertTrue
(
result
.
indexOf
(
"Starts the H2 Console"
)
<
0
);
conn
=
getConnection
(
"jdbc:h2:tcp://localhost:9001/mem:"
,
"sa"
,
"sa"
);
conn
.
close
();
result
=
runServer
(
0
,
new
String
[]{
"-tcpShutdown"
,
"tcp://localhost:9001"
,
"-tcpPassword"
,
"abc"
,
"-tcpShutdownForce"
});
assert
True
(
result
.
contains
(
"Shutting down"
)
);
assert
Contains
(
result
,
"Shutting down"
);
}
finally
{
shutdownServers
();
}
...
...
@@ -565,16 +565,16 @@ public class TestTools extends TestBase {
try
{
result
=
runServer
(
0
,
new
String
[]{
"-tcp"
,
"-tcpAllowOthers"
,
"-tcpPort"
,
"9001"
,
"-tcpPassword"
,
"abcdef"
,
"-tcpSSL"
});
assert
True
(
result
.
contains
(
"ssl://"
)
);
assert
True
(
result
.
contains
(
":9001"
)
);
assert
True
(
result
.
contains
(
"others can"
)
);
assert
Contains
(
result
,
"ssl://"
);
assert
Contains
(
result
,
":9001"
);
assert
Contains
(
result
,
"others can"
);
assertTrue
(
result
.
indexOf
(
"Starts the H2 Console"
)
<
0
);
conn
=
getConnection
(
"jdbc:h2:ssl://localhost:9001/mem:"
,
"sa"
,
"sa"
);
conn
.
close
();
result
=
runServer
(
0
,
new
String
[]{
"-tcpShutdown"
,
"ssl://localhost:9001"
,
"-tcpPassword"
,
"abcdef"
});
assert
True
(
result
.
contains
(
"Shutting down"
)
);
assert
Contains
(
result
,
"Shutting down"
);
assertThrows
(
ErrorCode
.
CONNECTION_BROKEN_1
,
this
).
getConnection
(
"jdbc:h2:ssl://localhost:9001/mem:"
,
"sa"
,
"sa"
);
...
...
@@ -583,21 +583,21 @@ public class TestTools extends TestBase {
"-pg"
,
"-pgAllowOthers"
,
"-pgPort"
,
"9003"
,
"-tcp"
,
"-tcpAllowOthers"
,
"-tcpPort"
,
"9006"
,
"-tcpPassword"
,
"abc"
});
Server
stop
=
server
;
assert
True
(
result
.
contains
(
"https://"
)
);
assert
True
(
result
.
contains
(
":9002"
)
);
assert
True
(
result
.
contains
(
"pg://"
)
);
assert
True
(
result
.
contains
(
":9003"
)
);
assert
True
(
result
.
contains
(
"others can"
)
);
assert
Contains
(
result
,
"https://"
);
assert
Contains
(
result
,
":9002"
);
assert
Contains
(
result
,
"pg://"
);
assert
Contains
(
result
,
":9003"
);
assert
Contains
(
result
,
"others can"
);
assertTrue
(
result
.
indexOf
(
"only local"
)
<
0
);
assert
True
(
result
.
contains
(
"tcp://"
)
);
assert
True
(
result
.
contains
(
":9006"
)
);
assert
Contains
(
result
,
"tcp://"
);
assert
Contains
(
result
,
":9006"
);
conn
=
getConnection
(
"jdbc:h2:tcp://localhost:9006/mem:"
,
"sa"
,
"sa"
);
conn
.
close
();
result
=
runServer
(
0
,
new
String
[]{
"-tcpShutdown"
,
"tcp://localhost:9006"
,
"-tcpPassword"
,
"abc"
,
"-tcpShutdownForce"
});
assert
True
(
result
.
contains
(
"Shutting down"
)
);
assert
Contains
(
result
,
"Shutting down"
);
stop
.
shutdown
();
assertThrows
(
ErrorCode
.
CONNECTION_BROKEN_1
,
this
).
getConnection
(
"jdbc:h2:tcp://localhost:9006/mem:"
,
"sa"
,
"sa"
);
...
...
@@ -926,7 +926,7 @@ public class TestTools extends TestBase {
tool
.
setOut
(
new
PrintStream
(
buff
));
tool
.
runTool
(
"-url"
,
url
,
"-user"
,
user
,
"-password"
,
password
,
"-script"
,
fileName
+
".txt"
,
"-showResults"
);
assert
True
(
buff
.
toString
().
contains
(
"Hello"
)
);
assert
Contains
(
buff
.
toString
(),
"Hello"
);
// test parsing of BLOCKSIZE option
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论