A repository for testing and demonstrating the Console.Waterworks (Full & Core) NuGet packages. The main aim is to see how well they work in an F#-only environment.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
3.8 KiB

namespace Commands
module ConsoleCommands =
open System
open Console.Waterworks.Core
open Console.Waterworks.Core.Attributes
open FunkyFishCore // This is where the "LibraryTest" functions are -- in BFLibCore
[<ListCommand>]
[<Description "Display a message to the console signifying the program is running as intended.">]
[<Parameters "none">]
[<Usage "> test">]
let test() = "The console is working"
[<ListCommand>]
[<Description "Closes the program.">]
[<Parameters "none">]
[<Usage "> exit">]
let exit() = System.Environment.Exit(Environment.ExitCode)
[<ListCommand>]
[<Description "Display a list of available commands, info. about the command, its parameters and an example of how to use it.">]
[<Parameters "None">]
[<Usage "> help">]
let help() =
let liaison = CW_Liaison()
liaison.RequestHelpDocumentation("Commands")
[<ListCommand>]
[<Description "Adds the two numbers together.">]
[<Parameters "x:int y:int">]
[<Usage "> libtest1 5 10">]
let libtest1 x y = String.Format("Result: {0}" , LibraryTest1 x y)
[<ListCommand>]
[<Description "Multiplies x and y together then mulitplies that by z or... (x * y) * z">]
[<Parameters "x:int y:int z:int">]
[<Usage "> libtest2 5 10 2">]
let libtest2 x y z = String.Format("Result: {0}", (LibraryTest2 x y z))
[<ListCommand>]
[<Description "Appends the named passed into the console onto \"Hello\" and displays it in the console.">]
[<Parameters "name: string">]
[<Usage "> libtest3 \"Craig Oates\"">]
let libtest3 name = String.Format("Result: {0}", LibraryTest3 name)
(*
WARNING: Here are some gotchas.
===============================
(I will explain using "test 1" as the example but it applies to all of the below.)
This command-method looks like it works but it is a false-positive.
The reason why it "works" in this instance is because there is a command-method called "Test" up above (line 13).
Console.Waterworks interprets the input as "Test" is the command-method and "1" is a parameter.
The same goes for the others with a space in their name.
Because Test does not take any parameteres, Console.Waterworks ignores the extra input from the user.
Console.Waterworks only worries about the parameters when the command-method specifies it requires them.
GENERAL RULE:
=============
Avoid using F# features for creating variables, functions Etc. with spaces in them.
*)
[<ListCommand>]
[<Description "Displays a message in the console, signfying the command-method is working.">]
[<Parameters "none">]
[<Usage "> test 1">]
let ``test 1``() = "Result: Test 1 working"
(* This does not work.*)
[<ListCommand>]
[<Description "Displays a message in the console, signfying the command-method is working. The command uses F#'s double back-tick notation.">]
[<Parameters "none">]
[<Usage "> > test-2">]
let ``test-2``() = "Result: Test 2 working"
(* This does work. *)
[<ListCommand>]
[<Description "Displays a message in the console, signfying the command-method is working.">]
[<Parameters "none">]
[<Usage "> test 3">]
let """test 3""" = "Result: Test 3 working"
(* This does not work. *)
[<ListCommand>]
[<Description "Displays a message in the console, signfying the command-method is working.">]
[<Parameters "none">]
[<Usage "> test 4">]
let """test-4""" = "Result: Test 4 working"
(* This does not work. *)