diff options
author | Lukas Larsson <[email protected]> | 2010-10-18 15:50:20 +0200 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2010-11-01 12:35:07 +0100 |
commit | 19ee7aa8aa107cf78d6eb520b1bc23c578191cac (patch) | |
tree | 2bdf6090a4ae725b4234de733dc1532b456dbb17 /lib/common_test/src/ct_util.erl | |
parent | 42a5c23e7beabf08ac8d9796da63386a8af95456 (diff) | |
download | otp-19ee7aa8aa107cf78d6eb520b1bc23c578191cac.tar.gz otp-19ee7aa8aa107cf78d6eb520b1bc23c578191cac.tar.bz2 otp-19ee7aa8aa107cf78d6eb520b1bc23c578191cac.zip |
Update parse_table to take multiline sql rows
Add test cases for ct:parse_table
Diffstat (limited to 'lib/common_test/src/ct_util.erl')
-rw-r--r-- | lib/common_test/src/ct_util.erl | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/lib/common_test/src/ct_util.erl b/lib/common_test/src/ct_util.erl index 0a434666fa..b5ab4cbb6e 100644 --- a/lib/common_test/src/ct_util.erl +++ b/lib/common_test/src/ct_util.erl @@ -556,10 +556,37 @@ listenv(Telnet) -> %%% @hidden %%% @equiv ct:parse_table/1 parse_table(Data) -> - [Heading|Lines]= - [remove_space(string:tokens(L, "|"),[]) || L <- Data, hd(L)==$|], + {Heading, Rest} = get_headings(Data), + Lines = parse_row(Rest,[],size(Heading)), {Heading,Lines}. +get_headings(["|" ++ Headings | Rest]) -> + {remove_space(string:tokens(Headings, "|"),[]), Rest}; +get_headings([_ | Rest]) -> + get_headings(Rest); +get_headings([]) -> + {{},[]}. + +parse_row(["|" ++ _ = Row | T], Rows, NumCols) when NumCols > 1 -> + case string:tokens(Row, "|") of + Values when length(Values) =:= NumCols -> + parse_row(T,[remove_space(Values,[])|Rows], NumCols); + Values when length(Values) < NumCols -> + parse_row([Row ++"\n"++ hd(T) | tl(T)], Rows, NumCols) + end; +parse_row(["|" ++ _ = Row | T], Rows, 1 = NumCols) -> + case string:rchr(Row, $|) of + 1 -> + parse_row([Row ++"\n"++hd(T) | tl(T)], Rows, NumCols); + _Else -> + parse_row(T, [remove_space(string:tokens(Row,"|"),[])|Rows], + NumCols) + end; +parse_row([_Skip | T], Rows, NumCols) -> + parse_row(T, Rows, NumCols); +parse_row([], Rows, _NumCols) -> + lists:reverse(Rows). + remove_space([Str|Rest],Acc) -> remove_space(Rest,[string:strip(string:strip(Str),both,$')|Acc]); remove_space([],Acc) -> |