Restructuring tests

This commit is contained in:
DarkFeather 2023-10-03 12:43:34 -05:00
parent b852e514d0
commit dbc22698e2
Signed by: DarkFeather
GPG Key ID: 1CC1E3F4ED06F296
19 changed files with 124 additions and 144 deletions

View File

@ -1,21 +1,21 @@
#!/usr/bin/bash #!/usr/bin/bash
# File: HelloWorld.bash # File: HelloWorld.bash
# #
# Description: This file exemplifies printing 'Hello world!' in bash. # Description: This file exemplifies printing 'Hello, World!' in bash.
# #
# Package: AniNIX/HelloWorld # Package: AniNIX/HelloWorld
# Copyright: WTFPL # Copyright: WTFPL
# #
# Author: DarkFeather <ircs://aninix.net:6697/DarkFeather> # Author: DarkFeather <ircs://aninix.net:6697/DarkFeather>
### String to print ### String to print
export _helloWorld="Hello world!" export _helloWorld="Hello, World!"
### Prints 'Hello world!' ### Prints 'Hello, World!'
### </summary> ### </summary>
function main() { function main() {
printf "$_helloWorld""\n" printf "$_helloWorld""\n"
} }

View File

@ -2,19 +2,19 @@
/* /*
* File: HelloWorld.c * File: HelloWorld.c
* *
* Description: This file exemplifies printing 'Hello world!' in C. * Description: This file exemplifies printing 'Hello, World!' in C.
* *
* Package: AniNIX/HelloWorld * Package: AniNIX/HelloWorld
* Copyright: WTFPL * Copyright: WTFPL
* *
* Author: DarkFeather <ircs://aninix.net:6697/DarkFeather> * Author: DarkFeather <ircs://aninix.net:6697/DarkFeather>
*/ */
static char * message = "Hello world!"; static char * message = "Hello, World!";
/// <summary> /// <summary>
/// Prints 'Hello world!' /// Prints 'Hello, World!'
/// </summary> /// </summary>
void HelloWorld() { void HelloWorld() {
printf("%s\n",message); printf("%s\n",message);

View File

@ -2,12 +2,12 @@ using System;
/* /*
* File: HelloWorld.cs * File: HelloWorld.cs
* *
* Description: This file exemplifies printing 'Hello world!' in C#. * Description: This file exemplifies printing 'Hello, World!' in C#.
* *
* Package: AniNIX/HelloWorld * Package: AniNIX/HelloWorld
* Copyright: WTFPL * Copyright: WTFPL
* *
* Author: DarkFeather <ircs://aninix.net:6697/DarkFeather> * Author: DarkFeather <ircs://aninix.net:6697/DarkFeather>
*/ */
@ -17,12 +17,12 @@ namespace AniNIX {
public sealed class HelloWorld { public sealed class HelloWorld {
// String to print // String to print
private static String _helloWorld="Hello world!"; private static String _helloWorld="Hello, World!";
/// <summary> /// <summary>
/// Print 'Hello world!' /// Print 'Hello, World!'
/// </summary> /// </summary>
public static void PrintHelloWorld() { public static void PrintHelloWorld() {
Console.WriteLine(_helloWorld); Console.WriteLine(_helloWorld);
} }

View File

@ -2,30 +2,30 @@ import java.lang.System;
/* /*
* File: HelloWorld.java * File: HelloWorld.java
* *
* Description: This file exemplifies printing 'Hello world!' in Java. * Description: This file exemplifies printing 'Hello, World!' in Java.
* *
* Package: AniNIX/HelloWorld * Package: AniNIX/HelloWorld
* Copyright: WTFPL * Copyright: WTFPL
* *
* Author: DarkFeather <ircs://aninix.net:6697/DarkFeather> * Author: DarkFeather <ircs://aninix.net:6697/DarkFeather>
*/ */
/// This class is used exemplify coding standard in Java /// This class is used exemplify coding standard in Java
public class HelloWorld { public class HelloWorld {
// String to print // String to print
private static String _helloWorld = "Hello world!"; private static String _helloWorld = "Hello, World!";
/// <summary> /// <summary>
/// Print 'Hello world!' /// Print 'Hello, World!'
/// </summary> /// </summary>
public static void PrintHelloWorld() { public static void PrintHelloWorld() {
System.out.println(_helloWorld); System.out.println(_helloWorld);
} }
/// MAIN /// MAIN
public static void main(String[] args) { public static void main(String[] args) {
PrintHelloWorld(); PrintHelloWorld();
} }
} }

View File

@ -1,22 +1,22 @@
<?php <?php
# File: HelloWorld.php # File: HelloWorld.php
# #
# Description: This file exemplifies printing 'Hello world!' in PHP. # Description: This file exemplifies printing 'Hello, World!' in PHP.
# #
# Package: AniNIX/HelloWorld # Package: AniNIX/HelloWorld
# Copyright: WTFPL # Copyright: WTFPL
# #
# Author: DarkFeather <ircs://aninix.net:6697/DarkFeather> # Author: DarkFeather <ircs://aninix.net:6697/DarkFeather>
### String to print ### String to print
$_helloWorld="Hello world!"; $_helloWorld="Hello, World!";
### <summary> ### <summary>
### Prints 'Hello world!' ### Prints 'Hello, World!'
### </summary> ### </summary>
function PrintHelloWorld() { function PrintHelloWorld() {
global $_helloWorld; global $_helloWorld;
echo $_helloWorld."\n"; echo $_helloWorld."\n";

View File

@ -1,19 +1,19 @@
#!/usr/bin/perl #!/usr/bin/perl
# File: HelloWorld.pl # File: HelloWorld.pl
# #
# Description: This file exemplifies printing 'Hello world!' in perl. # Description: This file exemplifies printing 'Hello, World!' in perl.
# #
# Package: AniNIX/HelloWorld # Package: AniNIX/HelloWorld
# Copyright: WTFPL # Copyright: WTFPL
# #
# Author: DarkFeather <ircs://aninix.net:6697/DarkFeather> # Author: DarkFeather <ircs://aninix.net:6697/DarkFeather>
### <summary> ### <summary>
### Prints 'Hello world!' ### Prints 'Hello, World!'
### </summary> ### </summary>
sub PrintHelloWorld { sub PrintHelloWorld {
print "Hello world!\n" print "Hello, World!\n"
} }
### MAIN ### MAIN

View File

@ -1,21 +1,21 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# File: HelloWorld.py # File: HelloWorld.py
# #
# Description: This file exemplifies printing 'Hello world!' in python. # Description: This file exemplifies printing 'Hello, World!' in python.
# #
# Package: AniNIX/HelloWorld # Package: AniNIX/HelloWorld
# Copyright: WTFPL # Copyright: WTFPL
# #
# Author: DarkFeather <ircs://aninix.net:6697/DarkFeather> # Author: DarkFeather <ircs://aninix.net:6697/DarkFeather>
### String to print ### String to print
_helloWorld='Hello world!' _helloWorld='Hello, World!'
### <summary> ### <summary>
### Prints 'Hello world!' ### Prints 'Hello, World!'
### </summary> ### </summary>
def PrintHelloWorld(): def PrintHelloWorld():
print(_helloWorld) print(_helloWorld)
### Main ### Main

View File

@ -28,8 +28,8 @@ checkperm:
c: HelloWorld.c /usr/bin/gcc c: HelloWorld.c /usr/bin/gcc
gcc -o HelloWorld HelloWorld.c gcc -o HelloWorld HelloWorld.c
java: HelloWorld.java /usr/lib/jvm/java-19-openjdk/bin/javac /usr/lib/jvm/java-19-openjdk/bin/java java: HelloWorld.java /usr/bin/javac /usr/bin/java
/usr/lib/jvm/java-19-openjdk/bin/javac HelloWorld.java /usr/bin/javac HelloWorld.java
bash: HelloWorld.bash /usr/bin/bash bash: HelloWorld.bash /usr/bin/bash
#bash HelloWorld.bash #bash HelloWorld.bash

View File

@ -1,11 +1,15 @@
This project is tracking basic standards of reference for getting started with various programming languages. That standard has always been a program that prints "Hello world!" This project is tracking basic standards of reference for getting started with various programming languages. That standard has always been a program that prints "Hello, World!"
# Etymology # Etymology
A program called ["Hello, World!"](https://en.wikipedia.org/wiki/%22Hello,_World!%22_program) has been a mainstay of computing for a long time, with some thinking it began with BCPL in 1967. Regardless, it is a common teaching tool for new programmers, and it is a way for a language to announce itself to the world. A program called ["Hello, World!"](https://en.wikipedia.org/wiki/%22Hello,_World!%22_program) has been a mainstay of computing for a long time, with some thinking it began with BCPL in 1967. Regardless, it is a common teaching tool for new programmers, and it is a way for a language to announce itself to the world.
# Relevant Files and Software # Relevant Files and Software
The relevant software for this is any executing engine for a language included in the project. For languages like C, they compile into local executables -- languages like Java & C# create compiled entities that need to execute within their runtime. Others, like Python & PHP, don't compile but execute within their respective binaries. Check the [test_unit.py](/AniNIX/HelloWorld/src/branch/main/tests/test_unit.py) file for more details on invocation. The relevant software for this is any executing engine for a language included in the project. For languages like C, they compile into local executables -- languages like Java & C# create compiled entities that need to execute within their runtime. Others, like Python & PHP, don't compile but execute within their respective binaries. Check the [test units](/AniNIX/HelloWorld/src/branch/main/tests) file for more details on invocation.
## Java
Per [ArchWiki's notes on Java](https://wiki.archlinux.org/title/Java#Installation), you need to use `archlinux-java` to set your java environment. We typically use the latest Java available.
# Available Clients # Available Clients

View File

@ -0,0 +1,22 @@
#!/bin/bash
#
# Find that we have tests for each file.
retcode=0
for language in `ls -1 ./HelloWorld.* | cut -f 3 -d '.'`; do
# Ensure there's a test file.
if [ ! -f tests/test_"${language}".py ]; then
echo "${language^} is missing a test file."
retcode=1
else
# Ensure that each test is defined.
if ! grep "^def test_${language}():$" tests/test_"${language}".py &>/dev/null; then
echo "${language^} doesn't have the right test definition."
retcode=1
fi
fi
done
exit $retcode

View File

@ -7,7 +7,7 @@ def checkOutput(output):
Ensure hello world is in string. Ensure hello world is in string.
return: whether hello world is present return: whether hello world is present
""" """
return output == 'Hello world!\n' return output == 'Hello, World!\n'
def runCommand(command): def runCommand(command):
""" """
@ -16,12 +16,11 @@ def runCommand(command):
return: Whether retcode is 0 return: Whether retcode is 0
""" """
fh = os.popen(command, mode='r', buffering=-1) fh = os.popen(command, mode='r', buffering=-1)
output = fh.read() fh.read()
retcode = fh.close() retcode = fh.close()
assert retcode == None return retcode == None
def runCommandAndCheckOutput(command):
def runCommandAndOutputCheck(command):
""" """
Define a function to run a shell command and ensure output is correct Define a function to run a shell command and ensure output is correct
param command: command param command: command
@ -30,4 +29,4 @@ def runCommandAndOutputCheck(command):
fh = os.popen(command, mode='r', buffering=-1) fh = os.popen(command, mode='r', buffering=-1)
output = fh.read() output = fh.read()
retcode = fh.close() retcode = fh.close()
assert retcode == None and CheckOutput(output) return retcode == None and checkOutput(output)

6
tests/test_bash.py Normal file
View File

@ -0,0 +1,6 @@
import os
import shutil
from tests.global_fns import *
def test_bash():
runCommandAndCheckOutput("./HelloWorld.bash")

View File

@ -1,24 +1,6 @@
import os import os
import re
import shutil import shutil
from tests.global_fns import * from tests.global_fns import *
def test_compile_c():
fh = os.popen("gcc -o HelloWorld ./HelloWorld.c", mode='r', buffering=-1)
output = fh.read()
retcode = fh.close()
assert retcode == None
def test_c(): def test_c():
fh = os.popen("./HelloWorld", mode='r', buffering=-1) runCommandAndCheckOutput("./HelloWorld")
output = fh.read()
retcode = fh.close()
assert retcode == None and checkOutput(output)
def test_c_cleanup():
fh = os.popen("rm ./HelloWorld", mode='r', buffering=-1)
output = fh.read()
retcode = fh.close()
assert retcode == None

6
tests/test_cs.py Normal file
View File

@ -0,0 +1,6 @@
import os
import shutil
from tests.global_fns import *
def test_cs():
runCommandAndCheckOutput("mono ./HelloWorld.exe")

6
tests/test_java.py Normal file
View File

@ -0,0 +1,6 @@
import os
import shutil
from tests.global_fns import *
def test_java():
runCommandAndCheckOutput("/usr/bin/java HelloWorld")

6
tests/test_php.py Normal file
View File

@ -0,0 +1,6 @@
import os
import shutil
from tests.global_fns import *
def test_php():
runCommandAndCheckOutput("php ./HelloWorld.php")

6
tests/test_pl.py Normal file
View File

@ -0,0 +1,6 @@
import os
import shutil
from tests.global_fns import *
def test_pl():
runCommandAndCheckOutput("")

6
tests/test_py.py Normal file
View File

@ -0,0 +1,6 @@
import os
import shutil
from tests.global_fns import *
def test_py():
runCommandAndCheckOutput("./HelloWorld.py")

View File

@ -1,63 +0,0 @@
import os
import re
import shutil
def CheckOutput(output):
return output == 'Hello world!\n'
def test_make():
print(os.getcwd())
fh = os.popen("/bin/bash -c 'make compile'", mode='r', buffering=-1)
output = fh.read()
retcode = fh.close()
assert retcode == None
def test_c():
print(os.getcwd())
fh = os.popen("./HelloWorld", mode='r', buffering=-1)
output = fh.read()
retcode = fh.close()
assert retcode == None and CheckOutput(output)
def test_cs():
print(os.getcwd())
fh = os.popen("mono ./HelloWorld.exe", mode='r', buffering=-1)
output = fh.read()
retcode = fh.close()
assert retcode == None and CheckOutput(output)
def test_java():
print(os.getcwd())
fh = os.popen("/usr/lib/jvm/java-19-openjdk/bin/java HelloWorld", mode='r', buffering=-1)
output = fh.read()
retcode = fh.close()
assert retcode == None and CheckOutput(output)
def test_bash():
print(os.getcwd())
fh = os.popen("./HelloWorld.bash", mode='r', buffering=-1)
output = fh.read()
retcode = fh.close()
assert retcode == None and CheckOutput(output)
def test_perl():
print(os.getcwd())
fh = os.popen("./HelloWorld.pl", mode='r', buffering=-1)
output = fh.read()
retcode = fh.close()
assert retcode == None and CheckOutput(output)
def test_php():
print(os.getcwd())
fh = os.popen("php ./HelloWorld.php", mode='r', buffering=-1)
output = fh.read()
retcode = fh.close()
assert retcode == None and CheckOutput(output)
def test_python():
print(os.getcwd())
fh = os.popen("./HelloWorld.py", mode='r', buffering=-1)
output = fh.read()
retcode = fh.close()
assert retcode == None and CheckOutput(output)