Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
vnotepad
Exa
提交
62b85e3e
E
Exa
项目概览
vnotepad
/
Exa
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
Exa
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
62b85e3e
编写于
7月 12, 2017
作者:
B
Benjamin Sago
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add some tests for split_equals
上级
bf643c65
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
54 addition
and
6 deletion
+54
-6
src/options/parser.rs
src/options/parser.rs
+54
-6
未找到文件。
src/options/parser.rs
浏览文件 @
62b85e3e
...
...
@@ -168,17 +168,65 @@ fn parse<'a>(args: Args, inputs: &'a [OsString]) -> Result<Matches<'a>, ParseErr
}
fn
split_on_equals
<
'a
>
(
input
:
&
OsStr
)
->
Option
<
(
&
OsStr
,
&
OsStr
)
>
{
/// Splits a string on its `=` character, returning the two substrings on
/// either side. Returns `None` if there’s no equals or a string is missing.
fn
split_on_equals
(
input
:
&
OsStr
)
->
Option
<
(
&
OsStr
,
&
OsStr
)
>
{
use
std
::
os
::
unix
::
ffi
::
OsStrExt
;
input
.as_bytes
()
.iter
()
.position
(|
elem
|
*
elem
==
b
'='
)
.map
(|
index
|
input
.as_bytes
()
.split_at
(
index
))
.map
(|(
b
,
a
)|
(
OsStr
::
from_bytes
(
b
),
OsStr
::
from_bytes
(
&
a
[
1
..
])))
if
let
Some
(
index
)
=
input
.as_bytes
()
.iter
()
.position
(|
elem
|
*
elem
==
b
'='
)
{
let
(
before
,
after
)
=
input
.as_bytes
()
.split_at
(
index
);
// The after string contains the = that we need to remove.
if
before
.len
()
>=
1
&&
after
.len
()
>=
2
{
return
Some
((
OsStr
::
from_bytes
(
before
),
OsStr
::
from_bytes
(
&
after
[
1
..
])))
}
}
None
}
#[cfg(test)]
mod
split_test
{
use
super
::
split_on_equals
;
use
std
::
ffi
::
OsString
;
fn
os
(
input
:
&
'static
str
)
->
OsString
{
let
mut
os
=
OsString
::
new
();
os
.push
(
input
);
os
}
macro_rules!
test_split
{
(
$name:ident
:
$input:expr
=>
None
)
=>
{
#[test]
fn
$name
()
{
assert_eq!
(
split_on_equals
(
&
os
(
$input
)),
None
);
}
};
(
$name:ident
:
$input:expr
=>
$before:expr
,
$after:expr
)
=>
{
#[test]
fn
$name
()
{
assert_eq!
(
split_on_equals
(
&
os
(
$input
)),
Some
((
&*
os
(
$before
),
&*
os
(
$after
))));
}
};
}
test_split!
(
empty
:
""
=>
None
);
test_split!
(
letter
:
"a"
=>
None
);
test_split!
(
just
:
"="
=>
None
);
test_split!
(
intro
:
"=bbb"
=>
None
);
test_split!
(
denou
:
"aaa="
=>
None
);
test_split!
(
equals
:
"aaa=bbb"
=>
"aaa"
,
"bbb"
);
test_split!
(
sort
:
"--sort=size"
=>
"--sort"
,
"size"
);
test_split!
(
more
:
"this=that=other"
=>
"this"
,
"that=other"
);
}
#[cfg(test)]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录