{{#if isOptional}}
  {{! Just go ahead and assign to the value, stripping the optionality bit off.  }}
  {{>test_value target=target definedValue=definedValue cluster=cluster isOptional=false depth=(incrementDepth depth)}}
{{else if isNullable}}
  {{#if (isLiteralNull definedValue)}}
    {{target}} = nil;
  {{else}}
    {{>test_value target=target definedValue=definedValue cluster=cluster isNullable=false depth=(incrementDepth depth)}}
  {{/if}}
{{else if isArray}}
  {{ensureIsArray definedValue~}}
  {
    NSMutableArray * temp_{{depth}} = [[NSMutableArray alloc] init];
    {{#each definedValue}}
      {{>test_value target=(concat "temp_" ../depth "[" @index "]") definedValue=this cluster=../cluster depth=(incrementDepth ../depth) type=../type isArray=false parent=../parent}}
    {{/each}}
    {{target}} = temp_{{depth}};
  }
{{else}}
  {{#if_is_struct type}}
    {{target}} = [[MTR{{asUpperCamelCase cluster}}Cluster{{asUpperCamelCase type}} alloc] init];
    {{#zcl_struct_items_by_struct_name type}}
      {{#if_include_struct_item_value ../definedValue name}}
        {{! target may be some place where we lost type information (e.g. an
            id), so add explicit cast when trying to assign to our
            properties. }}
        {{>test_value target=(concat "((MTR" (asUpperCamelCase ../cluster) "Cluster" (asUpperCamelCase ../type) " *)" ../target ")." (asStructPropertyName label)) definedValue=(lookup ../definedValue name) cluster=../cluster depth=(incrementDepth ../depth)}}
      {{/if_include_struct_item_value}}
    {{/zcl_struct_items_by_struct_name}}

  {{else}}
    {{target}} =
    {{#if (chip_tests_variables_has definedValue)}}
      [{{definedValue}} copy];
    {{else if (chip_tests_config_has definedValue)}}
      m{{asUpperCamelCase definedValue}}.HasValue() ?
      {{#if (isCharString type)}}
        [[NSString alloc] initWithBytes:m{{asUpperCamelCase definedValue}}.Value().data() length:m{{asUpperCamelCase definedValue}}.Value().size() encoding:NSUTF8StringEncoding] : @"{{chip_tests_config_get_default_value definedValue}}";
      {{else if (isOctetString type)}}
        [NSData dataWithBytes:m{{asUpperCamelCase definedValue}}.Value().data() length:m{{asUpperCamelCase definedValue}}.Value().size()] : {{> octetStringValue value=(chip_tests_config_get_default_value definedValue)}};
      {{else}}
        [NSNumber numberWith{{asObjectiveCNumberType definedValue type false}}:m{{asUpperCamelCase definedValue}}.Value()] :
        [NSNumber numberWith{{asObjectiveCNumberType definedValue type false}}:{{asTypedExpressionFromObjectiveC (chip_tests_config_get_default_value definedValue) type}}];
      {{/if}}
    {{else}}
      {{#if (isCharString type)}}
        @"{{definedValue}}";
      {{else if (isOctetString type)}}
        {{> octetStringValue value=definedValue}};
      {{else}}
        [NSNumber numberWith{{asObjectiveCNumberType definedValue type false}}:{{asTypedExpressionFromObjectiveC definedValue type}}];
      {{/if}}
    {{/if}}
  {{/if_is_struct}}
{{/if}}
