Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python GNUs Coreutils和x27的差异测试;fmt&x27;效用_Python_Automated Tests_Gnu_Word Wrap_Gnu Coreutils - Fatal编程技术网

Python GNUs Coreutils和x27的差异测试;fmt&x27;效用

Python GNUs Coreutils和x27的差异测试;fmt&x27;效用,python,automated-tests,gnu,word-wrap,gnu-coreutils,Python,Automated Tests,Gnu,Word Wrap,Gnu Coreutils,我正在探索各种测试策略(差分、回归、单位等),并被分配了测试GNUCoreutils实用程序的任务。我正在尝试应用随机差异测试并创建一个oracle,以便断言所描述的实用程序的后条件已经满足 我想做的是创建一个Python实用程序,它生成一个随机字符串,对字符串应用文本换行(最大为给定的行宽)以生成预期的输出,然后对生成的字符串调用fmt实用程序并断言输出与预期的输出匹配。为此,我尝试利用Python模块。但是,我还没有找到一种方法来确保保持缩进。考虑一个文件(文件.txt),内容 \s\s\

我正在探索各种测试策略(差分、回归、单位等),并被分配了测试GNU
Coreutils
实用程序的任务。我正在尝试应用随机差异测试并创建一个oracle,以便断言所描述的实用程序的后条件已经满足


我想做的是创建一个Python实用程序,它生成一个随机字符串,对字符串应用文本换行(最大为给定的行宽)以生成预期的输出,然后对生成的字符串调用fmt实用程序并断言输出与预期的输出匹配。为此,我尝试利用Python模块。但是,我还没有找到一种方法来确保保持缩进。考虑一个文件(文件.txt),内容

\s\s\s\sLorem ipsum dolor sit amet, consectetuer-adipiscing elit. Curabitur dignissim venenatis pede. Quisque dui dui, ultricies ut, facilisis non, pulvinar non.
作为fmt实用程序的输入。调用命令
fmt-w 50 file.txt
将导致输出:

 \s\s\s\sLorem ipsum dolor sit amet,
 \s\s\s\sconsectetuer-adipiscing elit. Curabitur
 \s\s\s\sdignissim venenatis pede. Quisque dui dui,
 \s\s\s\sultricies ut, facilisis non, pulvinar non.

根据fmt公用设施文件

默认情况下,将显示空行、单词之间的空格和缩进 保存在输出中;连续输入行具有不同的 压痕未连接;选项卡在输入时展开并引入 关于输出

fmt更喜欢在句末断行,并尝试 避免在句子的第一个单词后或第一个单词前换行 一句话的最后一个字。断句是指句子的结尾或结尾 指以“?!”结尾的段落或单词,接着是两个 空格或行尾,忽略任何插入的括号或引号

在尝试模拟与fmt实用程序相同的输出行为时,我决定使用textwrap模块函数,如下所示:

textwrap.fill(in_str, width=50, expand_tabs=True, drop_whitespace=False, fix_sentence_endings=True, break_on_hyphens=False)
根据Python文档,它应该执行以下操作:

  • 包裹线的最大长度将等于宽度参数(50)
  • 输入中的所有制表符都将扩展为空格
  • 每行开头和结尾处的空格(包装后缩进前)将不删除
  • 假设一个句子的结尾由一个小写字母后跟一个“.”、“!”,或“?”,可能后跟一个“,”或“”,后跟一个空格
  • 只有空格才会被视为断线的潜在好位置
  • 但是,同一输入上的textwrap.fill函数的输出返回:

    \s\s\s\sLorem ipsum dolor sit amet, 
    consectetuer-adipiscing elit.  Curabitur dignissim
     venenatis pede.  Quisque dui dui, ultricies ut, 
    facilisis non, pulvinar non.  Duis quis arcu a 
    purus volutpat iaculis.  Morbi id dui in diam 
    ornare dictum.  Praesent consectetuer vehicula 
    ipsum.  Praesent tortor massa, congue et, ornare 
    in, posuere eget, pede.
    
    如您所见,缩进级别没有保持



    我可以最好地利用什么工具和/或差异测试策略来最有效地测试fmt实用程序?非常感谢您的任何建议!

    尝试使用
    py.test运行此代码段。

    #!/usr/bin/env python2.7
    from textwrap import TextWrapper
    
    input_tx = """\s\s\s\sLorem ipsum dolor sit amet, consectetuer-adipiscing elit. Curabitur dignissim venenatis pede. Quisque dui dui, ultricies ut, facilisis non, pulvinar non."""
    output_tx1 = """\s\s\s\sLorem ipsum dolor sit amet, consectetuer-
    \s\s\s\sadipiscing elit. Curabitur dignissim
    \s\s\s\svenenatis pede. Quisque dui dui, ultricies
    \s\s\s\sut, facilisis non, pulvinar non."""
    output_tx2 = """\s\s\s\sLorem ipsum dolor sit amet,
    \s\s\s\sconsectetuer-adipiscing elit. Curabitur
    \s\s\s\sdignissim venenatis pede. Quisque dui dui,
    \s\s\s\sultricies ut, facilisis non, pulvinar non."""
    
    class Test_TextWrapper:
        def test_stackoverflow_q32753000_1(self):
            sut = TextWrapper(width=50, subsequent_indent="\s\s\s\s")
            assert sut.fill(input_tx) == output_tx1
    
        def test_stackoverflow_q32753000_2(self):
            sut = TextWrapper(width=50, subsequent_indent="\s\s\s\s",
                              fix_sentence_endings=False,
                              break_on_hyphens=False)
            assert sut.fill(input_tx) == output_tx2
    
    它应该向您展示如下内容:

    > py.test -v -k Test_TextWrapper 
    ============================================== test session starts ===============================================
    platform linux2 -- Python 2.7.11, pytest-2.9.0, py-1.4.31, pluggy-0.3.1 -- /usr/bin/python
    cachedir: .cache
    ...
    plugins: cov-2.2.1
    collected 6 items 
    
    test_fmt.py::Test_TextWrapper::test_stackoverflow_q32753000_1 PASSED
    test_fmt.py::Test_TextWrapper::test_stackoverflow_q32753000_2 PASSED
    
    =================================== 4 tests deselected by '-kTest_TextWrapper' ===================================
    ===================================== 2 passed, 4 deselected in 0.03 seconds =====================================
    
    如您所见,我的第二个测试用例生成的输出与所示相同 以你的问题为例

    我目前正在为Python标准库
    textwrap.TextWrapper
    类编写一个小型Python包装类 一个新的
    前缀
    关键字参数,将
    初始缩进
    后续缩进
    参数的效果与 从输入文本中删除前缀。(类似于
    -p
    选项 在寻找现有技术和
    灵感我在这里找到了你的问题。

    尝试使用
    py.test运行此代码段。

    #!/usr/bin/env python2.7
    from textwrap import TextWrapper
    
    input_tx = """\s\s\s\sLorem ipsum dolor sit amet, consectetuer-adipiscing elit. Curabitur dignissim venenatis pede. Quisque dui dui, ultricies ut, facilisis non, pulvinar non."""
    output_tx1 = """\s\s\s\sLorem ipsum dolor sit amet, consectetuer-
    \s\s\s\sadipiscing elit. Curabitur dignissim
    \s\s\s\svenenatis pede. Quisque dui dui, ultricies
    \s\s\s\sut, facilisis non, pulvinar non."""
    output_tx2 = """\s\s\s\sLorem ipsum dolor sit amet,
    \s\s\s\sconsectetuer-adipiscing elit. Curabitur
    \s\s\s\sdignissim venenatis pede. Quisque dui dui,
    \s\s\s\sultricies ut, facilisis non, pulvinar non."""
    
    class Test_TextWrapper:
        def test_stackoverflow_q32753000_1(self):
            sut = TextWrapper(width=50, subsequent_indent="\s\s\s\s")
            assert sut.fill(input_tx) == output_tx1
    
        def test_stackoverflow_q32753000_2(self):
            sut = TextWrapper(width=50, subsequent_indent="\s\s\s\s",
                              fix_sentence_endings=False,
                              break_on_hyphens=False)
            assert sut.fill(input_tx) == output_tx2
    
    它应该向您展示如下内容:

    > py.test -v -k Test_TextWrapper 
    ============================================== test session starts ===============================================
    platform linux2 -- Python 2.7.11, pytest-2.9.0, py-1.4.31, pluggy-0.3.1 -- /usr/bin/python
    cachedir: .cache
    ...
    plugins: cov-2.2.1
    collected 6 items 
    
    test_fmt.py::Test_TextWrapper::test_stackoverflow_q32753000_1 PASSED
    test_fmt.py::Test_TextWrapper::test_stackoverflow_q32753000_2 PASSED
    
    =================================== 4 tests deselected by '-kTest_TextWrapper' ===================================
    ===================================== 2 passed, 4 deselected in 0.03 seconds =====================================
    
    如您所见,我的第二个测试用例生成的输出与所示相同 以你的问题为例

    我目前正在为Python标准库
    textwrap.TextWrapper
    类编写一个小型Python包装类 一个新的
    前缀
    关键字参数,将
    初始缩进
    后续缩进
    参数的效果与 从输入文本中删除前缀。(类似于
    -p
    选项 在寻找现有技术和 灵感我在这里找到了你的问题