// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package codegen

const testBaseTemplate = `
{{- define "TestBase" -}}
{{- UseNatural -}}
// WARNING: This file is machine generated by fidlgen.

#pragma once

{{ $root := . -}}
{{ range .Headers -}}
#include <{{ . }}/{{ $root.IncludeStem }}.h>
{{ end -}}

#include <{{ .PrimaryHeader }}>

{{- range .Decls }}
  {{- if Eq .Kind Kinds.Protocol }}
{{ EnsureNamespace .TestBase }}
class {{ .TestBase.Name }} : public {{ . }} {
  public:
  virtual ~{{ .TestBase.Name }}() { }
  virtual void NotImplemented_(const std::string& name) = 0;

  {{- range .Methods }}
    {{- if .HasRequest }}
  void {{ template "RequestMethodSignature" . }} override {
    NotImplemented_("{{ .Name }}");
  }
    {{- end }}
  {{- end }}

};
  {{- end }}
{{- end -}}

{{ EndOfFile }}
{{ end }}
`
