// Copyright (c) 2012, 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.


class Conster {
  const Conster(this.value);

  final value;

  toString() {
    return value.toString();
  }
}

main() {
  testEmpty();
  testInterpolation();
  testMultiline();
}

testEmpty() {
  Expect.equals("", (const Conster("" "" "")).toString());
  Expect.equals("", (const Conster("" '' "")).toString());
  Expect.equals("", (const Conster("" "" r"")).toString());

  Expect.equals("a", (const Conster("a" "")).toString());
  Expect.equals("a", (const Conster("a" '')).toString());
  Expect.equals("a", (const Conster("a" r'')).toString());

  Expect.equals("b", (const Conster('b' "")).toString());
  Expect.equals("b", (const Conster('b' '')).toString());
  Expect.equals("b", (const Conster('b' r'')).toString());

  Expect.equals("c", (const Conster(r'c' "")).toString());
  Expect.equals("c", (const Conster(r'c' '')).toString());
  Expect.equals("c", (const Conster(r'c' r'')).toString());

  Expect.equals("a", (const Conster("" "a")).toString());
  Expect.equals("a", (const Conster("" 'a')).toString());
  Expect.equals("a", (const Conster("" r'a')).toString());

  Expect.equals("b", (const Conster('' "b")).toString());
  Expect.equals("b", (const Conster('' 'b')).toString());
  Expect.equals("b", (const Conster('' r'b')).toString());

  Expect.equals("c", (const Conster(r'' "c")).toString());
  Expect.equals("c", (const Conster(r'' 'c')).toString());
  Expect.equals("c", (const Conster(r'' r'c')).toString());
}

const s = "a";

testInterpolation() {
  Expect.equals(r"ab", (const Conster("$s" "b")).toString());
  Expect.equals(r"ab", (const Conster('$s' "b")).toString());
  Expect.equals(r"$sb", (const Conster(r'$s' "b")).toString());

  Expect.equals(r"-a-b", (const Conster("-$s-" "b")).toString());
  Expect.equals(r"-a-b", (const Conster('-$s-' "b")).toString());
  Expect.equals(r"-$s-b", (const Conster(r'-$s-' "b")).toString());

  Expect.equals(r"ba", (const Conster('b' "$s")).toString());
  Expect.equals(r"ba", (const Conster('b' '$s')).toString());
  Expect.equals(r"b$s", (const Conster('b' r'$s')).toString());

  Expect.equals(r"b-a-", (const Conster('b' "-$s-")).toString());
  Expect.equals(r"b-a-", (const Conster('b' '-$s-')).toString());
  Expect.equals(r"b-$s-", (const Conster('b' r'-$s-')).toString());
}

testMultiline() {
  Expect.equals("abe",
                (const Conster("a"
                "b"
                "e")).toString());
  Expect.equals("a b e",
                (const Conster("a "
                "b "
                "e")).toString());
  Expect.equals("a b e",
                (const Conster("a"
                " b"
                " e")).toString());

  Expect.equals("abe", (const Conster("""
a""" "b" "e")).toString());
  Expect.equals("a b e", (const Conster("""
a""" " b" " e")).toString());

  Expect.equals("abe", (const Conster("""
a""" """
b""" """
e""")).toString());
}

