Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
json
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
json
Commits
cd48a01b
Commit
cd48a01b
authored
Dec 28, 2014
by
Niels
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
+ more test
parent
d3216300
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
213 additions
and
0 deletions
+213
-0
src/JSON.cc
src/JSON.cc
+6
-0
test/JSON_unit.cc
test/JSON_unit.cc
+207
-0
No files found.
src/JSON.cc
View file @
cd48a01b
...
...
@@ -1504,6 +1504,7 @@ JSON::iterator& JSON::iterator::operator++()
JSON
&
JSON
::
iterator
::
operator
*
()
const
{
// dereferencing end() is an error
if
(
_object
==
nullptr
)
{
throw
std
::
runtime_error
(
"cannot get value"
);
...
...
@@ -1532,6 +1533,7 @@ JSON& JSON::iterator::operator*() const
JSON
*
JSON
::
iterator
::
operator
->
()
const
{
// dereferencing end() is an error
if
(
_object
==
nullptr
)
{
throw
std
::
runtime_error
(
"cannot get value"
);
...
...
@@ -1572,6 +1574,7 @@ std::string JSON::iterator::key() const
JSON
&
JSON
::
iterator
::
value
()
const
{
// dereferencing end() is an error
if
(
_object
==
nullptr
)
{
throw
std
::
out_of_range
(
"cannot get value"
);
...
...
@@ -1775,6 +1778,7 @@ JSON::const_iterator& JSON::const_iterator::operator++()
const
JSON
&
JSON
::
const_iterator
::
operator
*
()
const
{
// dereferencing end() is an error
if
(
_object
==
nullptr
)
{
throw
std
::
runtime_error
(
"cannot get value"
);
...
...
@@ -1803,6 +1807,7 @@ const JSON& JSON::const_iterator::operator*() const
const
JSON
*
JSON
::
const_iterator
::
operator
->
()
const
{
// dereferencing end() is an error
if
(
_object
==
nullptr
)
{
throw
std
::
runtime_error
(
"cannot get value"
);
...
...
@@ -1843,6 +1848,7 @@ std::string JSON::const_iterator::key() const
const
JSON
&
JSON
::
const_iterator
::
value
()
const
{
// dereferencing end() is an error
if
(
_object
==
nullptr
)
{
throw
std
::
out_of_range
(
"cannot get value"
);
...
...
test/JSON_unit.cc
View file @
cd48a01b
...
...
@@ -1080,6 +1080,213 @@ TEST_CASE("number (float)")
}
}
TEST_CASE
(
"Iterators"
)
{
JSON
j1
=
{
0
,
1
,
2
,
3
,
4
};
JSON
j2
=
{{
"foo"
,
"bar"
},
{
"baz"
,
"bam"
}};
JSON
j3
=
true
;
JSON
j4
=
nullptr
;
JSON
j5
=
42
;
JSON
j6
=
23.42
;
JSON
j7
=
"hello"
;
// operator *
CHECK_THROWS_AS
(
*
j4
.
end
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
*
j4
.
end
(),
std
::
runtime_error
);
// operator ->
CHECK
(
j1
.
begin
()
->
type
()
==
JSON
::
value_type
::
number
);
CHECK
(
j1
.
cbegin
()
->
type
()
==
JSON
::
value_type
::
number
);
CHECK
(
j2
.
begin
()
->
type
()
==
JSON
::
value_type
::
string
);
CHECK
(
j2
.
cbegin
()
->
type
()
==
JSON
::
value_type
::
string
);
CHECK
(
j3
.
begin
()
->
type
()
==
JSON
::
value_type
::
boolean
);
CHECK
(
j3
.
cbegin
()
->
type
()
==
JSON
::
value_type
::
boolean
);
CHECK
(
j4
.
begin
()
->
type
()
==
JSON
::
value_type
::
null
);
CHECK
(
j4
.
cbegin
()
->
type
()
==
JSON
::
value_type
::
null
);
CHECK
(
j5
.
begin
()
->
type
()
==
JSON
::
value_type
::
number
);
CHECK
(
j5
.
cbegin
()
->
type
()
==
JSON
::
value_type
::
number
);
CHECK
(
j6
.
begin
()
->
type
()
==
JSON
::
value_type
::
number_float
);
CHECK
(
j6
.
cbegin
()
->
type
()
==
JSON
::
value_type
::
number_float
);
CHECK
(
j7
.
begin
()
->
type
()
==
JSON
::
value_type
::
string
);
CHECK
(
j7
.
cbegin
()
->
type
()
==
JSON
::
value_type
::
string
);
CHECK_THROWS_AS
(
j1
.
end
()
->
type
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
j1
.
cend
()
->
type
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
j2
.
end
()
->
type
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
j2
.
cend
()
->
type
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
j3
.
end
()
->
type
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
j3
.
cend
()
->
type
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
j4
.
end
()
->
type
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
j4
.
cend
()
->
type
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
j5
.
end
()
->
type
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
j5
.
cend
()
->
type
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
j6
.
end
()
->
type
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
j6
.
cend
()
->
type
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
j7
.
end
()
->
type
(),
std
::
runtime_error
);
CHECK_THROWS_AS
(
j7
.
cend
()
->
type
(),
std
::
runtime_error
);
// value
CHECK
(
j1
.
begin
().
value
().
type
()
==
JSON
::
value_type
::
number
);
CHECK
(
j1
.
cbegin
().
value
().
type
()
==
JSON
::
value_type
::
number
);
CHECK
(
j2
.
begin
().
value
().
type
()
==
JSON
::
value_type
::
string
);
CHECK
(
j2
.
cbegin
().
value
().
type
()
==
JSON
::
value_type
::
string
);
CHECK
(
j3
.
begin
().
value
().
type
()
==
JSON
::
value_type
::
boolean
);
CHECK
(
j3
.
cbegin
().
value
().
type
()
==
JSON
::
value_type
::
boolean
);
CHECK
(
j4
.
begin
().
value
().
type
()
==
JSON
::
value_type
::
null
);
CHECK
(
j4
.
cbegin
().
value
().
type
()
==
JSON
::
value_type
::
null
);
CHECK
(
j5
.
begin
().
value
().
type
()
==
JSON
::
value_type
::
number
);
CHECK
(
j5
.
cbegin
().
value
().
type
()
==
JSON
::
value_type
::
number
);
CHECK
(
j6
.
begin
().
value
().
type
()
==
JSON
::
value_type
::
number_float
);
CHECK
(
j6
.
cbegin
().
value
().
type
()
==
JSON
::
value_type
::
number_float
);
CHECK
(
j7
.
begin
().
value
().
type
()
==
JSON
::
value_type
::
string
);
CHECK
(
j7
.
cbegin
().
value
().
type
()
==
JSON
::
value_type
::
string
);
CHECK_THROWS_AS
(
j1
.
end
().
value
(),
std
::
out_of_range
);
CHECK_THROWS_AS
(
j1
.
cend
().
value
(),
std
::
out_of_range
);
CHECK_THROWS_AS
(
j2
.
end
().
value
(),
std
::
out_of_range
);
CHECK_THROWS_AS
(
j2
.
cend
().
value
(),
std
::
out_of_range
);
CHECK_THROWS_AS
(
j3
.
end
().
value
(),
std
::
out_of_range
);
CHECK_THROWS_AS
(
j3
.
cend
().
value
(),
std
::
out_of_range
);
CHECK_THROWS_AS
(
j4
.
end
().
value
(),
std
::
out_of_range
);
CHECK_THROWS_AS
(
j4
.
cend
().
value
(),
std
::
out_of_range
);
CHECK_THROWS_AS
(
j5
.
end
().
value
(),
std
::
out_of_range
);
CHECK_THROWS_AS
(
j5
.
cend
().
value
(),
std
::
out_of_range
);
CHECK_THROWS_AS
(
j6
.
end
().
value
(),
std
::
out_of_range
);
CHECK_THROWS_AS
(
j6
.
cend
().
value
(),
std
::
out_of_range
);
CHECK_THROWS_AS
(
j7
.
end
().
value
(),
std
::
out_of_range
);
CHECK_THROWS_AS
(
j7
.
cend
().
value
(),
std
::
out_of_range
);
// iterator comparison
CHECK
(
j1
.
begin
()
!=
j2
.
begin
());
CHECK
(
j1
.
begin
()
!=
j3
.
begin
());
CHECK
(
j1
.
begin
()
!=
j4
.
begin
());
CHECK
(
j1
.
begin
()
!=
j5
.
begin
());
CHECK
(
j1
.
begin
()
!=
j6
.
begin
());
CHECK
(
j1
.
begin
()
!=
j7
.
begin
());
CHECK
(
j1
.
cbegin
()
!=
j2
.
cbegin
());
CHECK
(
j1
.
cbegin
()
!=
j3
.
cbegin
());
CHECK
(
j1
.
cbegin
()
!=
j4
.
cbegin
());
CHECK
(
j1
.
cbegin
()
!=
j5
.
cbegin
());
CHECK
(
j1
.
cbegin
()
!=
j6
.
cbegin
());
CHECK
(
j1
.
cbegin
()
!=
j7
.
cbegin
());
CHECK
(
j2
.
begin
()
!=
j1
.
begin
());
CHECK
(
j2
.
begin
()
!=
j3
.
begin
());
CHECK
(
j2
.
begin
()
!=
j4
.
begin
());
CHECK
(
j2
.
begin
()
!=
j5
.
begin
());
CHECK
(
j2
.
begin
()
!=
j6
.
begin
());
CHECK
(
j2
.
begin
()
!=
j7
.
begin
());
CHECK
(
j2
.
cbegin
()
!=
j1
.
cbegin
());
CHECK
(
j2
.
cbegin
()
!=
j3
.
cbegin
());
CHECK
(
j2
.
cbegin
()
!=
j4
.
cbegin
());
CHECK
(
j2
.
cbegin
()
!=
j5
.
cbegin
());
CHECK
(
j2
.
cbegin
()
!=
j6
.
cbegin
());
CHECK
(
j2
.
cbegin
()
!=
j7
.
cbegin
());
CHECK
(
j3
.
begin
()
!=
j1
.
begin
());
CHECK
(
j3
.
begin
()
!=
j2
.
begin
());
CHECK
(
j3
.
begin
()
!=
j4
.
begin
());
CHECK
(
j3
.
begin
()
!=
j5
.
begin
());
CHECK
(
j3
.
begin
()
!=
j6
.
begin
());
CHECK
(
j3
.
begin
()
!=
j7
.
begin
());
CHECK
(
j3
.
cbegin
()
!=
j1
.
cbegin
());
CHECK
(
j3
.
cbegin
()
!=
j2
.
cbegin
());
CHECK
(
j3
.
cbegin
()
!=
j4
.
cbegin
());
CHECK
(
j3
.
cbegin
()
!=
j5
.
cbegin
());
CHECK
(
j3
.
cbegin
()
!=
j6
.
cbegin
());
CHECK
(
j3
.
cbegin
()
!=
j7
.
cbegin
());
CHECK
(
j4
.
begin
()
!=
j1
.
begin
());
CHECK
(
j4
.
begin
()
!=
j2
.
begin
());
CHECK
(
j4
.
begin
()
!=
j3
.
begin
());
CHECK
(
j4
.
begin
()
!=
j5
.
begin
());
CHECK
(
j4
.
begin
()
!=
j6
.
begin
());
CHECK
(
j4
.
begin
()
!=
j7
.
begin
());
CHECK
(
j4
.
cbegin
()
!=
j1
.
cbegin
());
CHECK
(
j4
.
cbegin
()
!=
j2
.
cbegin
());
CHECK
(
j4
.
cbegin
()
!=
j3
.
cbegin
());
CHECK
(
j4
.
cbegin
()
!=
j5
.
cbegin
());
CHECK
(
j4
.
cbegin
()
!=
j6
.
cbegin
());
CHECK
(
j4
.
cbegin
()
!=
j7
.
cbegin
());
CHECK
(
j5
.
begin
()
!=
j1
.
begin
());
CHECK
(
j5
.
begin
()
!=
j2
.
begin
());
CHECK
(
j5
.
begin
()
!=
j3
.
begin
());
CHECK
(
j5
.
begin
()
!=
j4
.
begin
());
CHECK
(
j5
.
begin
()
!=
j6
.
begin
());
CHECK
(
j5
.
begin
()
!=
j7
.
begin
());
CHECK
(
j5
.
cbegin
()
!=
j1
.
cbegin
());
CHECK
(
j5
.
cbegin
()
!=
j2
.
cbegin
());
CHECK
(
j5
.
cbegin
()
!=
j3
.
cbegin
());
CHECK
(
j5
.
cbegin
()
!=
j4
.
cbegin
());
CHECK
(
j5
.
cbegin
()
!=
j6
.
cbegin
());
CHECK
(
j5
.
cbegin
()
!=
j7
.
cbegin
());
CHECK
(
j6
.
begin
()
!=
j1
.
begin
());
CHECK
(
j6
.
begin
()
!=
j2
.
begin
());
CHECK
(
j6
.
begin
()
!=
j3
.
begin
());
CHECK
(
j6
.
begin
()
!=
j4
.
begin
());
CHECK
(
j6
.
begin
()
!=
j5
.
begin
());
CHECK
(
j6
.
begin
()
!=
j7
.
begin
());
CHECK
(
j6
.
cbegin
()
!=
j1
.
cbegin
());
CHECK
(
j6
.
cbegin
()
!=
j2
.
cbegin
());
CHECK
(
j6
.
cbegin
()
!=
j3
.
cbegin
());
CHECK
(
j6
.
cbegin
()
!=
j4
.
cbegin
());
CHECK
(
j6
.
cbegin
()
!=
j5
.
cbegin
());
CHECK
(
j6
.
cbegin
()
!=
j7
.
cbegin
());
CHECK
(
j7
.
begin
()
!=
j1
.
begin
());
CHECK
(
j7
.
begin
()
!=
j2
.
begin
());
CHECK
(
j7
.
begin
()
!=
j3
.
begin
());
CHECK
(
j7
.
begin
()
!=
j4
.
begin
());
CHECK
(
j7
.
begin
()
!=
j5
.
begin
());
CHECK
(
j7
.
begin
()
!=
j6
.
begin
());
CHECK
(
j7
.
cbegin
()
!=
j1
.
cbegin
());
CHECK
(
j7
.
cbegin
()
!=
j2
.
cbegin
());
CHECK
(
j7
.
cbegin
()
!=
j3
.
cbegin
());
CHECK
(
j7
.
cbegin
()
!=
j4
.
cbegin
());
CHECK
(
j7
.
cbegin
()
!=
j5
.
cbegin
());
CHECK
(
j7
.
cbegin
()
!=
j6
.
cbegin
());
// iterator copy constructors
{
JSON
::
iterator
tmp1
(
j1
.
begin
());
JSON
::
const_iterator
tmp2
(
j1
.
cbegin
());
}
{
JSON
::
iterator
tmp1
(
j2
.
begin
());
JSON
::
const_iterator
tmp2
(
j2
.
cbegin
());
}
{
JSON
::
iterator
tmp1
(
j3
.
begin
());
JSON
::
const_iterator
tmp2
(
j3
.
cbegin
());
}
{
JSON
::
iterator
tmp1
(
j4
.
begin
());
JSON
::
const_iterator
tmp2
(
j4
.
cbegin
());
}
{
JSON
::
iterator
tmp1
(
j5
.
begin
());
JSON
::
const_iterator
tmp2
(
j5
.
cbegin
());
}
{
JSON
::
iterator
tmp1
(
j6
.
begin
());
JSON
::
const_iterator
tmp2
(
j6
.
cbegin
());
}
{
JSON
::
iterator
tmp1
(
j7
.
begin
());
JSON
::
const_iterator
tmp2
(
j7
.
cbegin
());
}
}
TEST_CASE
(
"Comparisons"
)
{
JSON
j1
=
{
0
,
1
,
2
,
3
,
4
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment