// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// @dart = 2.9

/// @assertion String indent
///  read-only
///  The string used for indention.
///
/// When generating multi-line output, this string is inserted once at the
/// beginning of each indented line for each level of indentation.
///
/// If null, the output is encoded as a single line.
/// @description Checks that this property returns the string used for indention.
/// @author sgrekhov@unipro.ru

import "dart:convert";
import "../../../Utils/expect.dart";

main() {
  JsonEncoder encoder = new JsonEncoder();
  Expect.isNull(encoder.indent);

  encoder = new JsonEncoder.withIndent(null);
  Expect.isNull(encoder.indent);

  encoder = new JsonEncoder.withIndent("");
  Expect.equals("", encoder.indent);

  encoder = new JsonEncoder.withIndent("  ");
  Expect.equals("  ", encoder.indent);

  encoder = new JsonEncoder.withIndent("--");
  Expect.equals("--", encoder.indent);

  encoder = new JsonEncoder.withIndent("Non-ASCII: отступ ");
  Expect.equals("Non-ASCII: отступ ", encoder.indent);
}
