#!/usr/local/bin/ruby
require 'test/unit'
require 'analyseur-xml'

class TestAnalyseur < Test::Unit::TestCase

  def test_sans_attribut
    l1 = "<TAG1 >"
    l2 = "<TAG2>  </TAG2>"
    l3 = "</TAG1> fdsdf  <TAG1>   fd </TAG1  >"
    l4 = "<TAG1 >"
    l5 = "</TAG1   >  f"

    anl = AnalyseurXML.new()
    anl.analyser( [ l1, l2, l3, l4 ] );
    anl.analyser( [ l5 ] );

    assert_equal( ["TAG1", "TAG2"], anl.balises().sort )

    assert_equal( "TAG1", anl.info( "TAG1" ).balise )
    assert_equal( "TAG2", anl.info( "TAG2" ).balise )
    assert_equal( [], anl.info( "TAG1" ).attributs )
    assert_equal( [], anl.info( "TAG2" ).attributs )
  end

  def test_reinitialiser
    l1 = "<TAG1 >"
    l2 = "<TAG2>  </TAG2>"
    l3 = "</TAG1> fdsdf  <TAG1>   fd </TAG1  >"
    l4 = "<TAG1 >"
    l5 = "</TAG1 X=\"d\"   >  f"

    anl = AnalyseurXML.new()
    anl.analyser( [ l1, l2, l3, l4 ] );
    anl.reinitialiser
    anl.analyser( [ l5 ] );

    assert_equal( ["TAG1"], anl.balises().sort )

    assert_equal( "TAG1", anl.info( "TAG1" ).balise )
    assert_equal( ["X"], anl.info( "TAG1" ).attributs )
  end

  def test_avec_attributs_multiples
    l1 = "<TAG1 A1=\"v1\">"
    l2 = "<TAG2></TAG2></TAG1>"
    l3 = "<TAG1 A1=\"v1\" A3=\"v3\"></TAG1>"
    l4 = "<TAG1 A2=\"v2\">"
    l5 = "</TAG1>"

    anl = AnalyseurXML.new()
    anl.analyser( [l1, l2, l3, l4, l5] )

    assert_equal( ["TAG1", "TAG2"], anl.balises.sort )
    assert_equal( "TAG1", anl.info( "TAG1" ).balise )
    assert_equal( ["A1", "A2", "A3"], anl.info( "TAG1" ).attributs.sort )
    assert_equal( 2, anl.info( "TAG1" ).nb_occurrences( "A1" ) )
    assert_equal( 1, anl.info( "TAG1" ).nb_occurrences( "A2" ) )
    assert_equal( 1, anl.info( "TAG1" ).nb_occurrences( "A3" ) )
    assert_equal( [], anl.info( "TAG2" ).attributs )
  end

end
