15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#!/usr/bin/perl -w 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Copyright (C) 2012 Daniel Bates (dbates@intudata.com). All rights reserved. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Redistribution and use in source and binary forms, with or without 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# modification, are permitted provided that the following conditions 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# are met: 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 1. Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 2. Redistributions in binary form must reproduce the above copyright 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# notice, this list of conditions and the following disclaimer in the 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# documentation and/or other materials provided with the distribution. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Unit tests of VCSUtils::runCommand(). 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use strict; 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use warnings; 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use Test::More; 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use VCSUtils; 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)use constant ENOENT => 2; # See <errno.h> 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# The array of test cases. 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my @testCaseHashRefs = ( 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testName => "Simple", 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputArgs => ["echo", "hello"], 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => { 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) exitStatus => 0, 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stdout => "hello\n" 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testName => "Multiple commands", 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputArgs => ["echo", "first-command;echo second-command"], 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => { 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) exitStatus => 0, 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stdout => "first-command;echo second-command\n" 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}, 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # New test 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) testName => "Non-existent command", 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inputArgs => ["/usr/bin/non-existent-command"], 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) expectedReturn => { 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) exitStatus => ENOENT 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)my $testCasesCount = @testCaseHashRefs; 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)plan(tests => $testCasesCount); # Total number of assertions. 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)foreach my $testCase (@testCaseHashRefs) { 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) my $testNameStart = "runCommand(): $testCase->{testName}: comparing"; 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) my $got = VCSUtils::runCommand(@{$testCase->{inputArgs}}); 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) my $expectedReturn = $testCase->{expectedReturn}; 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) is_deeply($got, $expectedReturn, "$testNameStart return value."); 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 76