```ruby
# encoding: utf-8

class Nanoc::Extra::PiperTest < Nanoc::TestCase

  def test_basic
    stdout = StringIO.new
    stderr = StringIO.new

    cmd = %w( ls -l )

    File.open('foo.txt', 'w') { |io| io.write('hi') }
    File.open('bar.txt', 'w') { |io| io.write('ho') }

    piper = Nanoc::Extra::Piper.new(:stdout => stdout, :stderr => stderr)
    piper.run(cmd, nil)

    assert_match(/foo\.txt/, stdout.string)
    assert_match(/bar\.txt/, stdout.string)
    assert stderr.string.empty?
  end

  def test_stdin
    stdout = StringIO.new
    stderr = StringIO.new

    input = 'Hello World!'
    cmd = %w( cat )

    File.open('foo.txt', 'w') { |io| io.write('hi') }
    File.open('bar.txt', 'w') { |io| io.write('ho') }

    piper = Nanoc::Extra::Piper.new(:stdout => stdout, :stderr => stderr)
    piper.run(cmd, input)

    assert_equal(input, stdout.string)
    assert_equal('', stderr.string)
  end

end
```

Remove unused foo.txt and bar.txt files
user
```ruby
# encoding: utf-8

class Nanoc::Extra::PiperTest < Nanoc::TestCase

  def test_basic
    stdout = StringIO.new
    stderr = StringIO.new

    cmd = %w( ls -l )

    File.open('foo.txt', 'w') { |io| io.write('hi') }
    File.open('bar.txt', 'w') { |io| io.write('ho') }

    piper = Nanoc::Extra::Piper.new(:stdout => stdout, :stderr => stderr)
    piper.run(cmd, nil)

    assert_match(/foo\.txt/, stdout.string)
    assert_match(/bar\.txt/, stdout.string)
    assert stderr.string.empty?
  end

  def test_stdin
    stdout = StringIO.new
    stderr = StringIO.new

    input = 'Hello World!'
    cmd = %w( cat )

    piper = Nanoc::Extra::Piper.new(:stdout => stdout, :stderr => stderr)
    piper.run(cmd, input)

    assert_equal(input, stdout.string)
    assert_equal('', stderr.string)
  end

end
```
assistant