argument_spec_builder.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef EXTENSIONS_RENDERER_BINDINGS_ARGUMENT_SPEC_BUILDER_H_
  5. #define EXTENSIONS_RENDERER_BINDINGS_ARGUMENT_SPEC_BUILDER_H_
  6. #include <memory>
  7. #include <set>
  8. #include <vector>
  9. #include "base/strings/string_piece.h"
  10. #include "extensions/renderer/bindings/argument_spec.h"
  11. namespace extensions {
  12. // A utility class for helping construct ArgumentSpecs in tests.
  13. // NOTE: This is designed to be test-only. It's not worth adding to production
  14. // code because it's a) only a bit of syntactic sugar and b) rife with footguns.
  15. class ArgumentSpecBuilder {
  16. public:
  17. explicit ArgumentSpecBuilder(ArgumentType type);
  18. ArgumentSpecBuilder(ArgumentType type, base::StringPiece name);
  19. ArgumentSpecBuilder(const ArgumentSpecBuilder&) = delete;
  20. ArgumentSpecBuilder& operator=(const ArgumentSpecBuilder&) = delete;
  21. ~ArgumentSpecBuilder();
  22. ArgumentSpecBuilder& MakeOptional();
  23. ArgumentSpecBuilder& AddProperty(base::StringPiece property_name,
  24. std::unique_ptr<ArgumentSpec> property_spec);
  25. ArgumentSpecBuilder& SetMinimum(int minimum);
  26. ArgumentSpecBuilder& SetListType(std::unique_ptr<ArgumentSpec> list_type);
  27. ArgumentSpecBuilder& SetRef(base::StringPiece ref);
  28. ArgumentSpecBuilder& SetChoices(
  29. std::vector<std::unique_ptr<ArgumentSpec>> choices);
  30. ArgumentSpecBuilder& SetEnums(std::set<std::string> enum_values);
  31. ArgumentSpecBuilder& SetAdditionalProperties(
  32. std::unique_ptr<ArgumentSpec> additional_properties);
  33. ArgumentSpecBuilder& SetInstanceOf(std::string instance_of);
  34. ArgumentSpecBuilder& PreserveNull();
  35. std::unique_ptr<ArgumentSpec> Build();
  36. private:
  37. std::unique_ptr<ArgumentSpec> spec_;
  38. ArgumentSpec::PropertiesMap properties_;
  39. };
  40. } // namespace extensions
  41. #endif // EXTENSIONS_RENDERER_BINDINGS_ARGUMENT_SPEC_BUILDER_H_