// 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.

// Note: This test relies on LF line endings in the source file.

import "package:expect/expect.dart";

main() {
  {
    // Generates identical compile time constants.
    var s1 = "abcdefgh";
    var s2 =
        "abcd"
        "efgh";
    var s3 =
        "ab"
        "cd"
        "ef"
        "gh";
    var s4 =
        "a"
        "b"
        "c"
        "d"
        "e"
        "f"
        "g"
        "h";
    var s5 =
        "a"
        'b'
        r"c"
        r'd'
        """e"""
        '''f'''
        r"""g"""
        r'''h''';
    Expect.isTrue(identical(s1, s2));
    Expect.isTrue(identical(s1, s3));
    Expect.isTrue(identical(s1, s4));
    Expect.isTrue(identical(s1, s5));
  }
  {
    // Separating whitespace isn't necessary for the tokenizer.
    var s1 = "abcdefgh";
    var s2 =
        "abcd"
        "efgh";
    var s3 =
        "ab"
        "cd"
        "ef"
        "gh";
    var s4 =
        "a"
        "b"
        "c"
        "d"
        "e"
        "f"
        "g"
        "h";
    var s5 =
        "a"
        'b'
        r"c"
        r'd'
        """e"""
        '''f'''
        r"""g"""
        r'''h''';
    Expect.isTrue(identical(s1, s2));
    Expect.isTrue(identical(s1, s3));
    Expect.isTrue(identical(s1, s4));
    Expect.isTrue(identical(s1, s5));
    // "a""""""b""" should be tokenized as "a" """""b""", aka. "a" '""b'.
    Expect.isTrue(
      identical(
        'a""b',
        "a"
            """""b""",
      ),
    );
    // """a""""""""b""" is 'a' '""b'.
    Expect.isTrue(
      identical(
        'a""b',
        """a"""
            """""b""",
      ),
    );
    // Raw strings.
    Expect.isTrue(
      identical(
        'ab',
        "a"
            r"b",
      ),
    );
    Expect.isTrue(
      identical(
        'ab',
        r"a"
            "b",
      ),
    );
    Expect.isTrue(
      identical(
        'ab',
        r"a"
            r"b",
      ),
    );
  }

  // Newlines are just whitespace.
  var ms1 =
      "abc"
      "def"
      "ghi"
      "jkl";
  Expect.isTrue(identical("abcdefghijkl", ms1));

  // Works with multiline strings too.
  var ms2 =
      """abc
  def"""
      """
  ghi
  jkl
  """;
  Expect.isTrue(
    identical("abc\n  def  ghi\n  jkl\n  ", ms2),
    "Multiline: $ms2",
  );

  // Binds stronger than property access (it's considered one literal).
  Expect.equals(
    5,
    "ab"
            "cde"
        .length,
    "Associativity",
  );

  // Check that interpolations are handled correctly.
  {
    var x = "foo";
    var y = 42;
    var z = true;
    String e1 = "$x$y$z";
    Expect.equals(
      e1,
      "$x"
      "$y$z",
    );
    Expect.equals(
      e1,
      "$x$y"
      "$z",
    );
    Expect.equals(
      e1,
      "$x"
      "$y"
      "$z",
    );
    String e2 = "-$x-$y-$z-";
    Expect.equals(
      e2,
      "-"
          "$x"
          "-"
          "$y"
          "-"
          "$z"
          "-",
      "a",
    );
    Expect.equals(
      e2,
      "-$x"
          "-"
          "$y"
          "-"
          "$z"
          "-",
      "b",
    );
    Expect.equals(
      e2,
      "-"
          "$x-"
          "$y"
          "-"
          "$z"
          "-",
      "c",
    );
    Expect.equals(
      e2,
      "-"
          "$x"
          "-$y"
          "-"
          "$z"
          "-",
      "d",
    );
    Expect.equals(
      e2,
      "-"
          "$x"
          "-"
          "$y-"
          "$z"
          "-",
      "e",
    );
    Expect.equals(
      e2,
      "-"
          "$x"
          "-"
          "$y"
          "-$z"
          "-",
      "f",
    );
    Expect.equals(
      e2,
      "-"
          "$x"
          "-"
          "$y"
          "-"
          "$z-",
      "g",
    );
    Expect.equals(
      e2,
      "-"
          "$x-$y"
          "-"
          "$z"
          "-",
      "h",
    );
    Expect.equals(
      e2,
      "-"
          "$x-$y-$z"
          "-",
      "i",
    );

    Expect.equals(
      "-$x-$y-",
      "-"
          "$x"
          "-"
          "$y"
          "-",
    );
    Expect.equals(
      "-$x-$y",
      "-"
          "$x"
          "-"
          "$y",
    );
    Expect.equals(
      "-$x$y-",
      "-"
          "$x"
          "$y"
          "-",
    );
    Expect.equals(
      "$x-$y-",
      "$x"
          "-"
          "$y"
          "-",
    );

    Expect.equals(
      "$x$y",
      "$x"
          "$y",
    );
    Expect.equals(
      "$x$y",
      "$x"
          ""
          "$y",
    );
    Expect.equals(
      "$x$y",
      "$x"
          ""
          ""
          "$y",
    );
    Expect.equals(
      "$x-$y",
      "$x"
          "-"
          "$y",
    );
    Expect.equals(
      "$x-$y",
      "$x"
          "-"
          ""
          "$y",
    );
    Expect.equals(
      "$x-$y",
      "$x"
          ""
          "-"
          "$y",
    );
    Expect.equals(
      "$x-$y",
      "$x"
          ""
          "-"
          ""
          "$y",
    );

    Expect.equals(
      "$x--$y",
      "$x"
          "-"
          "-"
          "$y",
    );
    Expect.equals(
      "$x--$y",
      "$x"
          "-"
          "-"
          ""
          "$y",
    );
    Expect.equals(
      "$x--$y",
      "$x"
          "-"
          ""
          "-"
          "$y",
    );
    Expect.equals(
      "$x--$y",
      "$x"
          ""
          "-"
          "-"
          "$y",
    );

    Expect.equals(
      "$x---$y",
      "$x"
          "-"
          "-"
          "-"
          "$y",
    );
    Expect.equals(
      "$x---",
      "$x"
          "-"
          "-"
          "-",
    );
    Expect.equals(
      "---$y",
      "-"
          "-"
          "-"
          "$y",
    );

    Expect.equals(
      "$x-$y-$z",
      "${'$x'
              '-'
              '$y'}"
          "-"
          "$z",
    );

    Expect.equals(
      r"-foo-42-true-",
      r"-"
          "$x"
          r"""-"""
          """$y"""
          r'-'
          '$z'
          r'''-''',
      "j",
    );
    Expect.equals(
      r"-$x-42-true-",
      r"-"
          r"$x"
          r"""-"""
          """$y"""
          r'-'
          '$z'
          r'''-''',
      "k",
    );
    Expect.equals(
      r"-foo-$y-true-",
      r"-"
          "$x"
          r"""-"""
          r"""$y"""
          r'-'
          '$z'
          r'''-''',
      "l",
    );
    Expect.equals(
      r"-foo-42-$z-",
      r"-"
          "$x"
          r"""-"""
          """$y"""
          r'-'
          r'$z'
          r'''-''',
      "m",
    );
  }
}
