# Copyright 2012-2013 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

standard_testfile

if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
    return -1
}

# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

set SS "struct SimpleStruct"
set SU "union SimpleUnion"
set CS "struct ComplexStruct"
set CU "union ComplexUnion"
set enter_field_number_prompt  {Enter the field number of choice: }
set return_to_parent_prompt {Press enter to return to parent value: }
set array_index_prompt {Enter the index of the element you want to explore in .*: }

proc compound_description { value_name type_desc type_name } {
    return "The value of '$value_name' is a $type_desc of type '$type_name' with the following fields:\[\r\n\]+"
}

proc typedef_description { value_name typedef_name type_name } {
    return "The value of '$value_name' is of type '$typedef_name' which is a typedef of type '$type_name'\.\[\r\n\]+"
}

proc scalar_description { value_name type } {
    return "'$value_name' is a scalar value of type '$type'\.\[\r\n\]+"
}

proc array_description { value_name type } {
    return "'$value_name' is an array of '$type'\.\[\r\n\]+"
}

proc pointer_description { value_name type_name } {
    set type_description "'$value_name' is a pointer to a value of type '$type_name'\.\[\r\n\]+"
    set prompt "Continue exploring it as a pointer to a single value \[\[\]y/n\[\]\]: " 
    return "$type_description$prompt"
}

proc field_values { args } {
    set result ""
    foreach field $args {
        set result "$result\[ \]*$field \[\.\]\[\.\] \[\(\]Value of type .*\[\)\]\[\r\n\]+"
    }
    return $result
}

proc field_choices { args } {
    set result ""
    set field_num 0
    foreach field $args {
        set result "$result$field\[ \]+=\[ \]+<Enter $field_num to explore this field of type .*"
        incr field_num
    }
    return $result
}

proc scalar_value { value_name value } {
    return "$value_name = $value\[r\n\]+"
}

set SS_fields [field_values {a = 10} {d = 100[.].*}]

if ![runto_main] {
   return -1
}

gdb_breakpoint [gdb_get_line_number "Break here."]
gdb_continue_to_breakpoint "Break here" ".*Break here.*"

#########################
# Value exploration tests
#########################

gdb_test "explore i" "[scalar_description {i} {int}].*i = .*"
gdb_test "explore ss" "[compound_description {ss} {struct/class} $SS].*$SS_fields"
gdb_test "explore *ss_ptr" "[compound_description {\*ss_ptr} {struct/class} $SS].*$SS_fields"
gdb_test "explore ss_t" "[typedef_description {ss_t} {SS} $SS].*[compound_description {ss_t} {struct/class} $SS].*$SS_fields"

gdb_test_multiple "explore ss_ptr" "" {
    -re "[pointer_description {ss_ptr} $SS].*" {
        pass "explore ss_ptr"
        gdb_test_multiple "y" "explore_as_single_value_pointer" {
            -re "$SS_fields.*$gdb_prompt" {
                pass "explore ss_ptr as single value pointer"
            }
        }
    }
}

gdb_test_multiple "explore darray_ref" "" {
    -re "[pointer_description {darray_ref} {double}].*" {
        pass "explore darray_ref"
        gdb_test_multiple "n" "no_to_explore_as_pointer" {
            -re "Continue exploring it as a pointer to an array \[\[\]y/n\[\]\]: " {
                pass "no_to_explore_as_pointer"
                gdb_test_multiple "y" "explore_as_array" {
                    -re ".*Enter the index of the element you want to explore in 'darray_ref':.*"  {
                        pass "explore_as_array"
                        gdb_test_multiple "2" "explore_as_array_index_2" {
                            -re ".*'darray_ref\\\[2\\\]' is a scalar value of type 'double'\..*darray_ref\\\[2\\\] = 0.*" {
                                pass "explore_as_array_index_2"
                                gdb_test_multiple "\0" "end explore_as_array_index_2" {
                                    -re ".*Returning to parent value.*Enter the index of the element you want to explore in 'darray_ref':.*" {
                                        pass "end explore_as_array_index_2"
                                        gdb_test_multiple "\0" "end explore_as_array" {
                                            -re "\[\n\r\]+$gdb_prompt" {
                                                pass "end explore_as_array"
                                            }
                                        }
                                    }
                                }
                            }
                        } 
                    }
                }
            }
        }
    }
}

gdb_test_multiple "explore su" "" {
    -re "[compound_description {su} {union} {union SimpleUnion}].*[field_choices {i} {c} {f} {d}].*$enter_field_number_prompt" {
        pass "explore su"
        gdb_test_multiple "3" "explore su.d" {
            -re "[scalar_description {su.d} {double}].*[scalar_value {su.d} {100[.].*}].*$return_to_parent_prompt" {
                pass "explore su.d"
                gdb_test_multiple " " "end su.d exploration" {
                    -re ".*[compound_description {su} {union} {union SimpleUnion}].*[field_choices {i} {c} {f} {d}].*$enter_field_number_prompt" {
                        pass "end su.d exploration"
                        gdb_test_multiple "\0" "end su exploration" {
                            -re "$gdb_prompt" {
                                pass "end su exploration"
                            }
                        }
                    }
                }
            }
        }
    }
}

gdb_test_multiple "explore cs" "" {
    -re "[compound_description {cs} {struct/class} {struct ComplexStruct}].*[field_choices {s} {u} {sa}].*$enter_field_number_prompt" {
        pass "explore cs"
        gdb_test_multiple "0" "explore cs.s" {
            -re "[compound_description {cs.s} {struct/class} {struct SimpleStruct}].*[field_values {a = 10} {d = 100[.].*}].*$return_to_parent_prompt" {
                pass "explore cs.s"
                gdb_test_multiple " " "end cs.s exploration" {
                    -re ".*$enter_field_number_prompt" {
                        pass "end cs.s exploration"
                    }
                }
            }
        }
        gdb_test_multiple "1" "explore cs.u" {
            -re "[compound_description {cs.u} {union} {union SimpleUnion}].*.*[field_choices {i} {c} {f} {d}].*$enter_field_number_prompt" {
                pass "explore cs.u"
                gdb_test_multiple " " "end cs.u exploration" {
                    -re ".*$enter_field_number_prompt" {
                        pass "end cs.u exploration"
                    }
                }
            }
        }
        gdb_test_multiple "\0" "explore cs.u" {
            -re "$gdb_prompt" {
                pass "end cs exploration"
            }
        }
    }
}

gdb_test_multiple "explore cu" "" {
    -re "[compound_description {cu} {union} {union ComplexUnion}].*[field_choices {s} {sa}].*$enter_field_number_prompt" {
        pass "explore cu"
        gdb_test_multiple "1" "explore cu.sa" {
            -re ".*[array_description {cu.sa} $SS].*$array_index_prompt" {
                pass "explore cu.sa"
                gdb_test_multiple "0" "explore cu.sa\[0\]" {
                    -re "[compound_description {\(cu.sa\)\[0\]} {struct/class} {struct SimpleStruct}].*[field_values {a = 0} {d = 100[.].*}].*$return_to_parent_prompt" {
                        pass "explore cu.sa\[0\]"
                        gdb_test_multiple "\0" "end cu.sa\[0\] exploration" {
                            -re "[array_description {cu.sa} $SS]$array_index_prompt" {
                                pass "end cu.sa\[0\] exploration"
                            }
                        }
                    }
                }
                gdb_test_multiple "\0" "end cu.sa exploration" {
                    -re ".*$enter_field_number_prompt" {
                        pass "end cu.sa exploration"
                        gdb_test_multiple "\0" "end cu exploration" {
                            -re "$gdb_prompt" {
                                pass "end cu exploration"
                            }
                        }
                    }
                }
            }
        }
    }
}

########################
# Type exploration tests
########################

proc scalar_type_decsription {type} {
    return "'$type' is a scalar type\."
}

proc child_scalar_type_description {path type} {
    return "$path is of a scalar type '$type'\."
}

proc compound_type_description { type_name type_desc } {
    return "'$type_name' is a $type_desc with the following fields:"
}

proc child_compound_type_description { path type_name type_desc } {
    return "$path is a $type_desc of type '$type_name' with the following fields:"
}

proc child_array_type_description { path target_type_name } {
    return "$path is an array of '$target_type_name'\."
}

proc typedef_type_description { type_name target_name } {
    return "The type '$type_name' is a typedef of type '$target_name'\."
}

set SS_fields_types [field_choices {a} {d}]
set SU_fields_types [field_choices {i} {c} {f} {d}]
set CS_fields_types [field_choices {s} {u} {sa}]
set CU_fields_types [field_choices {s} {sa}]

set CS_field_0 "field 's' of 'struct ComplexStruct'"
set CS_field_1 "field 'u' of 'struct ComplexStruct'"
set CS_field_2 "field 'sa' of 'struct ComplexStruct'"
set CS_field_2_array_element "an array element of $CS_field_2"

set CU_field_0 "field 's' of 'union ComplexUnion'"
set CU_field_1 "field 'sa' of 'union ComplexUnion'"
set CU_field_1_array_element "an array element of $CU_field_1"

gdb_test "explore int" ".*[scalar_type_decsription {int}].*"

gdb_test_multiple "explore struct SimpleStruct" "" {
    -re ".*[compound_type_description $SS {struct/class}].*$SS_fields_types.*" {
        pass "explore struct SimpleStruct"
        gdb_test_multiple "0" "explore type struct SimpleStruct feild 0" {
            -re ".*[child_scalar_type_description {field 'a' of 'struct SimpleStruct'} {int}].*" {
                pass "explore type struct SimpleStruct feild 0"
                gdb_test_multiple "\0" "return to struct SimpleStruct from field 0" {
                    -re ".*[compound_type_description $SS {struct/class}].*$SS_fields_types.*" {
                        pass "return to struct SimpleStruct from field 0"
                    }
                }
            }
        }
        gdb_test_multiple "1" "explore type struct SimpleStruct feild 1" {
            -re ".*[child_scalar_type_description {field 'd' of 'struct SimpleStruct'} {double}].*" {
                pass "explore type struct SimpleStruct feild 1"
                gdb_test_multiple "\0" "return to struct SimpleStruct from field 1" {
                    -re ".*[compound_type_description $SS {struct/class}].*$SS_fields_types.*" {
                        pass "return to struct SimpleStruct from field 1"
                    }
                }
            }
        }
        gdb_test_multiple "\0" "return to GDB prompt from struct SimpleStruct" {
            -re "$gdb_prompt" {
                pass "return to GDB prompt from struct SimpleStruct"
            }
        }
    }
}

gdb_test_multiple "explore union SimpleUnion" "" {
  -re ".*[compound_type_description $SU {union}].*$SU_fields_types.*" {
      pass "explore union SimpleUnion"
        gdb_test_multiple "0" "explore type union SimpleUnion feild 0" {
            -re ".*[child_scalar_type_description {field 'i' of 'union SimpleUnion'} {int}].*" {
                pass "explore type union SimpleUnion feild 0"
                gdb_test_multiple "\0" "return to union SimpleUnion from field 0" {
                    -re ".*[compound_type_description $SU {union}].*$SU_fields_types.*" {
                        pass "return to union SimpleUnion from field 0"
                    }
                }
            }
        }
        gdb_test_multiple "1" "explore type union SimpleUnion feild 1" {
            -re ".*[child_scalar_type_description {field 'c' of 'union SimpleUnion'} {char}].*" {
                pass "explore type union SimpleUnion feild 1"
                gdb_test_multiple "\0" "return to union SimpleUnion from field 1" {
                    -re ".*[compound_type_description $SU {union}].*$SU_fields_types.*" {
                        pass "return to union SimpleUnion from field 1"
                    }
                }
            }
        }
        gdb_test_multiple "2" "explore type union SimpleUnion feild 2" {
            -re ".*[child_scalar_type_description {field 'f' of 'union SimpleUnion'} {float}].*" {
                pass "explore type union SimpleUnion feild 2"
                gdb_test_multiple "\0" "return to union SimpleUnion from field 2" {
                    -re ".*[compound_type_description $SU {union}].*$SU_fields_types.*" {
                        pass "return to union SimpleUnion from field 2"
                    }
                }
            }
        }
        gdb_test_multiple "3" "explore type union SimpleUnion feild 3" {
            -re ".*[child_scalar_type_description {field 'd' of 'union SimpleUnion'} {double}].*" {
                pass "explore type union SimpleUnion feild 3"
                gdb_test_multiple "\0" "return to union SimpleUnion from field 3" {
                    -re ".*[compound_type_description $SU {union}].*$SU_fields_types.*" {
                        pass "return to union SimpleUnion from field 3"
                    }
                }
            }
        }
        gdb_test_multiple "\0" "return to GDB prompt from union SimpleUnion" {
            -re "$gdb_prompt" {
                pass "return to GDB prompt from union SimpleUnion"
            }
        }
  }
}

gdb_test_multiple "explore SS" "" {
    -re ".*[typedef_type_description {SS} $SS].*[compound_type_description {SS} {struct/class}].*$SS_fields_types.*" {
        pass "explore SS"
        gdb_test_multiple "0" "explore type SS feild 0" {
            -re ".*[child_scalar_type_description {field 'a' of 'SS'} {int}].*" {
                pass "explore type SS feild 0"
                gdb_test_multiple "\0" "return to SS from field 0" {
                    -re ".*[compound_type_description {SS} {struct/class}].*$SS_fields_types.*" {
                        pass "return to SS from field 0"
                    }
                }
            }
        }
        gdb_test_multiple "1" "explore type SS feild 1" {
            -re ".*[child_scalar_type_description {field 'd' of 'SS'} {double}].*" {
                pass "explore type SS feild 1"
                gdb_test_multiple "\0" "return to struct SimpleStruct from field 1" {
                    -re ".*[compound_type_description {SS} {struct/class}].*$SS_fields_types.*" {
                        pass "return to SS field 1"
                    }
                }
            }
        }
        gdb_test_multiple "\0" "return to GDB prompt from SS" {
            -re "$gdb_prompt" {
                pass "return to GDB prompt from SS"
            }
        }
    }
}

gdb_test_multiple "explore type struct ComplexStruct" "" {
    -re ".*[compound_type_description $CS {struct/class}].*$CS_fields_types.*" {
        pass "explore type struct ComplexStruct"
        gdb_test_multiple "0" "explore type struct ComplexStruct field 0" {
            -re ".*[child_compound_type_description $CS_field_0 $SS {struct/class}].*$SS_fields_types.*" {
                pass "explore type struct ComplexStruct field 0"
                gdb_test_multiple "\0" "return to ComplexStruct from field 0" {
                    -re ".*[compound_type_description $CS {struct/class}].*$CS_fields_types.*" {
                        pass "return to ComplexStruct from field 0"
                    }
                }
            }
        }
        gdb_test_multiple "1" "explore type struct ComplexStruct field 1" {
            -re ".*[child_compound_type_description $CS_field_1 $SU {union}].*$SU_fields_types.*" {
                pass "explore type struct ComplexStruct field 1"
                gdb_test_multiple "\0" "return to ComplexStruct from field 1" {
                    -re ".*[compound_type_description $CS {struct/class}].*$CS_fields_types.*" {
                        pass "return to ComplexStruct from field 1"
                    }
                }
            }
        }
        gdb_test_multiple "2" "explore type struct ComplexStruct field 2" {
            -re ".*[child_array_type_description $CS_field_2 {SS}].*" {
                pass "explore type struct ComplexStruct field 2"
                gdb_test_multiple "\0" "return to ComplexStruct from field 2" {
                    -re ".*[compound_type_description $CS {struct/class}].*$CS_fields_types.*" {
                        pass "return to ComplexStruct from field 2"
                    }
                }
            }
        }
        gdb_test_multiple "\0" "return to GDB prompt from ComplexStruct type exploration" {
            -re "$gdb_prompt" {
                pass "return to GDB prompt from ComplexStruct type exploration"
            }
        }
    }
}

gdb_test_multiple "explore type union ComplexUnion" "" {
    -re ".*[compound_type_description $CU {union}].*$CU_fields_types.*" {
        pass "explore type union ComplexUnion"
        gdb_test_multiple "0" "explore type union ComplexStruct field 0" {
            -re ".*[child_compound_type_description $CU_field_0 $SS {struct/class}].*$SS_fields_types.*" {
                pass "explore type union ComplexUnion field 0"
                gdb_test_multiple "\0" "return to ComplexUnion from field 0" {
                    -re ".*[compound_type_description $CU {union}].*$CU_fields_types.*" {
                        pass "return to ComplexUnion from field 0"
                    }
                }
            }
        }
        gdb_test_multiple "1" "explore type union ComplexUnion field 1" {
            -re ".*[child_array_type_description $CU_field_1 $SS].*" {
                pass "explore type union ComplexUnion field 1"
                gdb_test_multiple "\0" "return to ComplexUnion array" {
                    -re ".*[compound_type_description $CU {union}].*$CU_fields_types.*" {
                        pass "return to ComplexUnion from field 1"
                    }
                }
            }
        }
        gdb_test_multiple "\0" "return to GDB prompt from ComplexUnion type exploration" {
            -re "$gdb_prompt" {
                pass "return to GDB prompt from ComplexUnion type exploration"
            }
        }
    }
}

gdb_test_multiple "explore type cu" "" {
    -re "'cu' is of type 'union ComplexUnion'.*[compound_type_description $CU {union}].*$CU_fields_types.*" {
        pass "explore type union ComplexUnion"
        gdb_test_multiple "0" "explore type union ComplexStruct field 0" {
            -re ".*[child_compound_type_description $CU_field_0 $SS {struct/class}].*$SS_fields_types.*" {
                pass "explore type union ComplexUnion field 0"
                gdb_test_multiple "\0" "return to ComplexUnion from field 0" {
                    -re ".*[compound_type_description $CU {union}].*$CU_fields_types.*" {
                        pass "return to ComplexUnion from field 0"
                    }
                }
            }
        }
        gdb_test_multiple "1" "explore type union ComplexUnion field 1" {
            -re ".*[child_array_type_description $CU_field_1 $SS].*" {
                pass "explore type union ComplexUnion field 1"
                gdb_test_multiple "\0" "return to ComplexUnion array" {
                    -re ".*[compound_type_description $CU {union}].*$CU_fields_types.*" {
                        pass "return to ComplexUnion from field 1"
                    }
                }
            }
        }
        gdb_test_multiple "\0" "return to GDB prompt from ComplexUnion type exploration" {
            -re "$gdb_prompt" {
                pass "return to GDB prompt from ComplexUnion type exploration"
            }
        }
    }
}
