#!/usr/bin/ruby

# Tests for the if/elsif/else construct with comments in between

assert_eq(do {

    # If branch
    if (true) {
        'if'
    }

    # Elsif 1 branch
    elsif (false) {
        'elsif'
    }

    # Elsif 2 branch
    elsif (true) {
        'elsif2'
    }

    # Else branch
    else {
        'else'
    }

}, 'if');

assert_eq(do {

    # If branch
    if (false) {
        'if'
    }

    # Elsif 1 branch
    elsif (true) {
        'elsif #1'
    }

    # Elsif 2 branch
    elsif (true) {
        'elsif #2'
    }

    # Else branch
    else {
        'else'
    }

}, 'elsif #1');

assert_eq(do {

    # If branch
    if (false) {
        'if'
    }

    # Elsif 1 branch
    #     ...

    elsif (false) {
        'elsif #1'
    }

    # Elsif 2 branch

    elsif (true) {
        'elsif #2'
    }

    # Else branch

    else {
        'else'
    }
}, 'elsif #2');

assert_eq(do {

    # If branch
    if (false) {
        'if'
    }

    # Elsif 1 branch
    elsif (false) {
        'elsif #1'
    }

    # Elsif 2 branch
    #     ...
    elsif (false) {
        'elsif #2'
    }

    # Else branch
    #    ...
    else {
        'else'
    }

}, 'else');

assert_eq(do {

    # If branch
    if (true) {
        'if'
    }

    # Else branch
    #    ...
    else {
        'else'
    }
}, 'if')

assert_eq(do {

    # If branch
    if (false) {
        'if'
    }

    # Else branch
    #   ....
    else {
        'else'
    }
}, 'else')

do {
    var n = 1
    if (true) {
        n += 1
    }# Foo bar
if (false) {
        n += 42
    }

    assert_eq(n, 2)
}

do {
    var n = 1
    if (true) {
        n += 1
    }
# Foo bar
if (true) {
        n += 42
    }

    assert_eq(n, 44)
}

do {
    var n = 1
    if (true) {
        n += 1
    }
# Foo bar
if (false) {
        n += 42
    }

    assert_eq(n, 2)
}

do {
    var n = 1
    if (true) {
        n += 1
    }
# Foo bar
while (false) {
        n += 42
    }

    assert_eq(n, 2)
}

if (true) {
    assert_eq(__LINE__, 186)
}

## comment
## comment

if (true) {
    assert_eq(__LINE__, 193)
}

assert_eq(__LINE__, 196)

say '** Test passed!'