You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1348 lines
28 KiB

<?php
/*
** Zabbix
** Copyright (C) 2001-2023 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program 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 for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**/
use PHPUnit\Framework\TestCase;
class CItemKeyTest extends TestCase {
public static function provider() {
return [
// valid keys
[
'key', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key',
'key' => 'key',
'parameters' => []
],
[]
],
[
'key[]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key[]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => '',
'pos' => 1
]
]
]
]
],
['']
],
[
'key[""]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key[""]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[""]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '""',
'pos' => 1
]
]
]
]
],
['']
],
[
'key[ ]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key[ ]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[ ]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => '',
'pos' => 2
]
]
]
]
],
['']
],
[
'key[ ""]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key[ ""]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[ ""]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '""',
'pos' => 2
]
]
]
]
],
['']
],
[
'key[ "" ]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key[ "" ]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[ "" ]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '""',
'pos' => 2
]
]
]
]
],
['']
],
[
'key[a]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key[a]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[a]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'a',
'pos' => 1
]
]
]
]
],
['a']
],
[
'key[ a]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key[ a]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[ a]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'a',
'pos' => 2
]
]
]
]
],
['a']
],
[
'key[ a ]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key[ a ]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[ a ]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'a ',
'pos' => 2
]
]
]
]
],
['a ']
],
[
'key["a"]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key["a"]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["a"]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"a"',
'pos' => 1
]
]
]
]
],
['a']
],
[
'key["a",]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key["a",]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["a",]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"a"',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => '',
'pos' => 5
]
]
]
]
],
['a', '']
],
[
'key[a,b,c]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key[a,b,c]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[a,b,c]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'a',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'b',
'pos' => 3
],
2 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'c',
'pos' => 5
]
]
]
]
],
['a', 'b', 'c']
],
[
'key["a","b","c"]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key["a","b","c"]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["a","b","c"]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"a"',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"b"',
'pos' => 5
],
2 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"c"',
'pos' => 9
]
]
]
]
],
['a', 'b', 'c']
],
[
'key[a,[b,c]]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key[a,[b,c]]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[a,[b,c]]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'a',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[b,c]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'b',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'c',
'pos' => 3
]
]
]
]
]
]
],
['a', 'b,c']
],
[
'key[a,[b,]]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key[a,[b,]]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[a,[b,]]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'a',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[b,]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'b',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => '',
'pos' => 3
]
]
]
]
]
]
],
['a', 'b,']
],
[
'key[a,b[c]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key[a,b[c]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[a,b[c]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'a',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'b[c',
'pos' => 3
]
]
]
]
],
['a', 'b[c']
],
[
'key["a","b",["c","d\",]"]]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key["a","b",["c","d\",]"]]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["a","b",["c","d\",]"]]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"a"',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"b"',
'pos' => 5
],
2 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["c","d\",]"]',
'pos' => 9,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"c"',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"d\",]"',
'pos' => 5
]
]
]
]
]
]
],
['a', 'b', '"c","d\",]"']
],
[
'key["a","b",["c","d\",]"],[e,f]]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key["a","b",["c","d\",]"],[e,f]]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["a","b",["c","d\",]"],[e,f]]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"a"',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"b"',
'pos' => 5
],
2 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["c","d\",]"]',
'pos' => 9,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"c"',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"d\",]"',
'pos' => 5
]
]
],
3 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[e,f]',
'pos' => 23,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'e',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'f',
'pos' => 3
]
]
]
]
]
]
],
['a', 'b', '"c","d\",]"', 'e,f']
],
[
'key[a"b"]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key[a"b"]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[a"b"]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'a"b"',
'pos' => 1
]
]
]
]
],
['a"b"']
],
[
'key["a",b"c",d]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key["a",b"c",d]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["a",b"c",d]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"a"',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'b"c"',
'pos' => 5
],
2 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'd',
'pos' => 10
]
]
]
]
],
['a', 'b"c"', 'd']
],
[
'key["\"aaa\"", "bbb","ccc" , "ddd" ,"", "","" , "" ,, , ,eee, fff,ggg , hhh" ]', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'key["\"aaa\"", "bbb","ccc" , "ddd" ,"", "","" , "" ,, , ,eee, fff,ggg , hhh" ]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["\"aaa\"", "bbb","ccc" , "ddd" ,"", "","" , "" ,, , ,eee, fff,ggg , hhh" ]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"\"aaa\""',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"bbb"',
'pos' => 12
],
2 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"ccc"',
'pos' => 18
],
3 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"ddd"',
'pos' => 26
],
4 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '""',
'pos' => 33
],
5 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '""',
'pos' => 37
],
6 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '""',
'pos' => 40
],
7 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '""',
'pos' => 45
],
8 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => '',
'pos' => 49
],
9 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => '',
'pos' => 51
],
10 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => '',
'pos' => 54
],
11 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'eee',
'pos' => 55
],
12 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'fff',
'pos' => 60
],
13 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'ggg ',
'pos' => 64
],
14 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'hhh" ',
'pos' => 70
]
]
]
]
],
['"aaa"', 'bbb', 'ccc', 'ddd', '', '', '', '', '', '', '', 'eee', 'fff', 'ggg ', 'hhh" ']
],
// invalid keys
[
'key[["a",]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'unexpected end of key',
'match' => 'key',
'key' => 'key',
'parameters' => []
],
[]
],
[
'key[["a","\"b\"]"]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'unexpected end of key',
'match' => 'key',
'key' => 'key',
'parameters' => []
],
[]
],
[
'key["a",["b","c\"]"]]]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "]"',
'match' => 'key["a",["b","c\"]"]]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["a",["b","c\"]"]]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"a"',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["b","c\"]"]',
'pos' => 5,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"b"',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"c\"]"',
'pos' => 5
]
]
]
]
]
]
],
['a', '"b","c\"]"']
],
[
'key[a ]]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "]"',
'match' => 'key[a ]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[a ]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'a ',
'pos' => 1
]
]
]
]
],
['a ']
],
[
'key[ a]]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "]"',
'match' => 'key[ a]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[ a]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'a',
'pos' => 2
]
]
]
]
],
['a']
],
[
'key[ГУГЛ]654', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "654"',
'match' => 'key[ГУГЛ]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[ГУГЛ]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'ГУГЛ',
'pos' => 1
]
]
]
]
],
['ГУГЛ']
],
[
'key[ГУГЛ]654', 2,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "654"',
'match' => 'y[ГУГЛ]',
'key' => 'y',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[ГУГЛ]',
'pos' => 1,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'ГУГЛ',
'pos' => 1
]
]
]
]
],
['ГУГЛ']
],
[
'key[a]654', 8,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => '4',
'key' => '4',
'parameters' => []
],
[]
],
[
'key[a]654', 9,
[
'rc' => CParser::PARSE_FAIL,
'error' => 'key is empty',
'match' => '',
'key' => '',
'parameters' => []
],
[]
],
[
'{}key', 0,
[
'rc' => CParser::PARSE_FAIL,
'error' => 'incorrect syntax near "{}key"',
'match' => '',
'key' => '',
'parameters' => []
],
[]
],
[
'{}key', 1,
[
'rc' => CParser::PARSE_FAIL,
'error' => 'incorrect syntax near "}key"',
'match' => '',
'key' => '',
'parameters' => []
],
[]
],
[
'ssh,21', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near ",21"',
'match' => 'ssh',
'key' => 'ssh',
'parameters' => []
],
[]
],
[
'key[][]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "[]"',
'match' => 'key[]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => '',
'pos' => 1
]
]
]
]
],
['']
],
[
'key["a","b","c"]["d"]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "["d"]"',
'match' => 'key["a","b","c"]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["a","b","c"]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"a"',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"b"',
'pos' => 5
],
2 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"c"',
'pos' => 9
]
]
]
]
],
['a', 'b', 'c']
],
[
'key["a",b,["c","d\",]"]]["d"]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "["d"]"',
'match' => 'key["a",b,["c","d\",]"]]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["a",b,["c","d\",]"]]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"a"',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'b',
'pos' => 5
],
2 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["c","d\",]"]',
'pos' => 7,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"c"',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"d\",]"',
'pos' => 5
]
]
]
]
]
]
],
['a', 'b', '"c","d\",]"']
],
[
'key[[[]]]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "[[]]]"',
'match' => 'key',
'key' => 'key',
'parameters' => []
],
[]
],
[
'key["a",["b",["c","d"],e],"f"]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "["b",["c","d"],e],"f"]"',
'match' => 'key',
'key' => 'key',
'parameters' => []
],
[]
],
[
'key["a","b",[["c","d\",]"]]]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "[["c","d\",]"]]]"',
'match' => 'key',
'key' => 'key',
'parameters' => []
],
[]
],
[
'key["a","b","c",[["d", ["e\",]" ]], f"]]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "[["d", ["e\",]" ]], f"]]"',
'match' => 'key',
'key' => 'key',
'parameters' => []
],
[]
],
[
'key[a]]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "]"',
'match' => 'key[a]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[a]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'a',
'pos' => 1
]
]
]
]
],
['a']
],
[
'key[a[b]]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "]"',
'match' => 'key[a[b]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '[a[b]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'a[b',
'pos' => 1
]
]
]
]
],
['a[b']
],
[
'key["a",b[c,d],e]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near ",e]"',
'match' => 'key["a",b[c,d]',
'key' => 'key',
'parameters' => [
0 => [
'type' => CItemKey::PARAM_ARRAY,
'raw' => '["a",b[c,d]',
'pos' => 3,
'parameters' => [
0 => [
'type' => CItemKey::PARAM_QUOTED,
'raw' => '"a"',
'pos' => 1
],
1 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'b[c',
'pos' => 5
],
2 => [
'type' => CItemKey::PARAM_UNQUOTED,
'raw' => 'd',
'pos' => 9
]
]
]
]
],
['a', 'b[c', 'd']
],
[
'key["a"b]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "b]"',
'match' => 'key',
'key' => 'key',
'parameters' => []
],
[]
],
[
'key["a",["b","]"c]]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "["b","]"c]]"',
'match' => 'key',
'key' => 'key',
'parameters' => []
],
[]
],
[
'key[["]"a]]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "["]"a]]"',
'match' => 'key',
'key' => 'key',
'parameters' => []
],
[]
],
[
'key[[a]"b"]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near ""b"]"',
'match' => 'key',
'key' => 'key',
'parameters' => []
],
[]
]
];
}
/**
* @dataProvider provider
*/
public function test_parseItemKey($key, $pos, $expectedResult, $unquoted_params) {
static $item_key_parser = null;
if ($item_key_parser === null) {
$item_key_parser = new CItemKey();
}
$rc = $item_key_parser->parse($key, $pos);
$result = [
'rc' => $rc,
'error' => $item_key_parser->getError(),
'match' => $item_key_parser->getMatch(),
'key' => $item_key_parser->getKey(),
'parameters' => $item_key_parser->getParamsRaw()
];
$this->assertEquals($expectedResult, $result);
$this->assertEquals(count($unquoted_params), $item_key_parser->getParamsNum());
for ($n = 0, $count = $item_key_parser->getParamsNum(); $n < $count; $n++) {
$this->assertEquals($unquoted_params[$n], $item_key_parser->getParam($n));
}
}
public static function provider18() {
return [
[
'ssh,21', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'ssh,21',
'key' => 'ssh,21',
'parameters' => []
],
[]
],
[
'ssh,{$SSH.PORT}', 0,
[
'rc' => CParser::PARSE_SUCCESS,
'error' => '',
'match' => 'ssh,{$SSH.PORT}',
'key' => 'ssh,{$SSH.PORT}',
'parameters' => []
],
[]
],
[
'ssh,{$SSH.PORT},2', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near ",2"',
'match' => 'ssh,{$SSH.PORT}',
'key' => 'ssh,{$SSH.PORT}',
'parameters' => []
],
[]
],
[
'ssh,{$SSH.PORT}[a]', 0,
[
'rc' => CParser::PARSE_SUCCESS_CONT,
'error' => 'incorrect syntax near "[a]"',
'match' => 'ssh,{$SSH.PORT}',
'key' => 'ssh,{$SSH.PORT}',
'parameters' => []
],
[]
]
];
}
/**
* @dataProvider provider18
*/
public function test_parseItemKey18($key, $pos, $expectedResult, $unquoted_params) {
static $item_key_parser = null;
if ($item_key_parser === null) {
$item_key_parser = new CItemKey(['18_simple_checks' => true]);
}
$rc = $item_key_parser->parse($key, $pos);
$result = [
'rc' => $rc,
'error' => $item_key_parser->getError(),
'match' => $item_key_parser->getMatch(),
'key' => $item_key_parser->getKey(),
'parameters' => $item_key_parser->getParamsRaw()
];
$this->assertEquals($expectedResult, $result);
$this->assertEquals(count($unquoted_params), $item_key_parser->getParamsNum());
for ($n = 0, $count = $item_key_parser->getParamsNum(); $n < $count; $n++) {
$this->assertEquals($unquoted_params[$n], $item_key_parser->getParam($n));
}
}
public static function providerQuoteParam() {
return [
['', false, ''],
['', true, '""'],
['param', false, 'param'],
['param', true, '"param"'],
['"param', false, '"\"param"'],
['"param', true, '"\"param"'],
[' param', false, '" param"'],
[' param', true, '" param"'],
['a,b', false, '"a,b"'],
['a,b', true, '"a,b"'],
['a]b', false, '"a]b"'],
['a]b', true, '"a]b"'],
['ab\\', true, false]
];
}
/**
* @dataProvider providerQuoteParam
*/
public function test_QuoteParam($param, $force, $expected) {
$rc = CItemKey::quoteParam($param, $force);
$this->assertEquals($expected, $rc);
}
}