You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: metadata_test.go
    path of file: ./repos/rclone/fs
    
    the code of the file until where you have to start completion: package fs_test

import (
	"context"
	"fmt"
	"testing"
	"time"

	"github.com/rclone/rclone/fs"
	"github.com/rclone/rclone/fs/object"
	"github.com/rclone/rclone/fstest/mockfs"
	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
)

func TestMetadataSet(t *testing.T) {
	var m fs.Metadata
	assert.Nil(t, m)
	m.Set("key", "value")
	assert.NotNil(t, m)
	assert.Equal(t, "value", m["key"])
	m.Set("key", "value2")
	assert.Equal(t, "value2", m["key"])
}

func TestMetadataMerge(t *testing.T) {
	for _, test := range []struct {
		in    fs.Metadata
		merge fs.Metadata
		want  fs.Metadata
	}{
		{
			in:    fs.Metadata{},
			merge: fs.Metadata{},
			want:  fs.Metadata{},
		}, {
			in:    nil,
			merge: nil,
			want:  nil,
		}, {
			in:    nil,
			merge: fs.Metadata{},
			want:  nil,
		}, {
			in:    nil,
			merge: fs.Metadata{"a": "1", "b": "2"},
			want:  fs.M
    
func TestMetadataMapper(t *testing.T) {
	ctx := context.Background()
	ctx, ci := fs.AddConfig(ctx)
	ci.Metadata = true
	require.NoError(t, ci.MetadataMapper.Set("go run metadata_mapper_code.go"))
	now := time.Date(2001, 2, 3, 4, 5, 6, 7, time.UTC)
	f, err := mockfs.NewFs(ctx, "dstFs", "dstFsRoot", nil)
	require.NoError(t, err)

	t.Run("Normal", func(t *testing.T) {
		o := object.NewMemoryObject("file.txt", now, []byte("hello")).WithMetadata(fs.Metadata{
			"key1": "potato",
			"key2": "sausage",
			"key3": "gravy",
		})
		metadata, err := fs.GetMetadataOptions(ctx, f, o, nil)
		require.NoError(t, err)
		assert.Equal(t, fs.Metadata{
			"key0": "cabbage",
			"key1": "two potato",
			"key2": "sausage",
		}, metadata)
	})

	t.Run("Error", func(t *testing.T) {
		o := object.NewMemoryObject("file.txt", now, []byte("hello")).WithMetadata(fs.Metadata{
			"error": "Red Alert",
		})
		metadata, err := fs.GetMetadataOptions(ctx, f, o, nil)
		require.Error(t, err)
		assert.ErrorContains(t, err, "Red Alert")
		require.Nil(t, metadata)
	})

	t.Run("Merge", func(t *testing.T) {
		o := object.NewMemoryObject("file.txt", now, []byte("hello")).WithMetadata(fs.Metadata{
			"key1": "potato",
			"key2": "sausage",
			"key3": "gravy",
		})
		metadata, err := fs.GetMetadataOptions(ctx, f, o, []fs.OpenOption{fs.MetadataOption(fs.Metadata{
			"option": "optionValue",
			"key1":   "new potato",
			"key2":   "salami",
		})})
		require.NoError(t, err)
		assert.Equal(t, fs.Metadata{
			"key0":   "cabbage",
			"key1":   "two new potato",
			"key2":   "salami",
			"option": "optionValue",
		}, metadata)
	})
}