# Copyright 2012-2026 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

require allow_python_tests

if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
    return
}

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
}

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 field 0" {
	    -re ".*[child_scalar_type_description {field 'a' of 'struct SimpleStruct'} {int}].*" {
		pass "explore type struct SimpleStruct field 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 field 1" {
	    -re ".*[child_scalar_type_description {field 'd' of 'struct SimpleStruct'} {double}].*" {
		pass "explore type struct SimpleStruct field 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 field 0" {
	    -re ".*[child_scalar_type_description {field 'i' of 'union SimpleUnion'} {int}].*" {
		pass "explore type union SimpleUnion field 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 field 1" {
	    -re ".*[child_scalar_type_description {field 'c' of 'union SimpleUnion'} {char}].*" {
		pass "explore type union SimpleUnion field 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 field 2" {
	    -re ".*[child_scalar_type_description {field 'f' of 'union SimpleUnion'} {float}].*" {
		pass "explore type union SimpleUnion field 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 field 3" {
	    -re ".*[child_scalar_type_description {field 'd' of 'union SimpleUnion'} {double}].*" {
		pass "explore type union SimpleUnion field 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 field 0" {
	    -re ".*[child_scalar_type_description {field 'a' of 'SS'} {int}].*" {
		pass "explore type SS field 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 field 1" {
	    -re ".*[child_scalar_type_description {field 'd' of 'SS'} {double}].*" {
		pass "explore type SS field 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"
	    }
	}
    }
}

with_test_prefix "using 'cu'" {
    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"
		}
	    }
	}
    }
}
