subroutine test_state_items_complete(this)
class(MpiTestMethod), intent(inout) :: this
integer :: status
type(ESMF_GridComp) :: outer_gc
type(ESMF_Field) :: f
type(OuterMetaComponent), pointer :: outer_meta
type(MultiState) :: states
call setup(outer_gc, states, status)
@assert_that(status, is(0))
outer_meta => get_outer_meta(outer_gc, rc=status)
@assert_that(status, is(0))
call check('child_A', 'import', 'I_A1', ESMF_FIELDSTATUS_EMPTY, rc=status)
@assert_that(status, is(0))
call check('child_A', 'export', 'E_A1', ESMF_FIELDSTATUS_COMPLETE, rc=status)
@assert_that(status, is(0))
call check('child_B', 'import', 'I_B1', ESMF_FIELDSTATUS_COMPLETE, rc=status)
@assert_that(status, is(0))
call check('child_B', 'export', 'E_B1', ESMF_FIELDSTATUS_EMPTY, rc=status)
@assert_that(status, is(0))
if(.false.) print*,shape(this)
contains
subroutine check(child_name, state_intent, item, expected_status, rc)
character(*), intent(in) :: child_name
character(*), intent(in) :: state_intent
character(*), intent(in) :: item
type(ESMF_FieldStatus_Flag), intent(in) :: expected_status
integer, optional, intent(out) :: rc
type(MultiState) :: states
type(ESMF_State) :: state
type(GriddedComponentDriver) :: child_comp
type(ESMF_FieldStatus_Flag) :: field_status
rc = -1
child_comp = outer_meta%get_child(child_name, rc=status)
@assert_that('child <'//child_name//'> not found.', status, is(0))
states = child_comp%get_states()
call states%get_state(state, state_intent, rc=status)
@assert_that(status, is(0))
call ESMF_StateGet(state, item, f, rc=status)
@assert_that('Item <'//item//'> not found in child <'//child_name//'>.', status, is(0))
call ESMF_FieldGet(f, status=field_status, rc=status)
@assert_that('FieldGet failed? ', status, is(0))
@assert_that(expected_status == field_status, is(true()))
rc = 0
end subroutine check
end subroutine test_state_items_complete