LCOV - code coverage report
Current view: top level - i18npool/qa/cppunit - test_languagetag.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 106 106 100.0 %
Date: 2012-08-25 Functions: 11 12 91.7 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 562 1128 49.8 %

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*
       3                 :            :  * This file is part of the LibreOffice project.
       4                 :            :  *
       5                 :            :  * This Source Code Form is subject to the terms of the Mozilla Public
       6                 :            :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7                 :            :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8                 :            :  */
       9                 :            : 
      10                 :            : #include <sal/config.h>
      11                 :            : 
      12                 :            : #include <cppunit/TestFixture.h>
      13                 :            : #include <cppunit/TestAssert.h>
      14                 :            : #include <cppunit/extensions/HelperMacros.h>
      15                 :            : #include <cppunit/plugin/TestPlugIn.h>
      16                 :            : 
      17                 :            : #include <i18npool/languagetag.hxx>
      18                 :            : 
      19                 :            : #include <rtl/ustring.hxx>
      20                 :            : #include <rtl/ustrbuf.hxx>
      21                 :            : #include <osl/file.hxx>
      22                 :            : 
      23                 :            : #include <com/sun/star/lang/Locale.hpp>
      24                 :            : 
      25                 :            : using namespace com::sun::star;
      26                 :            : 
      27                 :            : // To test the replacement code add '&& 0' and also in
      28                 :            : // source/languagetag/languagetag.cxx
      29                 :            : #if defined(ENABLE_LIBLANGTAG)
      30                 :            : #define USE_LIBLANGTAG 1
      31                 :            : #else
      32                 :            : #define USE_LIBLANGTAG 0
      33                 :            : #endif
      34                 :            : 
      35                 :            : namespace {
      36                 :            : 
      37                 :            : class TestLanguageTag : public CppUnit::TestFixture
      38                 :            : {
      39                 :            : public:
      40                 :         10 :     TestLanguageTag() {}
      41         [ -  + ]:         20 :     virtual ~TestLanguageTag() {}
      42                 :            : 
      43                 :            :     void testInit();
      44                 :            :     void testAllTags();
      45                 :            : 
      46 [ +  - ][ +  - ]:         10 :     CPPUNIT_TEST_SUITE(TestLanguageTag);
         [ +  - ][ +  - ]
                 [ #  # ]
      47 [ +  - ][ +  - ]:          5 :     CPPUNIT_TEST(testInit);
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
      48 [ +  - ][ +  - ]:          5 :     CPPUNIT_TEST(testAllTags);
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
      49 [ +  - ][ +  - ]:         10 :     CPPUNIT_TEST_SUITE_END();
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
      50                 :            : };
      51                 :            : 
      52                 :          5 : void TestLanguageTag::testInit()
      53                 :            : {
      54                 :            : #if USE_LIBLANGTAG && !defined(SYSTEM_LIBLANGTAG)
      55                 :            :     // file:///$SRCDIR/solver/$INPATH/share/liblangtag
      56                 :            :     // file:///$OUTDIR/share/liblangtag
      57                 :          5 :     OUStringBuffer aBuf(128);
      58                 :          5 :     const char* pEnv = getenv("OUTDIR");
      59 [ +  - ][ +  - ]:          5 :     CPPUNIT_ASSERT_MESSAGE("No $OUTDIR", pEnv);
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
      60 [ +  - ][ +  - ]:          5 :     aBuf.append( "file:///").append( OStringToOUString( pEnv, RTL_TEXTENCODING_UTF8)).append( "/share/liblangtag");
         [ +  - ][ +  - ]
      61         [ +  - ]:          5 :     OUString aURL( aBuf.makeStringAndClear());
      62                 :          5 :     OUString aData( aURL);
      63                 :          5 :     aData += "/language-subtag-registry.xml";
      64                 :          5 :     osl::DirectoryItem aDirItem;
      65 [ +  - ][ +  - ]:         10 :     CPPUNIT_ASSERT_MESSAGE("liblangtag data not found",
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
      66         [ +  - ]:          5 :             osl::DirectoryItem::get( aData, aDirItem) == osl::DirectoryItem::E_None);
      67                 :          5 :     OUString aPath;
      68 [ +  - ][ +  - ]:          5 :     CPPUNIT_ASSERT( osl::FileBase::getSystemPathFromFileURL( aURL, aPath) == osl::FileBase::E_None);
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
      69 [ +  - ][ +  - ]:          5 :     LanguageTag::overrideDataPath( aPath);
      70                 :            : #endif
      71                 :          5 : }
      72                 :            : 
      73                 :          5 : void TestLanguageTag::testAllTags()
      74                 :            : {
      75                 :            :     {
      76                 :          5 :         OUString s_de_Latn_DE( "de-Latn-DE" );
      77         [ +  - ]:          5 :         LanguageTag de_DE( s_de_Latn_DE, true );
      78         [ +  - ]:          5 :         OUString aBcp47 = de_DE.getBcp47();
      79         [ +  - ]:          5 :         lang::Locale aLocale = de_DE.getLocale();
      80         [ +  - ]:          5 :         LanguageType nLanguageType = de_DE.getLanguageType();
      81                 :            : #if USE_LIBLANGTAG
      82 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT_MESSAGE("Default script should be stripped after canonicalize.", aBcp47 == "de-DE" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
      83 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Language == "de" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
      84 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Country == "DE" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
      85 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Variant == "" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
      86 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( nLanguageType == LANGUAGE_GERMAN );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
      87                 :            : #else
      88                 :            :         // The simple replacement code doesn't do any fancy stuff.
      89                 :            :         CPPUNIT_ASSERT_MESSAGE("Default script was stripped after canonicalize!?!", aBcp47 == s_de_Latn_DE );
      90                 :            :         CPPUNIT_ASSERT( aLocale.Language == "qlt" );
      91                 :            :         CPPUNIT_ASSERT( aLocale.Country == "DE" );
      92                 :            :         CPPUNIT_ASSERT( aLocale.Variant == "de-Latn-DE" );
      93                 :            :         (void)nLanguageType; //XXX CPPUNIT_ASSERT( nLanguageType == LANGUAGE_GERMAN );
      94                 :            : #endif
      95                 :            :     }
      96                 :            : 
      97                 :            :     {
      98                 :          5 :         OUString s_klingon( "i-klingon" );
      99         [ +  - ]:          5 :         LanguageTag klingon( s_klingon, true );
     100         [ +  - ]:          5 :         lang::Locale aLocale = klingon.getLocale();
     101                 :            : #if USE_LIBLANGTAG
     102 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( klingon.getBcp47() == "tlh" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     103 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Language == "tlh" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     104 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Country == "" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     105 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Variant == "" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     106 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( klingon.getLanguageType() == LANGUAGE_SYSTEM );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     107 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( klingon.isValidBcp47() == true );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     108 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( klingon.isIsoLocale() == true );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     109 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( klingon.isIsoODF() == true );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     110                 :            : #else
     111                 :            :         CPPUNIT_ASSERT( klingon.getBcp47() == s_klingon );
     112                 :            :         CPPUNIT_ASSERT( aLocale.Language == "qlt" );
     113                 :            :         CPPUNIT_ASSERT( aLocale.Country == "" );
     114                 :            :         CPPUNIT_ASSERT( aLocale.Variant == s_klingon );
     115                 :            :         CPPUNIT_ASSERT( klingon.getLanguageType() == LANGUAGE_SYSTEM );
     116                 :            :         CPPUNIT_ASSERT( klingon.isValidBcp47() == true );
     117                 :            :         CPPUNIT_ASSERT( klingon.isIsoLocale() == false );
     118                 :            :         CPPUNIT_ASSERT( klingon.isIsoODF() == false );
     119                 :            : #endif
     120                 :            :     }
     121                 :            : 
     122                 :            :     {
     123                 :          5 :         OUString s_sr_RS( "sr-RS" );
     124         [ +  - ]:          5 :         LanguageTag sr_RS( s_sr_RS, true );
     125         [ +  - ]:          5 :         lang::Locale aLocale = sr_RS.getLocale();
     126 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( sr_RS.getBcp47() == s_sr_RS );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     127 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Language == "sr" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     128 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Country == "RS" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     129 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Variant == "" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     130 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( sr_RS.getLanguageType() == LANGUAGE_USER_SERBIAN_CYRILLIC_SERBIA );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     131 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( sr_RS.isValidBcp47() == true );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     132 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( sr_RS.isIsoLocale() == true );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     133 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( sr_RS.isIsoODF() == true );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     134                 :            :     }
     135                 :            : 
     136                 :            :     {
     137                 :          5 :         OUString s_sr_Latn_RS( "sr-Latn-RS" );
     138         [ +  - ]:          5 :         LanguageTag sr_RS( s_sr_Latn_RS, true );
     139         [ +  - ]:          5 :         lang::Locale aLocale = sr_RS.getLocale();
     140 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( sr_RS.getBcp47() == s_sr_Latn_RS );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     141 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Language == "qlt" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     142 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Country == "RS" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     143 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Variant == s_sr_Latn_RS );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     144                 :            :         /* TODO: conversion doesn't know this yet, once it does activate test. */
     145                 :            : #if 0
     146                 :            :         CPPUNIT_ASSERT( sr_RS.getLanguageType() == LANGUAGE_USER_SERBIAN_LATIN_SERBIA );
     147                 :            : #else
     148 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( sr_RS.getLanguageType() == LANGUAGE_SYSTEM );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     149                 :            : #endif
     150 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( sr_RS.isValidBcp47() == true );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     151 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( sr_RS.isIsoLocale() == false );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     152 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( sr_RS.isIsoODF() == true );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     153                 :            :     }
     154                 :            : 
     155                 :            :     {
     156                 :          5 :         OUString s_de_DE( "de-DE" );
     157         [ +  - ]:          5 :         LanguageTag de_DE( s_de_DE, true );
     158         [ +  - ]:          5 :         lang::Locale aLocale = de_DE.getLocale();
     159 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( de_DE.getBcp47() == s_de_DE );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     160 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Language == "de" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     161 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Country == "DE" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     162 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Variant == "" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     163 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( de_DE.getLanguageType() == LANGUAGE_GERMAN );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     164 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( de_DE.isValidBcp47() == true );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     165 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( de_DE.isIsoLocale() == true );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     166 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( de_DE.isIsoODF() == true );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     167                 :            :     }
     168                 :            : 
     169                 :            :     {
     170                 :          5 :         OUString s_de_DE( "de-DE" );
     171         [ +  - ]:          5 :         LanguageTag de_DE( lang::Locale( "de", "DE", "" ) );
     172         [ +  - ]:          5 :         lang::Locale aLocale = de_DE.getLocale();
     173 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( de_DE.getBcp47() == s_de_DE );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     174 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Language == "de" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     175 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Country == "DE" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     176 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Variant == "" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     177 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( de_DE.getLanguageType() == LANGUAGE_GERMAN );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     178                 :            :     }
     179                 :            : 
     180                 :            :     {
     181                 :          5 :         OUString s_de_DE( "de-DE" );
     182         [ +  - ]:          5 :         LanguageTag de_DE( LANGUAGE_GERMAN );
     183         [ +  - ]:          5 :         lang::Locale aLocale = de_DE.getLocale();
     184 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( de_DE.getBcp47() == s_de_DE );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     185 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Language == "de" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     186 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Country == "DE" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     187 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Variant == "" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     188 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( de_DE.getLanguageType() == LANGUAGE_GERMAN );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     189                 :            :     }
     190                 :            : 
     191                 :            :     {
     192                 :          5 :         OUString s_uab( "unreg-and-bad" );
     193         [ +  - ]:          5 :         LanguageTag uab( s_uab, true );
     194         [ +  - ]:          5 :         lang::Locale aLocale = uab.getLocale();
     195 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( uab.getBcp47() == s_uab );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     196 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Language == "qlt" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     197 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Country == "" );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     198 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( aLocale.Variant == s_uab );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     199 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( uab.getLanguageType() == LANGUAGE_SYSTEM );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     200 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( uab.isValidBcp47() == false );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     201 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( uab.isIsoLocale() == false );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
                 [ +  - ]
     202 [ +  - ][ +  - ]:          5 :         CPPUNIT_ASSERT( uab.isIsoODF() == false );
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
         [ +  - ][ +  - ]
     203                 :            :     }
     204                 :          5 : }
     205                 :            : 
     206                 :          5 : CPPUNIT_TEST_SUITE_REGISTRATION( TestLanguageTag );
     207                 :            : 
     208                 :            : }
     209                 :            : 
     210 [ +  - ][ +  - ]:         20 : CPPUNIT_PLUGIN_IMPLEMENT();
         [ +  - ][ +  - ]
         [ +  - ][ #  # ]
     211                 :            : 
     212                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10