require 'pathname' require Pathname.new( File.dirname(__FILE__)).join( 'test_helper' ).cleanpath require 'build-tool/cfg/parser' class TestConfigurationParser < Test::Unit::TestCase def test_build_system text = <<-EOS # Check that build systems are open. You can add to them. by just # redeclaring them build-system cmake option CMAKE_CXXFLAGS "-Wall" option CMAKE_VERBOSE_MAKEFILE "1" end # Add a value build-system cmake option CMAKE_BUILD_TYPE "Debug" end # Overwrite a value build-system cmake option CMAKE_CXXFLAGS "-Wall -pipe -O0" end EOS parser = BuildTool::Cfg::Parser.new configuration = parser.parse_string(text) default = configuration.build_system("cmake") assert_not_nil default assert_equal "-Wall -pipe -O0", default['CMAKE_CXXFLAGS'] assert_equal "1", default['CMAKE_VERBOSE_MAKEFILE'] assert_equal "Debug", default['CMAKE_BUILD_TYPE'] end def test_environment text = <<-EOS # Check that environments are open. You can add to them. by just # redeclaring them environment default var PATH set "/usr/bin" var MANPATH set "/usr/share/man" end environment default var PATH set "/usr/bin:/bin" var PKG_CONFIG_PATH set "/usr/lib64/pkgconfig" end environment copy < default end # Test inheritance environment kde4 < default var PATH prepend "/opt/kde4/bin" var MANPATH append "/opt/kde4/share/man" var PKG_CONFIG_PATH set "/opt/kde4/lib64/pkgconfig" end EOS parser = BuildTool::Cfg::Parser.new configuration = parser.parse_string(text) default = configuration.environment("default") assert_not_nil default assert_equal "/usr/bin:/bin", default['PATH'] assert_equal "/usr/share/man", default['MANPATH'] assert_equal "/usr/lib64/pkgconfig", default['PKG_CONFIG_PATH'] # Copy is just that. a copy copy = configuration.environment("copy") assert_not_nil copy assert_equal default['PATH'], copy['PATH'] assert_equal default['MANPATH'], copy['MANPATH'] assert_equal default['PKG_CONFIG_PATH'], copy['PKG_CONFIG_PATH'] # kde4 add to default kde4 = configuration.environment("kde4") assert_not_nil kde4 assert_equal "/opt/kde4/bin:/usr/bin:/bin", kde4['PATH'] assert_equal "/usr/share/man:/opt/kde4/share/man", kde4['MANPATH'] assert_equal "/opt/kde4/lib64/pkgconfig", kde4['PKG_CONFIG_PATH'] end def test_repository text = <<-EOS server kde protocol "svn+ssh" host "svn.kde.org" end repository kde use server kde path "KDE" end repository kde user mjansen end server kde protocol "svn+ssh" host "svn.kde.org" path "home/kde" end EOS parser = BuildTool::Cfg::Parser.new configuration = parser.parse_string(text) default = configuration.repository("kde") assert_not_nil default assert_equal "svn+ssh", default.server.protocol assert_equal "svn.kde.org", default.server.host assert_equal "home/kde", default.server.path assert_equal "mjansen", default.user assert_equal "KDE", default.path assert_equal "svn+ssh://mjansen@svn.kde.org/home/kde/KDE", default.url end def test_features text = <<-EOS feature devel short description "KDE Development Tools" feature playground short description "Playground modules" end end feature graphics short description "KDE Development Tools" feature playground short description "Playground modules" module kdesupport end end end disable feature graphics EOS parser = BuildTool::Cfg::Parser.new configuration = parser.parse_string(text) # Check devel top level feature ( active ) devel = configuration.feature("devel") assert devel.active? assert "KDE Development Tools", devel.description assert "devel", devel.path assert "devel", devel.name assert_nil devel.parent # Check devel/playground feature ( active ) playground = configuration.feature("devel/playground") assert playground.active? assert "Playground modules", playground.description assert "playground", playground.path assert "devel/playground", playground.name assert_equal devel, playground.parent # Check graphics top level feature ( not active ) graphics = configuration.feature("graphics") assert !graphics.active? assert "KDE Development Tools", graphics.description assert "graphics", graphics.path assert "graphics", graphics.name assert_nil graphics.parent # Check graphics/playground feature ( not active ) playground = configuration.feature("graphics/playground") assert !playground.active? assert "Playground modules", playground.description assert "playground", playground.path assert "graphics/playground", playground.name assert_equal graphics, playground.parent end def test_module text = <<-EOS environment kdelibs end server kde protocol "svn+ssh" host "svn.kde.org" end repository kde use server kde path "/home/kde" end repository kde-core use server kde path "/home/kde" end module kdelibs use environment kdelibs use repository kde-core use vcs git-svn local-path "kdelibs" end module kdelibs remote-path "kdelibs2" use repository kde build-prefix "/build/kde" end EOS parser = BuildTool::Cfg::Parser.new configuration = parser.parse_string(text) kdelibs = configuration.module("kdelibs") assert_not_nil kdelibs assert_equal "kdelibs", kdelibs.name assert_not_nil kdelibs.repository assert_equal "kde", kdelibs.repository.name assert_equal "kdelibs", kdelibs.environment.name assert_equal "kdelibs", kdelibs.local_path assert_equal "kdelibs2", kdelibs.remote_path assert_equal "/build/kde/src/kdelibs", kdelibs.source_directory assert_equal "/build/kde/bld/kdelibs", kdelibs.build_directory assert_equal "/build/kde/src/kdelibs", kdelibs.vcs.local_path end def test_module_inheritance text = <<-EOS environment kdelibs end server kde protocol "svn+ssh" host "svn.kde.org" end repository kde use server kde path "/home" user mjansen end module kdelibs use environment kdelibs use repository kde use build-system cmake use vcs git-svn local-path "kdelibs" end # test inheritance module kdebase-runtime < kdelibs end module kdebase-workspace < kdebase-runtime use vcs svn environment kdebase end end module kdelibs_copy < kdelibs use vcs svn end module kdelibs remote-path "kdelibs2" build-prefix "/build/kde" end EOS parser = BuildTool::Cfg::Parser.new configuration = parser.parse_string(text) kdelibs = configuration.module("kdelibs") assert_not_nil kdelibs assert_equal "kdelibs", kdelibs.name assert_equal "kde", kdelibs.repository.name assert_equal "kdelibs", kdelibs.environment.name assert_equal "kdelibs", kdelibs.local_path assert_equal "kdelibs2", kdelibs.remote_path assert_equal "/build/kde/src/kdelibs", kdelibs.source_directory assert_equal "/build/kde/bld/kdelibs", kdelibs.build_directory assert_equal "/build/kde/src/kdelibs", kdelibs.vcs.local_path mod = configuration.module("kdebase-runtime") assert_not_nil mod assert_equal "kdebase-runtime", mod.name assert_equal kdelibs.repository, mod.repository assert_equal kdelibs.build_prefix, mod.build_prefix assert_equal kdelibs.repository.name, mod.repository.name assert_equal kdelibs.environment.name, mod.environment.name # Those are not inherited and fall back to module name assert_equal "kdebase-runtime", mod.local_path assert_equal "kdebase-runtime", mod.remote_path assert_equal "/build/kde/src/kdebase-runtime", mod.source_directory assert_equal "/build/kde/bld/kdebase-runtime", mod.build_directory assert_equal "/build/kde/src/kdebase-runtime", mod.vcs.local_path # Check we work on a copy assert_equal "/build/kde/src/kdelibs", kdelibs.vcs.local_path mod = configuration.module("kdebase-workspace") assert_not_nil mod assert_equal "kdebase-workspace", mod.name assert_equal "kdebase", mod.environment.name assert_equal "svn", mod.vcs.name kdelibs = configuration.module("kdelibs_copy") assert_not_nil kdelibs assert_equal "kdelibs_copy", kdelibs.name assert_equal "kde", kdelibs.repository.name assert_equal "kdelibs", kdelibs.environment.name assert_equal "kdelibs_copy", kdelibs.local_path assert_equal "kdelibs_copy", kdelibs.remote_path assert_equal "/build/kde/src/kdelibs_copy", kdelibs.source_directory assert_equal "/build/kde/bld/kdelibs_copy", kdelibs.build_directory assert_equal "/build/kde/src/kdelibs_copy", kdelibs.vcs.local_path end def test_existing_configuration parser = BuildTool::Cfg::Parser.new text = <<-EOS environment kdelibs end server kde protocol "svn+ssh" host "svn.kde.org" end repository kde use server kde path "/home" user mjansen end module kdelibs use environment kdelibs use repository kde use vcs git-svn local-path "kdelibs" remote-path "kdelibs2" build-prefix "/build/kde" end EOS configuration = parser.parse_string(text) kdelibs = configuration.module("kdelibs") assert_not_nil kdelibs assert_equal "kdelibs", kdelibs.name assert_not_nil kdelibs.repository assert_equal "kde", kdelibs.repository.name assert_equal "kdelibs", kdelibs.environment.name assert_equal "kdelibs", kdelibs.local_path assert_equal "kdelibs2", kdelibs.remote_path assert_equal "/build/kde/src/kdelibs", kdelibs.source_directory assert_equal "/build/kde/bld/kdelibs", kdelibs.build_directory assert_equal "/build/kde/src/kdelibs", kdelibs.vcs.local_path text2 = <<-EOS environment kde2 end # Change one aspect of kdelibs module kdelibs use environment kde2 end server kde protocol "svn+ssh" host "svn.kde.org" end # Change the kde repository repository kde use server kde path "/home" user meier end # test inheritance module kdebase-runtime < kdelibs end module kdebase-workspace < kdebase-runtime use vcs svn environment kdebase end end EOS parser = BuildTool::Cfg::Parser.new( configuration ) configuration = parser.parse_string( text2 ) kdelibs = configuration.module("kdelibs") assert_not_nil kdelibs assert_equal "kdelibs", kdelibs.name assert_not_nil kdelibs.repository assert_equal "kde", kdelibs.repository.name assert_equal "kde2", kdelibs.environment.name assert_equal "kdelibs", kdelibs.local_path assert_equal "kdelibs2", kdelibs.remote_path assert_equal "/build/kde/src/kdelibs", kdelibs.source_directory assert_equal "/build/kde/bld/kdelibs", kdelibs.build_directory assert_equal "/build/kde/src/kdelibs", kdelibs.vcs.local_path assert_equal "meier", kdelibs.repository.user mod = configuration.module("kdebase-runtime") assert_not_nil mod assert_equal "kdebase-runtime", mod.name assert_equal kdelibs.repository, mod.repository assert_equal kdelibs.build_prefix, mod.build_prefix assert_equal kdelibs.repository.name, mod.repository.name assert_equal kdelibs.environment.name, mod.environment.name # Those are not inherited and fall back to module name assert_equal "kdebase-runtime", mod.local_path assert_equal "kdebase-runtime", mod.remote_path assert_equal "/build/kde/src/kdebase-runtime", mod.source_directory assert_equal "/build/kde/bld/kdebase-runtime", mod.build_directory assert_equal "/build/kde/src/kdebase-runtime", mod.vcs.local_path # Check we work on a copy assert_equal "/build/kde/src/kdelibs", kdelibs.vcs.local_path mod = configuration.module("kdebase-workspace") assert_not_nil mod assert_equal "kdebase-workspace", mod.name assert_equal "kdebase", mod.environment.name assert_equal "svn", mod.vcs.name end def test_sshkeys text = <<-EOS ssh-key "user@userdomain.example" file "~/.ssh/id_dsa" end ssh-key "user_other_email@userdomain.example" file "~/.ssh/id_other_email_dsa" end EOS parser = BuildTool::Cfg::Parser.new configuration = parser.parse_string(text) default = configuration.sshkey("user@userdomain.example") assert_not_nil default assert_equal File.expand_path( "~/.ssh/id_dsa" ), default.file other = configuration.sshkey("user_other_email@userdomain.example") assert_not_nil other assert_equal File.expand_path( "~/.ssh/id_other_email_dsa" ), other.file end def test_template text = <<-EOS environment kdelibs end server kde protocol "svn+ssh" host "svn.kde.org" end repository kde use server kde path "/home" user mjansen end module kdelibstemplate TEMPLATE use environment kdelibs use repository kde use vcs git-svn build-prefix "/build/kde" end module kdelibs < kdelibstemplate end EOS parser = BuildTool::Cfg::Parser.new configuration = parser.parse_string(text) kdelibs = configuration.module("kdelibs") assert_not_nil kdelibs assert_equal "kdelibs", kdelibs.name assert_not_nil kdelibs.repository assert_equal "kde", kdelibs.repository.name assert_equal "kdelibs", kdelibs.environment.name assert_equal "kdelibs", kdelibs.local_path assert_equal "kdelibs", kdelibs.remote_path assert_equal "/build/kde/src/kdelibs", kdelibs.source_directory assert_equal "/build/kde/bld/kdelibs", kdelibs.build_directory assert_equal "/build/kde/src/kdelibs", kdelibs.vcs.local_path end # Just test that a complete configuration file with all parts is read def test_complete text = <<-EOS ssh-key "user@userdomain.example" file "~/.ssh/id_dsa" end build-system cmake option CMAKE_CXXFLAGS "-Wall -pipe -O0" option CMAKE_VERBOSE_MAKEFILE "1" option CMAKE_BUILD_TYPE "Debug" end build-system qt option flags "" end server kde protocol "svn+ssh" host "svn.kde.org" end repository kde use server kde path "/home" user mjansen end environment default var PATH set "/usr/bin:/bin" var MANPATH set "/usr/share/man" var KDEDIRS set "" var PKG_CONFIG_PATH set "/usr/lib64/pkgconfig" var LD_LIBRARY_PATH set "" end environment kdesupport < default var PATH prepend "/opt/kde/support/bin" var MANPATH append "/opt/kde/support/share/man" var KDEDIRS set "/opt/kde/support" var PKG_CONFIG_PATH prepend "/opt/kde/support/lib64/pkgconfig" end module kdesupport use environment kdesupport use repository kde end module kdelibs environment kdelibs < kdesupport var PATH prepend "/opt/kde/libs/bin" var MANPATH append "/opt/kde/libs/share/man" var KDEDIRS prepend "/opt/kde/libs" var PKG_CONFIG_PATH prepend "/opt/kde/libs/lib64/pkgconfig" end use repository kde use build-system cmake vcs git-svn external "kwin/clients/nitrogen/lib#<%= KDESVNSERVER %>/kde/trunk/KDE/kdebase/runtime/kstyles/oxygen/lib" external "kwin/clients/oxygen/lib#<%= KDESVNSERVER %>/kde/trunk/KDE/kdebase/runtime/kstyles/oxygen/lib" end remote-path "KDE/kdelibs" local-path "KDE/kdelibs" install-prefix "/opt/kde/libs" build-prefix "~" end environment kdepimlibs < kdesupport var PATH prepend "/opt/kde/pimlibs/bin" var MANPATH append "/opt/kde/pimlibs/share/man" var KDEDIRS prepend "/opt/kde/pimlibs" var PKG_CONFIG_PATH prepend "/opt/kde/pimlibs/lib64/pkgconfig" end module kdepimlibs use environment kdepimlibs use repository kde end environment kdebase < kdelibs var PATH prepend "/opt/kde/base/bin" var MANPATH append "/opt/kde/base/share/man" var KDEDIRS prepend "/opt/kde/base" var PKG_CONFIG_PATH prepend "/opt/kde/base/lib64/pkgconfig" end module kdebase use environment kdebase use repository kde end EOS parser = BuildTool::Cfg::Parser.new configuration = parser.parse_string(text) kdelibs = configuration.module("kdelibs") assert_not_nil kdelibs assert_equal "KDE/kdelibs", kdelibs.remote_path assert_equal "KDE/kdelibs", kdelibs.local_path assert_equal "/opt/kde/libs", kdelibs.install_prefix.to_s assert_not_nil kdelibs.vcs assert_equal "git-svn", kdelibs.vcs.name assert_same configuration.repository("kde"), kdelibs.repository assert_same configuration.environment("kdelibs"), kdelibs.environment assert_equal "/opt/kde/libs/bin:/opt/kde/support/bin:/usr/bin:/bin", configuration.environment("kdelibs")["PATH"] end end