Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
畅游知识海洋
json
提交
e2e0ecd8
J
json
项目概览
畅游知识海洋
/
json
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
json
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
e2e0ecd8
编写于
9月 10, 2017
作者:
N
Niels Lohmann
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
✅
improved test coverage
上级
74107637
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
92 addition
and
0 deletion
+92
-0
test/src/unit-deserialization.cpp
test/src/unit-deserialization.cpp
+92
-0
未找到文件。
test/src/unit-deserialization.cpp
浏览文件 @
e2e0ecd8
...
...
@@ -31,6 +31,7 @@ SOFTWARE.
#include "json.hpp"
using
nlohmann
::
json
;
#include <iostream>
#include <valarray>
TEST_CASE
(
"deserialization"
)
...
...
@@ -443,4 +444,95 @@ TEST_CASE("deserialization")
}
}
}
SECTION
(
"ignoring byte-order marks"
)
{
std
::
string
bom
=
"
\xEF\xBB\xBF
"
;
SECTION
(
"BOM only"
)
{
CHECK_THROWS_AS
(
json
::
parse
(
bom
),
json
::
parse_error
);
CHECK_THROWS_WITH
(
json
::
parse
(
bom
),
"[json.exception.parse_error.101] parse error at 1: syntax error - unexpected end of input; expected '[', '{', or a literal"
);
CHECK_THROWS_AS
(
json
::
parse
(
std
::
istringstream
(
bom
)),
json
::
parse_error
);
CHECK_THROWS_WITH
(
json
::
parse
(
std
::
istringstream
(
bom
)),
"[json.exception.parse_error.101] parse error at 1: syntax error - unexpected end of input; expected '[', '{', or a literal"
);
}
SECTION
(
"BOM and content"
)
{
CHECK
(
json
::
parse
(
bom
+
"1"
)
==
1
);
CHECK
(
json
::
parse
(
std
::
istringstream
(
bom
+
"1"
))
==
1
);
}
SECTION
(
"2 byte of BOM"
)
{
CHECK_THROWS_AS
(
json
::
parse
(
bom
.
substr
(
0
,
2
)),
json
::
parse_error
);
CHECK_THROWS_WITH
(
json
::
parse
(
bom
),
"[json.exception.parse_error.101] parse error at 1: syntax error - unexpected end of input; expected '[', '{', or a literal"
);
CHECK_THROWS_AS
(
json
::
parse
(
std
::
istringstream
(
bom
.
substr
(
0
,
2
))),
json
::
parse_error
);
CHECK_THROWS_WITH
(
json
::
parse
(
std
::
istringstream
(
bom
)),
"[json.exception.parse_error.101] parse error at 1: syntax error - unexpected end of input; expected '[', '{', or a literal"
);
}
SECTION
(
"1 byte of BOM"
)
{
CHECK_THROWS_AS
(
json
::
parse
(
bom
.
substr
(
0
,
1
)),
json
::
parse_error
);
CHECK_THROWS_WITH
(
json
::
parse
(
bom
),
"[json.exception.parse_error.101] parse error at 1: syntax error - unexpected end of input; expected '[', '{', or a literal"
);
CHECK_THROWS_AS
(
json
::
parse
(
std
::
istringstream
(
bom
.
substr
(
0
,
1
))),
json
::
parse_error
);
CHECK_THROWS_WITH
(
json
::
parse
(
std
::
istringstream
(
bom
)),
"[json.exception.parse_error.101] parse error at 1: syntax error - unexpected end of input; expected '[', '{', or a literal"
);
}
SECTION
(
"variations"
)
{
// calculate variations of each byte of the BOM to make sure
// that the BOM and only the BOM is skipped
for
(
int
i0
=
-
1
;
i0
<
2
;
++
i0
)
{
for
(
int
i1
=
-
1
;
i1
<
2
;
++
i1
)
{
for
(
int
i2
=
-
1
;
i2
<
2
;
++
i2
)
{
// debug output for the variations
CAPTURE
(
i0
);
CAPTURE
(
i1
);
CAPTURE
(
i2
);
std
::
string
s
=
""
;
s
.
push_back
(
bom
[
0
]
+
i0
);
s
.
push_back
(
bom
[
1
]
+
i1
);
s
.
push_back
(
bom
[
2
]
+
i2
);
if
(
i0
==
0
and
i1
==
0
and
i2
==
0
)
{
// without any variation, we skip the BOM
CHECK
(
json
::
parse
(
s
+
"null"
)
==
json
());
CHECK
(
json
::
parse
(
std
::
istringstream
(
s
+
"null"
))
==
json
());
}
else
{
// any variation is an error
CHECK_THROWS_AS
(
json
::
parse
(
s
+
"null"
),
json
::
parse_error
);
CHECK_THROWS_AS
(
json
::
parse
(
std
::
istringstream
(
s
+
"null"
)),
json
::
parse_error
);
}
}
}
}
}
SECTION
(
"preserve state after parsing"
)
{
std
::
istringstream
s
(
bom
+
"123 456"
);
json
j
;
j
<<
s
;
CHECK
(
j
==
123
);
j
<<
s
;
CHECK
(
j
==
456
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录