<commit_before>package scala.tools.eclipse.lexical

import scala.xml.Elem
import org.eclipse.jface.text.IDocument
import org.junit.Assert._
import org.junit.{ Test, Before }

import scala.tools.eclipse.lexical.ScalaPartitions._
import org.eclipse.jface.text.IDocument.DEFAULT_CONTENT_TYPE
import org.eclipse.jdt.ui.text.IJavaPartitions._

class ScalaPartitionTokeniserTest {
  import ScalaPartitionTokeniserTest._

  @Test
  def defaultContent {
    // 000000000011111111112222222222333333333344444444444
    // 012345678901234567890123456789012345678901234567890 
    """package foo""" ==> ((DEFAULT_CONTENT_TYPE, 0, 10))
  }

  @Test
  def comments {
    // 000000000011111111112222222222333333333344444444444
    // 012345678901234567890123456789012345678901234567890 
    """package /* comment */ foo // comment""" ==>
      ((DEFAULT_CONTENT_TYPE, 0, 7), (JAVA_MULTI_LINE_COMMENT, 8, 20), (DEFAULT_CONTENT_TYPE, 21, 25), (JAVA_SINGLE_LINE_COMMENT, 26, 35))

    // 000000000011111111112222222222333333333344444444444
    // 012345678901234567890123456789012345678901234567890 
    """/* comment /* nested */ */""" ==>
      ((JAVA_MULTI_LINE_COMMENT, 0, 25))

    // 000000000011111111112222222222333333333344444444444
    // 012345678901234567890123456789012345678901234567890 
    """/** comment /** nested **/ */""" ==>
      ((JAVA_DOC, 0, 28))

  }

  @Test
  def basicXml {
    // 000000000011111111112222222222333333333344444444444
    // 012345678901234567890123456789012345678901234567890 
    """<foo/>""" ==> ((XML_TAG, 0, 5))

    // 000000000011111111112222222222333333333344444444444
    // 012345678901234567890123456789012345678901234567890 
    """<![CDATA[ <foo/> ]]>""" ==> ((XML_CDATA, 0, 19))

    // 000000000011111111112222222222333333333344444444444
    // 012345678901234567890123456789012345678901234567890 
    """<!-- comment -->""" ==> ((XML_COMMENT, 0, 15))

    // 000000000011111111112222222222333333333344444444444
    // 012345678901234567890123456789012345678901234567890 
    """<?xml version='1.0' encoding='UTF-8'?>""" ==> ((XML_PI, 0, 37))
  }

  @Test
  def strings {
    // 000000000011111111112222222222333333333344444444444
    // 012345678901234567890123456789012345678901234567890 
    <t>"ordinary string"</t> ==> ((JAVA_STRING, 0, 16));

    // 000000000011111111112222222222333333333344444444444
    // 012345678901234567890123456789012345678901234567890 
    <t>"""scala multiline string"""</t> ==> ((SCALA_MULTI_LINE_STRING, 0, 27))
  }

}

object ScalaPartitionTokeniserTest {
  implicit def string2PimpedString(from: String): PimpedString = new PimpedString(from)
  implicit def element2PimpedString(from: Elem): PimpedString = new PimpedString(from.text)

  class PimpedString(source: String) {
    def ==>(expectedPartitions: List[(String, Int, Int)]) {<commit_msg>Add test for Scala keyword in XML attribute name (closes #2522)<commit_after>package scala.tools.eclipse.lexical

import scala.xml.Elem
import org.eclipse.jface.text.IDocument
import org.junit.Assert._
import org.junit.{ Test, Before }

import scala.tools.eclipse.lexical.ScalaPartitions._
import org.eclipse.jface.text.IDocument.DEFAULT_CONTENT_TYPE
import org.eclipse.jdt.ui.text.IJavaPartitions._

class ScalaPartitionTokeniserTest {
  import ScalaPartitionTokeniserTest._

  @Test
  def bug2522 {
    // 000000000011111111112222222222333333333344444444445
    // 012345678901234567890123456789012345678901234567890 
    """def dev = <div class="menu">...</div>""" ==>
      ((DEFAULT_CONTENT_TYPE, 0, 9), (XML_TAG, 10, 27), (XML_PCDATA, 28, 30), (XML_TAG, 31, 36))
  }

  @Test
  def defaultContent {
    // 000000000011111111112222222222333333333344444444445
    // 012345678901234567890123456789012345678901234567890 
    """package foo""" ==> ((DEFAULT_CONTENT_TYPE, 0, 10))
  }

  @Test
  def comments {
    // 000000000011111111112222222222333333333344444444445
    // 012345678901234567890123456789012345678901234567890 
    """package /* comment */ foo // comment""" ==>
      ((DEFAULT_CONTENT_TYPE, 0, 7), (JAVA_MULTI_LINE_COMMENT, 8, 20), (DEFAULT_CONTENT_TYPE, 21, 25), (JAVA_SINGLE_LINE_COMMENT, 26, 35))

    // 000000000011111111112222222222333333333344444444445
    // 012345678901234567890123456789012345678901234567890 
    """/* comment /* nested */ */""" ==>
      ((JAVA_MULTI_LINE_COMMENT, 0, 25))

    // 000000000011111111112222222222333333333344444444445
    // 012345678901234567890123456789012345678901234567890 
    """/** comment /** nested **/ */""" ==>
      ((JAVA_DOC, 0, 28))

  }

  @Test
  def basicXml {
    // 000000000011111111112222222222333333333344444444445
    // 012345678901234567890123456789012345678901234567890 
    """<foo/>""" ==> ((XML_TAG, 0, 5))

    // 000000000011111111112222222222333333333344444444445
    // 012345678901234567890123456789012345678901234567890 
    """<![CDATA[ <foo/> ]]>""" ==> ((XML_CDATA, 0, 19))

    // 000000000011111111112222222222333333333344444444445
    // 012345678901234567890123456789012345678901234567890 
    """<!-- comment -->""" ==> ((XML_COMMENT, 0, 15))

    // 000000000011111111112222222222333333333344444444445
    // 012345678901234567890123456789012345678901234567890 
    """<?xml version='1.0' encoding='UTF-8'?>""" ==> ((XML_PI, 0, 37))
  }

  @Test
  def strings {
    // 000000000011111111112222222222333333333344444444445
    // 012345678901234567890123456789012345678901234567890 
    <t>"ordinary string"</t> ==> ((JAVA_STRING, 0, 16));

    // 000000000011111111112222222222333333333344444444445
    // 012345678901234567890123456789012345678901234567890 
    <t>"""scala multiline string"""</t> ==> ((SCALA_MULTI_LINE_STRING, 0, 27))
  }

}

object ScalaPartitionTokeniserTest {
  implicit def string2PimpedString(from: String): PimpedString = new PimpedString(from)
  implicit def element2PimpedString(from: Elem): PimpedString = new PimpedString(from.text)

  class PimpedString(source: String) {
    def ==>(expectedPartitions: List[(String, Int, Int)]) {
{'fraction_non_alphanumeric': 0.12643869891576315, 'fraction_numerical': 0.3756463719766472, 'mean_word_length': 4.667296786389414, 'pattern_counts': {'":': 0, '<': 23, '<?xml version=': 2, '>': 46, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 4}, 'pii_count': 0, 'substrings_counts': 105, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '684224', 'n_tokens_mistral': 3706, 'n_tokens_neox': 2073, 'n_words': 309}