import org.scalatest.FunSuite


    import ArgsOps._

    val parser = ArgsOpsParser("--someInt|-i" -> 4, "--someFlag|-f", "--someWord|-w" -> "hello")

    test("the ArgsOps parser rejects unknow options") {
        intercept[UnknownParam](parser <<| Array("--unknown"))
    }

    test("the ArgsOps parser rejects options without args"){
        intercept[OptionWithoutExpectedParam](parser <<| Array("--someInt","--someFlag"))
        intercept[OptionWithoutExpectedParam](parser <<| Array("--someInt", "3x"))
        intercept[OptionWithoutExpectedParam](parser <<| Array("--someInt"))
        intercept[OptionWithoutExpectedParam](parser <<| Array("--someWord", "--someFlag"))
        intercept[OptionWithoutExpectedParam](parser <<| Array("--someWord"))
    }
    
    test("the ArgsOps parser reads the correct values"){
        val argsOps = parser <<| Array("--someInt", "3", "--someFlag", "--someWord", "goodbye")
        assert(argsOps("--someInt").asInt == 3)
        assert(argsOps("--someFlag").asBoolean == true)
        assert(argsOps("--someWord").asString == "goodbye")
    }

    test("the ArgsOps parser accepts shorted name"){
        val argsOps = parser <<| Array("-i", "3", "-f", "-w", "goodbye")
        assert(argsOps("-i").asInt == 3)
        assert(argsOps("-f").asBoolean == true)
        assert(argsOps("-w").asString == "goodbye")
    }

    test("the ArgsOps parser is coherent between shorted and complet names"){
        val argsOps = parser <<| Array("-i", "3", "-f", "-w", "goodbye")
        assert(argsOps("--someInt") == argsOps("-i"))
        assert(argsOps("--someFlag") == argsOps("-f"))
        assert(argsOps("--someWord") == argsOps("-w"))
    }

    test("the ArgsOps parser keeps the correct default values"){
        val argsOps = parser <<| Array("arg")
        val someInt : Int = argsOps("--someInt")
        val someFlag : Boolean = argsOps("--someFlag")
        val someWord : String = argsOps("--someWord")
        assert(someInt == 4)
        assert(someFlag == false)
        assert(someWord == "hello")
    }

    test("the ArgsOps parser keeps the correct number of arg"){
        val argsOps = parser <<| Array("--someInt", "3", "--someFlag", "--someWord", "goodbye", "arg0", "arg1", "arg2")
        assert(argsOps.args(0) == "arg0")
        assert(argsOps.args(1) == "arg1")
        assert(argsOps.args(2) == "arg2")
    }

}