#!/usr/bin/ruby

do {
    class ArgParse () {

      class Option (long, bar=99) < ArgParse {
        method foo {
            self.bar
        }
      }

      has bar = 42

      method option(name) {
          Option(name)
      }
    }

    var opt = ArgParse().option(:f)

    assert_eq(opt.foo, 99)
    assert_eq(opt.bar, 99)
}

do {
    class ArgParse () {

      class Option (long) < ArgParse {
        method foo {
            self.bar
        }
      }

      has bar = 42

      method option(name) {
          Option(name)
      }
    }

    var opt = ArgParse().option(:f)

    assert_eq(opt.foo, 42)
    assert_eq(opt.bar, 42)
}

do {
    class ArgParse () {

      class Option (long) {
        method foo {
            self.bar
        }
      }

      has bar = 42

      method option(name) {
          Option(name)
      }
    }

    var opt = ArgParse().option(:f)

    var error = 0
    try {
        opt.foo     # must fail
    }
    catch {
        ++error
    }

    assert_eq(error, 1)
}

say "** Test passed!"