#!/bin/bash

# Copyright 2015 Neha Maggu <neha.maggu@gmail.com>
# Copyright 2015 Divya Kothari <divya.s.kothari@gmail.com>
# Copyright 2015 Vineet Chaturvedi <vinit.chaturvedi@gmail.com>

[ -f testing.sh ] && . testing.sh

#testing "name" "command" "result" "infile" "stdin"


#TODO: -N and -T options are not covered in this script

#Creating Test data
echo -e "I need to buy apples\n" > file1 
echo -e "I need        to              buy apples\n" > file2
echo -e "I need to buy 'apples'"> file3
echo -e "I need to buy 'apples   '"> file4
echo -e "apples\noranges\nkiwis\ncarrots"> file5
echo -e "apples\nkiwis\ncarrots\ngrapefruits"> file6
echo -e "one" > file7
echo -e "one" > file8
echo -e "two" > file9
mkdir -p dir1/dir2/dir3/dir4 dir5 dir6
chmod 755 dir1
cp file7 dir1
cp file7 dir5
cp file7 dir6
cp file7 dir1/dir2/dir3/dir4

L1="--- file7\n"
L2="+++ file9\n"
L3="@@ -1 +1 @@\n"
L4="-one\n+two\n"
L5="one\n"
L6="two\n"
L7="+++ -\n"
L8="diff: dir/file7: No such file or directory"

testing "diff without options and same contents" "diff file7 file8 && echo yes" "yes\n" "" ""
testing "diff without options and different contents" "diff file7 file9" "$L1$L2$L3$L4" "" ""
testing "diff file - with same contents as Stndrd Input" "diff file7 - && echo yes" "yes\n" "" "$L5"
testing "diff file - with different contents as Stndrd Input" "diff file7 - " "$L1$L7$L3$L4" "" "$L6"
testing "diff - file  with same contents as Stndrd Input" "diff - file7 && echo yes" "yes\n" "" "$L5"
testing "diff - file  with different contents as Stndrd Input" "diff file7 - " "$L1$L7$L3$L4" "" "$L6"
testing "diff file dir" "mkdir dir; diff file7 dir 2>logFile; cat logFile; rm -rf dir" "$L8\n" "" ""
testing "diff file dir" "diff file7 dir1 && echo yes" "yes\n" "" ""
testing "diff file dir nested" "diff file7 dir1/dir2/dir3/dir4 && echo yes" "yes\n" "" ""
testing "diff dir5 dir6" "diff dir5 dir6 && echo yes" "yes\n" "" ""


#Creating Test data
echo -e "one" > dir5/file7 ; echo -e "two" > dir6/file7
testing "diff dir5 dir6" "diff dir5 dir6" "--- dir5/file7\n+++ dir6/file7\n@@ -1 +1 @@\n-one\n+two\n" "" ""
rm -rf dir5/file7 dir6/file7

testing "diff empty directory dir5 dir6" "diff dir5 dir6 && echo yes" "yes\n" "" ""
testing "diff -b file1 file2" "diff -b file1 file2 && echo yes" "yes\n" "" ""
testing "diff -b file3 file4" "diff -b file3 file4" "--- file3\n+++ file4\n@@ -1 +1 @@\n-I need to buy 'apples'\n+I need to buy 'apples   '\n" "" ""
testing "diff dir5/file7 dir6/file7" "diff dir1/file7 dir1/dir2/dir3/dir4/file7 && echo yes" "yes\n" "" ""

#Creating Test data
echo -e "File to be compared is this\nfile to Be is compared" > file1 
echo -e "File to be Compared IS this\nFile to be IS Compared" > file2
testing "diff -i file1 file2" "diff -i file1 file2 && echo yes" "yes\n" "" ""

#Creating Test data
echo -e "File to be compared is this\nfile to Be is compared" > file1 
echo -e "File to be Compared IS     this\nFile     to     be IS Compared" > file2
testing "diff -ib file1 file2" "diff -ib file1 file2 && echo yes" "yes\n" "" ""

#Creating Test data
echo -e "File to be compared is this\nfile to Be is compared" > file1 
echo -e "File to be Compared IS this\n\n\n\nFile to be IS Compared" > file2
testing "diff -iB file1 file2" "diff -iB file1 file2 && echo yes" "yes\n" "" ""
testing "diff root root / /" "diff / / && echo yes" "yes\n" "" ""

#Creating Test data
echo -e "one and two makes three." > file1 ; echo -e "oneandtwomakesthree." > file2 
testing "diff -w file1 file2" "diff -w file1 file2 && echo yes" "yes\n" "" ""

cp file1 file2
testing "diff -s file1 file2" "diff -s file1 file2 && echo yes" "Files file1 and file2 are identical\nyes\n" "" ""

#Creating Test data
echo -e "Filetobe compared is     this\nfile to Be is compared" > file1 
echo -e "File to be Compared IS this\n\n\n\nFile to be IS Compared" > file2
testing "diff -iBwbs file1 file2" "diff -iBwbs file1 file2 && echo yes" "Files file1 and file2 are identical\nyes\n" "" ""

#Creating Test data
echo -e "one two makes three." > file1 
echo -e "one tow makes three." > file2
testing "diff -d file1 file2" "diff -d file1 file2" "--- file1\n+++ file2\n@@ -1 +1 @@\n-one two makes three.\n+one tow makes three.\n" "" ""

#Creating Test data
echo -e "File to be compared is this\nfile to Be is compared" > file1 
echo -e  "File to be Compared IS this\n\n\n\nFile to be IS Compared" > file2
testing "diff --ignore-case --ignore-blank-lines file1 file2" "diff --ignore-case --ignore-blank-lines  file1 file2 && echo yes" "yes\n" "" ""

#Creating Test data
echo -e "one is one" > file1 ; echo -e "one is one" > file2
testing "diff -q file1 file2" "diff -q file1 file2 && echo yes" "yes\n" "" ""
testing "diff -q file7 file8" "diff -q file7 file9" "Files file7 and file9 differ\n" "" "" 

#Creating Test data
mkdir -p dir7/dir8 ; mkdir -p dir9/dir10
echo -e "two" > dir7/dir8/file1 
echo -e "one" > dir9/dir10/file1
testing "diff -r dir/* dir/*" "diff -r dir7/* dir9/*" "--- dir7/dir8/file1\n+++ dir9/dir10/file1\n@@ -1 +1 @@\n-two\n+one\n" "" ""
testing "diff -L file8 file9" "diff -L abcd file8 file9" "--- abcd\n+++ file9\n@@ -1 +1 @@\n-one\n+two\n" "" ""

#Creating Test data
echo -e "one is one" > dir7/dir8/file1 
echo -e "one is one" > dir9/dir10/file1
testing "diff -S file dir1 dir2" "diff -S file dir7 dir9 && echo yes" "yes\n" "" ""

#Creating Test data
echo -e "one is two" > file1 
echo -e "one is one" > file2
testing "diff -U file1 file2 and then patch" "diff -U 1 file1 file2 > patchFile ; patch -p 1 file1 < patchFile ; \
  diff file1 file2 && echo yes" "patching file file1\nyes\n" "" ""


#Creating Test data
echo -e "one\ttwo\tthree\tfour\nfive\tsix\tseven\teight\nnine\tten\televen\ttwelve" > file1 
echo -e "five\tsix\tseven\teight\nnine\tten\televen\ttwelve\none\ttwo\tthree\tfour" > file2
L1="@@ -1,3 +1,3 @@"
L2="-one     two     three   four"
L3=" five    six     seven   eight"
L4=" nine    ten     eleven  twelve"
L5="+one     two     three   four"
testing "diff -t file1 file2" "diff -t file1 file2" "--- file1\n+++ file2\n$L1\n$L2\n$L3\n$L4\n$L5\n" "" ""

L1="@@ -1 +1 @@" ; echo -e "one two" > file1 ; echo -e "one three" > file2
testing "diff -a file1 file2" "diff -a file1 file2" "--- file1\n+++ file2\n$L1\n-one two\n+one three\n" "" ""


rm -rf file*
rm -rf dir1 dir5 dir6 dir7 dir9

L1="I need to buy apples.\n"
L2="I need to run the laundry.\n"
L3="I need to wash the dog.\n"
L4="I need to get the car detailed."
echo -e $L1$L2$L3$L4 > File1

L5="I need to buy apples.\n"
L6="I need to do the laundry.\n"
L7="I need to wash the car.\n"
L8="I need to get the dog detailed."
echo -e $L5$L6$L7$L8 > File2

M1="--- File1\n"
M2="+++ File2\n"
M3="@@ -1,4 +1,4 @@\n"
M4=" I need to buy apples.\n"
M5="-I need to run the laundry.\n"
M6="-I need to wash the dog.\n"
M7="-I need to get the car detailed.\n"
M8="+I need to do the laundry.\n"
M9="+I need to wash the car.\n"
M10="+I need to get the dog detailed.\n"

testing "diff multi line file" "diff File1 File2 > logFile; cat logFile" "$M1$M2$M3$M4$M5$M6$M7$M8$M9$M10" "" ""

