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

#ifndef BASE_TEST_FONTCONFIG_UTIL_LINUX_H_
#define BASE_TEST_FONTCONFIG_UTIL_LINUX_H_

#include <stddef.h>

#include <string>

namespace base {
class FilePath;

// Initializes Fontconfig with a custom configuration suitable for tests.
void SetUpFontconfig();

// Deinitializes Fontconfig.
void TearDownFontconfig();

// Loads the font file at |path| into the current config, returning true on
// success.
bool LoadFontIntoFontconfig(const FilePath& path);

// Instructs Fontconfig to load |path|, an XML configuration file, into the
// current config, returning true on success.
bool LoadConfigFileIntoFontconfig(const FilePath& path);

// Writes |data| to a file in |temp_dir| and passes it to
// LoadConfigFileIntoFontconfig().
bool LoadConfigDataIntoFontconfig(const FilePath& temp_dir,
                                  const std::string& data);

// Returns a Fontconfig <edit> stanza.
std::string CreateFontconfigEditStanza(const std::string& name,
                                       const std::string& type,
                                       const std::string& value);

// Returns a Fontconfig <test> stanza.
std::string CreateFontconfigTestStanza(const std::string& name,
                                       const std::string& op,
                                       const std::string& type,
                                       const std::string& value);

// Returns a Fontconfig <alias> stanza.
std::string CreateFontconfigAliasStanza(const std::string& original_family,
                                        const std::string& preferred_family);

}  // namespace base

#endif  // BASE_TEST_FONTCONFIG_UTIL_LINUX_H_
