Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
gaoqiong
yaml-cpp
Commits
27055f17
"...composable_kernel.git" did not exist on "613dcc6b8eb9cf2b037151fe848a55788b25022f"
Commit
27055f17
authored
Jul 25, 2009
by
jbeder
Browse files
Fixed bug with simple keys that are quoted scalars
parent
ab7c8b0d
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
260 additions
and
224 deletions
+260
-224
src/scantoken.cpp
src/scantoken.cpp
+7
-2
yaml-reader/parsertests.cpp
yaml-reader/parsertests.cpp
+251
-222
yaml-reader/tests.cpp
yaml-reader/tests.cpp
+1
-0
yaml-reader/tests.h
yaml-reader/tests.h
+1
-0
No files found.
src/scantoken.cpp
View file @
27055f17
...
@@ -309,8 +309,8 @@ namespace YAML
...
@@ -309,8 +309,8 @@ namespace YAML
{
{
std
::
string
scalar
;
std
::
string
scalar
;
//
e
at single or double quote
//
peek
at single or double quote
(don't eat because we need to preserve (for the time being) the input position)
char
quote
=
INPUT
.
get
();
char
quote
=
INPUT
.
peek
();
bool
single
=
(
quote
==
'\''
);
bool
single
=
(
quote
==
'\''
);
// setup the scanning parameters
// setup the scanning parameters
...
@@ -330,6 +330,11 @@ namespace YAML
...
@@ -330,6 +330,11 @@ namespace YAML
InsertSimpleKey
();
InsertSimpleKey
();
int
line
=
INPUT
.
line
,
column
=
INPUT
.
column
;
int
line
=
INPUT
.
line
,
column
=
INPUT
.
column
;
// now eat that opening quote
INPUT
.
get
();
// and scan
scalar
=
ScanScalar
(
INPUT
,
params
);
scalar
=
ScanScalar
(
INPUT
,
params
);
m_simpleKeyAllowed
=
false
;
m_simpleKeyAllowed
=
false
;
...
...
yaml-reader/parsertests.cpp
View file @
27055f17
#include "tests.h"
#include "tests.h"
#include "yaml.h"
#include "yaml.h"
#include <sstream>
#include <sstream>
#include <algorithm>
namespace
Test
{
namespace
Test
namespace
Parser
{
{
void
SimpleScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
namespace
Parser
{
{
void
SimpleScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
inputScalar
=
"Hello, World!"
;
{
desiredOutput
=
"Hello, World!"
;
inputScalar
=
"Hello, World!"
;
}
desiredOutput
=
"Hello, World!"
;
}
void
MultiLineScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
{
void
MultiLineScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
inputScalar
=
{
"normal scalar, but
\n
"
inputScalar
=
"over several lines"
;
"normal scalar, but
\n
"
desiredOutput
=
"normal scalar, but over several lines"
;
"over several lines"
;
}
desiredOutput
=
"normal scalar, but over several lines"
;
}
void
LiteralScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
{
void
LiteralScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
inputScalar
=
{
"|
\n
"
inputScalar
=
" literal scalar - so we can draw ASCII:
\n
"
"|
\n
"
"
\n
"
" literal scalar - so we can draw ASCII:
\n
"
" - -
\n
"
"
\n
"
" | - |
\n
"
" - -
\n
"
" -----
\n
"
;
" | - |
\n
"
desiredOutput
=
" -----
\n
"
;
"literal scalar - so we can draw ASCII:
\n
"
desiredOutput
=
"
\n
"
"literal scalar - so we can draw ASCII:
\n
"
" - -
\n
"
"
\n
"
" | - |
\n
"
" - -
\n
"
" -----
\n
"
;
" | - |
\n
"
}
" -----
\n
"
;
}
void
FoldedScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
{
void
FoldedScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
inputScalar
=
{
">
\n
"
inputScalar
=
" and a folded scalar... so we
\n
"
">
\n
"
" can just keep writing various
\n
"
" and a folded scalar... so we
\n
"
" things. And if we want to keep indentation:
\n
"
" can just keep writing various
\n
"
"
\n
"
" things. And if we want to keep indentation:
\n
"
" we just indent a little
\n
"
"
\n
"
" see, this stays indented"
;
" we just indent a little
\n
"
desiredOutput
=
" see, this stays indented"
;
"and a folded scalar... so we"
desiredOutput
=
" can just keep writing various"
"and a folded scalar... so we"
" things. And if we want to keep indentation:
\n
"
" can just keep writing various"
"
\n
"
" things. And if we want to keep indentation:
\n
"
" we just indent a little
\n
"
"
\n
"
" see, this stays indented"
;
" we just indent a little
\n
"
}
" see, this stays indented"
;
}
void
ChompedFoldedScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
{
void
ChompedFoldedScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
inputScalar
=
{
">-
\n
"
inputScalar
=
" Here's a folded scalar
\n
"
">-
\n
"
" that gets chomped."
;
" Here's a folded scalar
\n
"
desiredOutput
=
" that gets chomped."
;
"Here's a folded scalar"
desiredOutput
=
" that gets chomped."
;
"Here's a folded scalar"
}
" that gets chomped."
;
}
void
ChompedLiteralScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
{
void
ChompedLiteralScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
inputScalar
=
{
"|-
\n
"
inputScalar
=
" Here's a literal scalar
\n
"
"|-
\n
"
" that gets chomped."
;
" Here's a literal scalar
\n
"
desiredOutput
=
" that gets chomped."
;
"Here's a literal scalar
\n
"
desiredOutput
=
"that gets chomped."
;
"Here's a literal scalar
\n
"
}
"that gets chomped."
;
}
void
FoldedScalarWithIndent
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
{
void
FoldedScalarWithIndent
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
inputScalar
=
{
">2
\n
"
inputScalar
=
" Here's a folded scalar
\n
"
">2
\n
"
" that starts with some indentation."
;
" Here's a folded scalar
\n
"
desiredOutput
=
" that starts with some indentation."
;
" Here's a folded scalar
\n
"
desiredOutput
=
"that starts with some indentation."
;
" Here's a folded scalar
\n
"
}
"that starts with some indentation."
;
}
void
ColonScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
{
void
ColonScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
inputScalar
=
"::vector"
;
{
desiredOutput
=
"::vector"
;
inputScalar
=
"::vector"
;
}
desiredOutput
=
"::vector"
;
}
void
QuotedScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
{
void
QuotedScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
inputScalar
=
"
\"
: - ()
\"
"
;
{
desiredOutput
=
": - ()"
;
inputScalar
=
"
\"
: - ()
\"
"
;
}
desiredOutput
=
": - ()"
;
}
void
CommaScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
{
void
CommaScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
inputScalar
=
"Up, up, and away!"
;
{
desiredOutput
=
"Up, up, and away!"
;
inputScalar
=
"Up, up, and away!"
;
}
desiredOutput
=
"Up, up, and away!"
;
}
void
DashScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
{
void
DashScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
inputScalar
=
"-123"
;
{
desiredOutput
=
"-123"
;
inputScalar
=
"-123"
;
}
desiredOutput
=
"-123"
;
}
void
URLScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
{
void
URLScalar
(
std
::
string
&
inputScalar
,
std
::
string
&
desiredOutput
)
inputScalar
=
"http://example.com/foo#bar"
;
{
desiredOutput
=
"http://example.com/foo#bar"
;
inputScalar
=
"http://example.com/foo#bar"
;
}
desiredOutput
=
"http://example.com/foo#bar"
;
}
bool
SimpleSeq
()
{
bool
SimpleSeq
()
std
::
string
input
=
{
"- eggs
\n
"
std
::
string
input
=
"- bread
\n
"
"- eggs
\n
"
"- milk"
;
"- bread
\n
"
"- milk"
;
std
::
stringstream
stream
(
input
);
YAML
::
Parser
parser
(
stream
);
std
::
stringstream
stream
(
input
);
YAML
::
Node
doc
;
YAML
::
Parser
parser
(
stream
);
parser
.
GetNextDocument
(
doc
);
YAML
::
Node
doc
;
parser
.
GetNextDocument
(
doc
);
std
::
string
output
;
doc
[
0
]
>>
output
;
std
::
string
output
;
if
(
output
!=
"eggs"
)
doc
[
0
]
>>
output
;
return
false
;
if
(
output
!=
"eggs"
)
doc
[
1
]
>>
output
;
return
false
;
if
(
output
!=
"bread"
)
doc
[
1
]
>>
output
;
return
false
;
if
(
output
!=
"bread"
)
doc
[
2
]
>>
output
;
return
false
;
if
(
output
!=
"milk"
)
doc
[
2
]
>>
output
;
return
false
;
if
(
output
!=
"milk"
)
return
false
;
return
true
;
}
return
true
;
}
bool
SimpleMap
()
{
bool
SimpleMap
()
std
::
string
input
=
{
"name: Prince Fielder
\n
"
std
::
string
input
=
"position: 1B
\n
"
"name: Prince Fielder
\n
"
"bats: L"
;
"position: 1B
\n
"
"bats: L"
;
std
::
stringstream
stream
(
input
);
YAML
::
Parser
parser
(
stream
);
std
::
stringstream
stream
(
input
);
YAML
::
Node
doc
;
YAML
::
Parser
parser
(
stream
);
parser
.
GetNextDocument
(
doc
);
YAML
::
Node
doc
;
parser
.
GetNextDocument
(
doc
);
std
::
string
output
;
doc
[
"name"
]
>>
output
;
std
::
string
output
;
if
(
output
!=
"Prince Fielder"
)
doc
[
"name"
]
>>
output
;
return
false
;
if
(
output
!=
"Prince Fielder"
)
doc
[
"position"
]
>>
output
;
return
false
;
if
(
output
!=
"1B"
)
doc
[
"position"
]
>>
output
;
return
false
;
if
(
output
!=
"1B"
)
doc
[
"bats"
]
>>
output
;
return
false
;
if
(
output
!=
"L"
)
doc
[
"bats"
]
>>
output
;
return
false
;
if
(
output
!=
"L"
)
return
false
;
return
true
;
}
return
true
;
}
bool
FlowSeq
()
{
bool
FlowSeq
()
std
::
string
input
=
"[ 2 , 3, 5 , 7, 11]"
;
{
std
::
string
input
=
"[ 2 , 3, 5 , 7, 11]"
;
std
::
stringstream
stream
(
input
);
YAML
::
Parser
parser
(
stream
);
std
::
stringstream
stream
(
input
);
YAML
::
Node
doc
;
YAML
::
Parser
parser
(
stream
);
parser
.
GetNextDocument
(
doc
);
YAML
::
Node
doc
;
parser
.
GetNextDocument
(
doc
);
int
output
;
doc
[
0
]
>>
output
;
int
output
;
if
(
output
!=
2
)
doc
[
0
]
>>
output
;
return
false
;
if
(
output
!=
2
)
doc
[
1
]
>>
output
;
return
false
;
if
(
output
!=
3
)
doc
[
1
]
>>
output
;
return
false
;
if
(
output
!=
3
)
doc
[
2
]
>>
output
;
return
false
;
if
(
output
!=
5
)
doc
[
2
]
>>
output
;
return
false
;
if
(
output
!=
5
)
doc
[
3
]
>>
output
;
return
false
;
if
(
output
!=
7
)
doc
[
3
]
>>
output
;
return
false
;
if
(
output
!=
7
)
doc
[
4
]
>>
output
;
return
false
;
if
(
output
!=
11
)
doc
[
4
]
>>
output
;
return
false
;
if
(
output
!=
11
)
return
false
;
return
true
;
}
return
true
;
}
bool
FlowMap
()
{
bool
FlowMap
()
std
::
string
input
=
"{hr: 65, avg: 0.278}"
;
{
std
::
string
input
=
"{hr: 65, avg: 0.278}"
;
std
::
stringstream
stream
(
input
);
YAML
::
Parser
parser
(
stream
);
std
::
stringstream
stream
(
input
);
YAML
::
Node
doc
;
YAML
::
Parser
parser
(
stream
);
parser
.
GetNextDocument
(
doc
);
YAML
::
Node
doc
;
parser
.
GetNextDocument
(
doc
);
std
::
string
output
;
doc
[
"hr"
]
>>
output
;
std
::
string
output
;
if
(
output
!=
"65"
)
doc
[
"hr"
]
>>
output
;
return
false
;
if
(
output
!=
"65"
)
doc
[
"avg"
]
>>
output
;
return
false
;
if
(
output
!=
"0.278"
)
doc
[
"avg"
]
>>
output
;
return
false
;
if
(
output
!=
"0.278"
)
return
false
;
return
true
;
}
return
true
;
}
}
}
bool
QuotedSimpleKeys
()
{
std
::
string
KeyValue
[
3
]
=
{
"
\"
double
\"
: double
\n
"
,
"'single': single
\n
"
,
"plain: plain
\n
"
};
int
perm
[
3
]
=
{
0
,
1
,
2
};
do
{
std
::
string
input
=
KeyValue
[
perm
[
0
]]
+
KeyValue
[
perm
[
1
]]
+
KeyValue
[
perm
[
2
]];
std
::
stringstream
stream
(
input
);
YAML
::
Parser
parser
(
stream
);
YAML
::
Node
doc
;
parser
.
GetNextDocument
(
doc
);
std
::
string
output
;
doc
[
"double"
]
>>
output
;
if
(
output
!=
"double"
)
return
false
;
doc
[
"single"
]
>>
output
;
if
(
output
!=
"single"
)
return
false
;
doc
[
"plain"
]
>>
output
;
if
(
output
!=
"plain"
)
return
false
;
}
while
(
std
::
next_permutation
(
perm
,
perm
+
3
));
return
true
;
}
}
}
yaml-reader/tests.cpp
View file @
27055f17
...
@@ -262,6 +262,7 @@ namespace Test
...
@@ -262,6 +262,7 @@ namespace Test
RunParserTest
(
&
Parser
::
SimpleMap
,
"simple map"
,
passed
);
RunParserTest
(
&
Parser
::
SimpleMap
,
"simple map"
,
passed
);
RunParserTest
(
&
Parser
::
FlowSeq
,
"flow seq"
,
passed
);
RunParserTest
(
&
Parser
::
FlowSeq
,
"flow seq"
,
passed
);
RunParserTest
(
&
Parser
::
FlowMap
,
"flow map"
,
passed
);
RunParserTest
(
&
Parser
::
FlowMap
,
"flow map"
,
passed
);
RunParserTest
(
&
Parser
::
QuotedSimpleKeys
,
"quoted simple keys"
,
passed
);
RunEncodingTest
(
&
EncodeToUtf8
,
false
,
"UTF-8, no BOM"
,
passed
);
RunEncodingTest
(
&
EncodeToUtf8
,
false
,
"UTF-8, no BOM"
,
passed
);
RunEncodingTest
(
&
EncodeToUtf8
,
true
,
"UTF-8 with BOM"
,
passed
);
RunEncodingTest
(
&
EncodeToUtf8
,
true
,
"UTF-8 with BOM"
,
passed
);
...
...
yaml-reader/tests.h
View file @
27055f17
...
@@ -28,6 +28,7 @@ namespace Test {
...
@@ -28,6 +28,7 @@ namespace Test {
bool
SimpleMap
();
bool
SimpleMap
();
bool
FlowSeq
();
bool
FlowSeq
();
bool
FlowMap
();
bool
FlowMap
();
bool
QuotedSimpleKeys
();
}
}
namespace
Emitter
{
namespace
Emitter
{
...
...
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