mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 03:15:11 +00:00
Bug 757252 - Kill nsinstall_win.c, use nsinstall.py on Windows instead. r=ted
This fixes bug 752202 as well. Included are a number of workarounds for Python 2.x's poor Unicode handling on Windows. --HG-- rename : extensions/spellcheck/hunspell/tests/1463589.aff => extensions/spellcheck/hunspell/tests/unit/data/1463589.aff rename : extensions/spellcheck/hunspell/tests/1463589.dic => extensions/spellcheck/hunspell/tests/unit/data/1463589.dic rename : extensions/spellcheck/hunspell/tests/1463589.sug => extensions/spellcheck/hunspell/tests/unit/data/1463589.sug rename : extensions/spellcheck/hunspell/tests/1463589.test => extensions/spellcheck/hunspell/tests/unit/data/1463589.test rename : extensions/spellcheck/hunspell/tests/1463589.wrong => extensions/spellcheck/hunspell/tests/unit/data/1463589.wrong rename : extensions/spellcheck/hunspell/tests/1463589_utf.aff => extensions/spellcheck/hunspell/tests/unit/data/1463589_utf.aff rename : extensions/spellcheck/hunspell/tests/1463589_utf.dic => extensions/spellcheck/hunspell/tests/unit/data/1463589_utf.dic rename : extensions/spellcheck/hunspell/tests/1463589_utf.sug => extensions/spellcheck/hunspell/tests/unit/data/1463589_utf.sug rename : extensions/spellcheck/hunspell/tests/1463589_utf.test => extensions/spellcheck/hunspell/tests/unit/data/1463589_utf.test rename : extensions/spellcheck/hunspell/tests/1463589_utf.wrong => extensions/spellcheck/hunspell/tests/unit/data/1463589_utf.wrong rename : extensions/spellcheck/hunspell/tests/1592880.aff => extensions/spellcheck/hunspell/tests/unit/data/1592880.aff rename : extensions/spellcheck/hunspell/tests/1592880.dic => extensions/spellcheck/hunspell/tests/unit/data/1592880.dic rename : extensions/spellcheck/hunspell/tests/1592880.good => extensions/spellcheck/hunspell/tests/unit/data/1592880.good rename : extensions/spellcheck/hunspell/tests/1592880.test => extensions/spellcheck/hunspell/tests/unit/data/1592880.test rename : extensions/spellcheck/hunspell/tests/1695964.aff => extensions/spellcheck/hunspell/tests/unit/data/1695964.aff rename : extensions/spellcheck/hunspell/tests/1695964.dic => extensions/spellcheck/hunspell/tests/unit/data/1695964.dic rename : extensions/spellcheck/hunspell/tests/1695964.sug => extensions/spellcheck/hunspell/tests/unit/data/1695964.sug rename : extensions/spellcheck/hunspell/tests/1695964.test => extensions/spellcheck/hunspell/tests/unit/data/1695964.test rename : extensions/spellcheck/hunspell/tests/1695964.wrong => extensions/spellcheck/hunspell/tests/unit/data/1695964.wrong rename : extensions/spellcheck/hunspell/tests/1706659.aff => extensions/spellcheck/hunspell/tests/unit/data/1706659.aff rename : extensions/spellcheck/hunspell/tests/1706659.dic => extensions/spellcheck/hunspell/tests/unit/data/1706659.dic rename : extensions/spellcheck/hunspell/tests/1706659.test => extensions/spellcheck/hunspell/tests/unit/data/1706659.test rename : extensions/spellcheck/hunspell/tests/1706659.wrong => extensions/spellcheck/hunspell/tests/unit/data/1706659.wrong rename : extensions/spellcheck/hunspell/tests/1975530.aff => extensions/spellcheck/hunspell/tests/unit/data/1975530.aff rename : extensions/spellcheck/hunspell/tests/1975530.dic => extensions/spellcheck/hunspell/tests/unit/data/1975530.dic rename : extensions/spellcheck/hunspell/tests/1975530.good => extensions/spellcheck/hunspell/tests/unit/data/1975530.good rename : extensions/spellcheck/hunspell/tests/1975530.test => extensions/spellcheck/hunspell/tests/unit/data/1975530.test rename : extensions/spellcheck/hunspell/tests/1975530.wrong => extensions/spellcheck/hunspell/tests/unit/data/1975530.wrong rename : extensions/spellcheck/hunspell/tests/2970240.aff => extensions/spellcheck/hunspell/tests/unit/data/2970240.aff rename : extensions/spellcheck/hunspell/tests/2970240.dic => extensions/spellcheck/hunspell/tests/unit/data/2970240.dic rename : extensions/spellcheck/hunspell/tests/2970240.good => extensions/spellcheck/hunspell/tests/unit/data/2970240.good rename : extensions/spellcheck/hunspell/tests/2970240.test => extensions/spellcheck/hunspell/tests/unit/data/2970240.test rename : extensions/spellcheck/hunspell/tests/2970240.wrong => extensions/spellcheck/hunspell/tests/unit/data/2970240.wrong rename : extensions/spellcheck/hunspell/tests/2970242.aff => extensions/spellcheck/hunspell/tests/unit/data/2970242.aff rename : extensions/spellcheck/hunspell/tests/2970242.dic => extensions/spellcheck/hunspell/tests/unit/data/2970242.dic rename : extensions/spellcheck/hunspell/tests/2970242.good => extensions/spellcheck/hunspell/tests/unit/data/2970242.good rename : extensions/spellcheck/hunspell/tests/2970242.test => extensions/spellcheck/hunspell/tests/unit/data/2970242.test rename : extensions/spellcheck/hunspell/tests/2970242.wrong => extensions/spellcheck/hunspell/tests/unit/data/2970242.wrong rename : extensions/spellcheck/hunspell/tests/2999225.aff => extensions/spellcheck/hunspell/tests/unit/data/2999225.aff rename : extensions/spellcheck/hunspell/tests/2999225.dic => extensions/spellcheck/hunspell/tests/unit/data/2999225.dic rename : extensions/spellcheck/hunspell/tests/2999225.good => extensions/spellcheck/hunspell/tests/unit/data/2999225.good rename : extensions/spellcheck/hunspell/tests/2999225.test => extensions/spellcheck/hunspell/tests/unit/data/2999225.test rename : extensions/spellcheck/hunspell/tests/IJ.aff => extensions/spellcheck/hunspell/tests/unit/data/IJ.aff rename : extensions/spellcheck/hunspell/tests/IJ.dic => extensions/spellcheck/hunspell/tests/unit/data/IJ.dic rename : extensions/spellcheck/hunspell/tests/IJ.good => extensions/spellcheck/hunspell/tests/unit/data/IJ.good rename : extensions/spellcheck/hunspell/tests/IJ.sug => extensions/spellcheck/hunspell/tests/unit/data/IJ.sug rename : extensions/spellcheck/hunspell/tests/IJ.test => extensions/spellcheck/hunspell/tests/unit/data/IJ.test rename : extensions/spellcheck/hunspell/tests/IJ.wrong => extensions/spellcheck/hunspell/tests/unit/data/IJ.wrong rename : extensions/spellcheck/hunspell/tests/Makefile.am => extensions/spellcheck/hunspell/tests/unit/data/Makefile.am rename : extensions/spellcheck/hunspell/tests/Makefile.in => extensions/spellcheck/hunspell/tests/unit/data/Makefile.in rename : extensions/spellcheck/hunspell/tests/affixes.aff => extensions/spellcheck/hunspell/tests/unit/data/affixes.aff rename : extensions/spellcheck/hunspell/tests/affixes.dic => extensions/spellcheck/hunspell/tests/unit/data/affixes.dic rename : extensions/spellcheck/hunspell/tests/affixes.good => extensions/spellcheck/hunspell/tests/unit/data/affixes.good rename : extensions/spellcheck/hunspell/tests/affixes.test => extensions/spellcheck/hunspell/tests/unit/data/affixes.test rename : extensions/spellcheck/hunspell/tests/alias.aff => extensions/spellcheck/hunspell/tests/unit/data/alias.aff rename : extensions/spellcheck/hunspell/tests/alias.dic => extensions/spellcheck/hunspell/tests/unit/data/alias.dic rename : extensions/spellcheck/hunspell/tests/alias.good => extensions/spellcheck/hunspell/tests/unit/data/alias.good rename : extensions/spellcheck/hunspell/tests/alias.test => extensions/spellcheck/hunspell/tests/unit/data/alias.test rename : extensions/spellcheck/hunspell/tests/alias2.aff => extensions/spellcheck/hunspell/tests/unit/data/alias2.aff rename : extensions/spellcheck/hunspell/tests/alias2.dic => extensions/spellcheck/hunspell/tests/unit/data/alias2.dic rename : extensions/spellcheck/hunspell/tests/alias2.good => extensions/spellcheck/hunspell/tests/unit/data/alias2.good rename : extensions/spellcheck/hunspell/tests/alias2.morph => extensions/spellcheck/hunspell/tests/unit/data/alias2.morph rename : extensions/spellcheck/hunspell/tests/alias2.test => extensions/spellcheck/hunspell/tests/unit/data/alias2.test rename : extensions/spellcheck/hunspell/tests/alias3.aff => extensions/spellcheck/hunspell/tests/unit/data/alias3.aff rename : extensions/spellcheck/hunspell/tests/alias3.dic => extensions/spellcheck/hunspell/tests/unit/data/alias3.dic rename : extensions/spellcheck/hunspell/tests/alias3.good => extensions/spellcheck/hunspell/tests/unit/data/alias3.good rename : extensions/spellcheck/hunspell/tests/alias3.morph => extensions/spellcheck/hunspell/tests/unit/data/alias3.morph rename : extensions/spellcheck/hunspell/tests/alias3.test => extensions/spellcheck/hunspell/tests/unit/data/alias3.test rename : extensions/spellcheck/hunspell/tests/allcaps.aff => extensions/spellcheck/hunspell/tests/unit/data/allcaps.aff rename : extensions/spellcheck/hunspell/tests/allcaps.dic => extensions/spellcheck/hunspell/tests/unit/data/allcaps.dic rename : extensions/spellcheck/hunspell/tests/allcaps.good => extensions/spellcheck/hunspell/tests/unit/data/allcaps.good rename : extensions/spellcheck/hunspell/tests/allcaps.sug => extensions/spellcheck/hunspell/tests/unit/data/allcaps.sug rename : extensions/spellcheck/hunspell/tests/allcaps.test => extensions/spellcheck/hunspell/tests/unit/data/allcaps.test rename : extensions/spellcheck/hunspell/tests/allcaps.wrong => extensions/spellcheck/hunspell/tests/unit/data/allcaps.wrong rename : extensions/spellcheck/hunspell/tests/allcaps2.aff => extensions/spellcheck/hunspell/tests/unit/data/allcaps2.aff rename : extensions/spellcheck/hunspell/tests/allcaps2.dic => extensions/spellcheck/hunspell/tests/unit/data/allcaps2.dic rename : extensions/spellcheck/hunspell/tests/allcaps2.good => extensions/spellcheck/hunspell/tests/unit/data/allcaps2.good rename : extensions/spellcheck/hunspell/tests/allcaps2.sug => extensions/spellcheck/hunspell/tests/unit/data/allcaps2.sug rename : extensions/spellcheck/hunspell/tests/allcaps2.test => extensions/spellcheck/hunspell/tests/unit/data/allcaps2.test rename : extensions/spellcheck/hunspell/tests/allcaps2.wrong => extensions/spellcheck/hunspell/tests/unit/data/allcaps2.wrong rename : extensions/spellcheck/hunspell/tests/allcaps3.aff => extensions/spellcheck/hunspell/tests/unit/data/allcaps3.aff rename : extensions/spellcheck/hunspell/tests/allcaps3.dic => extensions/spellcheck/hunspell/tests/unit/data/allcaps3.dic rename : extensions/spellcheck/hunspell/tests/allcaps3.good => extensions/spellcheck/hunspell/tests/unit/data/allcaps3.good rename : extensions/spellcheck/hunspell/tests/allcaps3.test => extensions/spellcheck/hunspell/tests/unit/data/allcaps3.test rename : extensions/spellcheck/hunspell/tests/allcaps3.wrong => extensions/spellcheck/hunspell/tests/unit/data/allcaps3.wrong rename : extensions/spellcheck/hunspell/tests/allcaps_utf.aff => extensions/spellcheck/hunspell/tests/unit/data/allcaps_utf.aff rename : extensions/spellcheck/hunspell/tests/allcaps_utf.dic => extensions/spellcheck/hunspell/tests/unit/data/allcaps_utf.dic rename : extensions/spellcheck/hunspell/tests/allcaps_utf.good => extensions/spellcheck/hunspell/tests/unit/data/allcaps_utf.good rename : extensions/spellcheck/hunspell/tests/allcaps_utf.sug => extensions/spellcheck/hunspell/tests/unit/data/allcaps_utf.sug rename : extensions/spellcheck/hunspell/tests/allcaps_utf.test => extensions/spellcheck/hunspell/tests/unit/data/allcaps_utf.test rename : extensions/spellcheck/hunspell/tests/allcaps_utf.wrong => extensions/spellcheck/hunspell/tests/unit/data/allcaps_utf.wrong rename : extensions/spellcheck/hunspell/tests/arabic.aff => extensions/spellcheck/hunspell/tests/unit/data/arabic.aff rename : extensions/spellcheck/hunspell/tests/arabic.dic => extensions/spellcheck/hunspell/tests/unit/data/arabic.dic rename : extensions/spellcheck/hunspell/tests/arabic.test => extensions/spellcheck/hunspell/tests/unit/data/arabic.test rename : extensions/spellcheck/hunspell/tests/arabic.wrong => extensions/spellcheck/hunspell/tests/unit/data/arabic.wrong rename : extensions/spellcheck/hunspell/tests/base.aff => extensions/spellcheck/hunspell/tests/unit/data/base.aff rename : extensions/spellcheck/hunspell/tests/base.dic => extensions/spellcheck/hunspell/tests/unit/data/base.dic rename : extensions/spellcheck/hunspell/tests/base.good => extensions/spellcheck/hunspell/tests/unit/data/base.good rename : extensions/spellcheck/hunspell/tests/base.sug => extensions/spellcheck/hunspell/tests/unit/data/base.sug rename : extensions/spellcheck/hunspell/tests/base.test => extensions/spellcheck/hunspell/tests/unit/data/base.test rename : extensions/spellcheck/hunspell/tests/base.wrong => extensions/spellcheck/hunspell/tests/unit/data/base.wrong rename : extensions/spellcheck/hunspell/tests/base_utf.aff => extensions/spellcheck/hunspell/tests/unit/data/base_utf.aff rename : extensions/spellcheck/hunspell/tests/base_utf.dic => extensions/spellcheck/hunspell/tests/unit/data/base_utf.dic rename : extensions/spellcheck/hunspell/tests/base_utf.good => extensions/spellcheck/hunspell/tests/unit/data/base_utf.good rename : extensions/spellcheck/hunspell/tests/base_utf.sug => extensions/spellcheck/hunspell/tests/unit/data/base_utf.sug rename : extensions/spellcheck/hunspell/tests/base_utf.test => extensions/spellcheck/hunspell/tests/unit/data/base_utf.test rename : extensions/spellcheck/hunspell/tests/base_utf.wrong => extensions/spellcheck/hunspell/tests/unit/data/base_utf.wrong rename : extensions/spellcheck/hunspell/tests/break.aff => extensions/spellcheck/hunspell/tests/unit/data/break.aff rename : extensions/spellcheck/hunspell/tests/break.dic => extensions/spellcheck/hunspell/tests/unit/data/break.dic rename : extensions/spellcheck/hunspell/tests/break.good => extensions/spellcheck/hunspell/tests/unit/data/break.good rename : extensions/spellcheck/hunspell/tests/break.test => extensions/spellcheck/hunspell/tests/unit/data/break.test rename : extensions/spellcheck/hunspell/tests/break.wrong => extensions/spellcheck/hunspell/tests/unit/data/break.wrong rename : extensions/spellcheck/hunspell/tests/breakdefault.aff => extensions/spellcheck/hunspell/tests/unit/data/breakdefault.aff rename : extensions/spellcheck/hunspell/tests/breakdefault.dic => extensions/spellcheck/hunspell/tests/unit/data/breakdefault.dic rename : extensions/spellcheck/hunspell/tests/breakdefault.good => extensions/spellcheck/hunspell/tests/unit/data/breakdefault.good rename : extensions/spellcheck/hunspell/tests/breakdefault.sug => extensions/spellcheck/hunspell/tests/unit/data/breakdefault.sug rename : extensions/spellcheck/hunspell/tests/breakdefault.test => extensions/spellcheck/hunspell/tests/unit/data/breakdefault.test rename : extensions/spellcheck/hunspell/tests/breakdefault.wrong => extensions/spellcheck/hunspell/tests/unit/data/breakdefault.wrong rename : extensions/spellcheck/hunspell/tests/breakoff.aff => extensions/spellcheck/hunspell/tests/unit/data/breakoff.aff rename : extensions/spellcheck/hunspell/tests/breakoff.dic => extensions/spellcheck/hunspell/tests/unit/data/breakoff.dic rename : extensions/spellcheck/hunspell/tests/breakoff.good => extensions/spellcheck/hunspell/tests/unit/data/breakoff.good rename : extensions/spellcheck/hunspell/tests/breakoff.test => extensions/spellcheck/hunspell/tests/unit/data/breakoff.test rename : extensions/spellcheck/hunspell/tests/breakoff.wrong => extensions/spellcheck/hunspell/tests/unit/data/breakoff.wrong rename : extensions/spellcheck/hunspell/tests/checkcompoundcase.aff => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcase.aff rename : extensions/spellcheck/hunspell/tests/checkcompoundcase.dic => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcase.dic rename : extensions/spellcheck/hunspell/tests/checkcompoundcase.good => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcase.good rename : extensions/spellcheck/hunspell/tests/checkcompoundcase.test => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcase.test rename : extensions/spellcheck/hunspell/tests/checkcompoundcase.wrong => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcase.wrong rename : extensions/spellcheck/hunspell/tests/checkcompoundcase2.aff => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcase2.aff rename : extensions/spellcheck/hunspell/tests/checkcompoundcase2.dic => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcase2.dic rename : extensions/spellcheck/hunspell/tests/checkcompoundcase2.good => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcase2.good rename : extensions/spellcheck/hunspell/tests/checkcompoundcase2.test => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcase2.test rename : extensions/spellcheck/hunspell/tests/checkcompoundcase2.wrong => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcase2.wrong rename : extensions/spellcheck/hunspell/tests/checkcompoundcaseutf.aff => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcaseutf.aff rename : extensions/spellcheck/hunspell/tests/checkcompoundcaseutf.dic => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcaseutf.dic rename : extensions/spellcheck/hunspell/tests/checkcompoundcaseutf.good => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcaseutf.good rename : extensions/spellcheck/hunspell/tests/checkcompoundcaseutf.test => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcaseutf.test rename : extensions/spellcheck/hunspell/tests/checkcompoundcaseutf.wrong => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundcaseutf.wrong rename : extensions/spellcheck/hunspell/tests/checkcompounddup.aff => extensions/spellcheck/hunspell/tests/unit/data/checkcompounddup.aff rename : extensions/spellcheck/hunspell/tests/checkcompounddup.dic => extensions/spellcheck/hunspell/tests/unit/data/checkcompounddup.dic rename : extensions/spellcheck/hunspell/tests/checkcompounddup.good => extensions/spellcheck/hunspell/tests/unit/data/checkcompounddup.good rename : extensions/spellcheck/hunspell/tests/checkcompounddup.test => extensions/spellcheck/hunspell/tests/unit/data/checkcompounddup.test rename : extensions/spellcheck/hunspell/tests/checkcompounddup.wrong => extensions/spellcheck/hunspell/tests/unit/data/checkcompounddup.wrong rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern.aff => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern.aff rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern.dic => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern.dic rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern.good => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern.good rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern.test => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern.test rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern.wrong => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern.wrong rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern2.aff => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern2.aff rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern2.dic => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern2.dic rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern2.good => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern2.good rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern2.test => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern2.test rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern2.wrong => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern2.wrong rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern3.aff => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern3.aff rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern3.dic => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern3.dic rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern3.good => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern3.good rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern3.test => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern3.test rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern3.wrong => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern3.wrong rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern4.aff => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern4.aff rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern4.dic => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern4.dic rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern4.good => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern4.good rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern4.test => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern4.test rename : extensions/spellcheck/hunspell/tests/checkcompoundpattern4.wrong => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundpattern4.wrong rename : extensions/spellcheck/hunspell/tests/checkcompoundrep.aff => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundrep.aff rename : extensions/spellcheck/hunspell/tests/checkcompoundrep.dic => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundrep.dic rename : extensions/spellcheck/hunspell/tests/checkcompoundrep.good => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundrep.good rename : extensions/spellcheck/hunspell/tests/checkcompoundrep.test => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundrep.test rename : extensions/spellcheck/hunspell/tests/checkcompoundrep.wrong => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundrep.wrong rename : extensions/spellcheck/hunspell/tests/checkcompoundtriple.aff => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundtriple.aff rename : extensions/spellcheck/hunspell/tests/checkcompoundtriple.dic => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundtriple.dic rename : extensions/spellcheck/hunspell/tests/checkcompoundtriple.good => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundtriple.good rename : extensions/spellcheck/hunspell/tests/checkcompoundtriple.test => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundtriple.test rename : extensions/spellcheck/hunspell/tests/checkcompoundtriple.wrong => extensions/spellcheck/hunspell/tests/unit/data/checkcompoundtriple.wrong rename : extensions/spellcheck/hunspell/tests/checksharps.aff => extensions/spellcheck/hunspell/tests/unit/data/checksharps.aff rename : extensions/spellcheck/hunspell/tests/checksharps.dic => extensions/spellcheck/hunspell/tests/unit/data/checksharps.dic rename : extensions/spellcheck/hunspell/tests/checksharps.good => extensions/spellcheck/hunspell/tests/unit/data/checksharps.good rename : extensions/spellcheck/hunspell/tests/checksharps.sug => extensions/spellcheck/hunspell/tests/unit/data/checksharps.sug rename : extensions/spellcheck/hunspell/tests/checksharps.test => extensions/spellcheck/hunspell/tests/unit/data/checksharps.test rename : extensions/spellcheck/hunspell/tests/checksharps.wrong => extensions/spellcheck/hunspell/tests/unit/data/checksharps.wrong rename : extensions/spellcheck/hunspell/tests/checksharpsutf.aff => extensions/spellcheck/hunspell/tests/unit/data/checksharpsutf.aff rename : extensions/spellcheck/hunspell/tests/checksharpsutf.dic => extensions/spellcheck/hunspell/tests/unit/data/checksharpsutf.dic rename : extensions/spellcheck/hunspell/tests/checksharpsutf.good => extensions/spellcheck/hunspell/tests/unit/data/checksharpsutf.good rename : extensions/spellcheck/hunspell/tests/checksharpsutf.sug => extensions/spellcheck/hunspell/tests/unit/data/checksharpsutf.sug rename : extensions/spellcheck/hunspell/tests/checksharpsutf.test => extensions/spellcheck/hunspell/tests/unit/data/checksharpsutf.test rename : extensions/spellcheck/hunspell/tests/checksharpsutf.wrong => extensions/spellcheck/hunspell/tests/unit/data/checksharpsutf.wrong rename : extensions/spellcheck/hunspell/tests/circumfix.aff => extensions/spellcheck/hunspell/tests/unit/data/circumfix.aff rename : extensions/spellcheck/hunspell/tests/circumfix.dic => extensions/spellcheck/hunspell/tests/unit/data/circumfix.dic rename : extensions/spellcheck/hunspell/tests/circumfix.good => extensions/spellcheck/hunspell/tests/unit/data/circumfix.good rename : extensions/spellcheck/hunspell/tests/circumfix.morph => extensions/spellcheck/hunspell/tests/unit/data/circumfix.morph rename : extensions/spellcheck/hunspell/tests/circumfix.test => extensions/spellcheck/hunspell/tests/unit/data/circumfix.test rename : extensions/spellcheck/hunspell/tests/circumfix.wrong => extensions/spellcheck/hunspell/tests/unit/data/circumfix.wrong rename : extensions/spellcheck/hunspell/tests/colons_in_words.aff => extensions/spellcheck/hunspell/tests/unit/data/colons_in_words.aff rename : extensions/spellcheck/hunspell/tests/colons_in_words.dic => extensions/spellcheck/hunspell/tests/unit/data/colons_in_words.dic rename : extensions/spellcheck/hunspell/tests/colons_in_words.test => extensions/spellcheck/hunspell/tests/unit/data/colons_in_words.test rename : extensions/spellcheck/hunspell/tests/complexprefixes.aff => extensions/spellcheck/hunspell/tests/unit/data/complexprefixes.aff rename : extensions/spellcheck/hunspell/tests/complexprefixes.dic => extensions/spellcheck/hunspell/tests/unit/data/complexprefixes.dic rename : extensions/spellcheck/hunspell/tests/complexprefixes.good => extensions/spellcheck/hunspell/tests/unit/data/complexprefixes.good rename : extensions/spellcheck/hunspell/tests/complexprefixes.test => extensions/spellcheck/hunspell/tests/unit/data/complexprefixes.test rename : extensions/spellcheck/hunspell/tests/complexprefixes.wrong => extensions/spellcheck/hunspell/tests/unit/data/complexprefixes.wrong rename : extensions/spellcheck/hunspell/tests/complexprefixes2.aff => extensions/spellcheck/hunspell/tests/unit/data/complexprefixes2.aff rename : extensions/spellcheck/hunspell/tests/complexprefixes2.dic => extensions/spellcheck/hunspell/tests/unit/data/complexprefixes2.dic rename : extensions/spellcheck/hunspell/tests/complexprefixes2.good => extensions/spellcheck/hunspell/tests/unit/data/complexprefixes2.good rename : extensions/spellcheck/hunspell/tests/complexprefixes2.test => extensions/spellcheck/hunspell/tests/unit/data/complexprefixes2.test rename : extensions/spellcheck/hunspell/tests/complexprefixesutf.aff => extensions/spellcheck/hunspell/tests/unit/data/complexprefixesutf.aff rename : extensions/spellcheck/hunspell/tests/complexprefixesutf.dic => extensions/spellcheck/hunspell/tests/unit/data/complexprefixesutf.dic rename : extensions/spellcheck/hunspell/tests/complexprefixesutf.good => extensions/spellcheck/hunspell/tests/unit/data/complexprefixesutf.good rename : extensions/spellcheck/hunspell/tests/complexprefixesutf.test => extensions/spellcheck/hunspell/tests/unit/data/complexprefixesutf.test rename : extensions/spellcheck/hunspell/tests/complexprefixesutf.wrong => extensions/spellcheck/hunspell/tests/unit/data/complexprefixesutf.wrong rename : extensions/spellcheck/hunspell/tests/compoundaffix.aff => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix.aff rename : extensions/spellcheck/hunspell/tests/compoundaffix.dic => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix.dic rename : extensions/spellcheck/hunspell/tests/compoundaffix.good => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix.good rename : extensions/spellcheck/hunspell/tests/compoundaffix.test => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix.test rename : extensions/spellcheck/hunspell/tests/compoundaffix.wrong => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix.wrong rename : extensions/spellcheck/hunspell/tests/compoundaffix2.aff => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix2.aff rename : extensions/spellcheck/hunspell/tests/compoundaffix2.dic => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix2.dic rename : extensions/spellcheck/hunspell/tests/compoundaffix2.good => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix2.good rename : extensions/spellcheck/hunspell/tests/compoundaffix2.test => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix2.test rename : extensions/spellcheck/hunspell/tests/compoundaffix3.aff => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix3.aff rename : extensions/spellcheck/hunspell/tests/compoundaffix3.dic => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix3.dic rename : extensions/spellcheck/hunspell/tests/compoundaffix3.good => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix3.good rename : extensions/spellcheck/hunspell/tests/compoundaffix3.test => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix3.test rename : extensions/spellcheck/hunspell/tests/compoundaffix3.wrong => extensions/spellcheck/hunspell/tests/unit/data/compoundaffix3.wrong rename : extensions/spellcheck/hunspell/tests/compoundflag.aff => extensions/spellcheck/hunspell/tests/unit/data/compoundflag.aff rename : extensions/spellcheck/hunspell/tests/compoundflag.dic => extensions/spellcheck/hunspell/tests/unit/data/compoundflag.dic rename : extensions/spellcheck/hunspell/tests/compoundflag.good => extensions/spellcheck/hunspell/tests/unit/data/compoundflag.good rename : extensions/spellcheck/hunspell/tests/compoundflag.test => extensions/spellcheck/hunspell/tests/unit/data/compoundflag.test rename : extensions/spellcheck/hunspell/tests/compoundflag.wrong => extensions/spellcheck/hunspell/tests/unit/data/compoundflag.wrong rename : extensions/spellcheck/hunspell/tests/compoundrule.aff => extensions/spellcheck/hunspell/tests/unit/data/compoundrule.aff rename : extensions/spellcheck/hunspell/tests/compoundrule.dic => extensions/spellcheck/hunspell/tests/unit/data/compoundrule.dic rename : extensions/spellcheck/hunspell/tests/compoundrule.good => extensions/spellcheck/hunspell/tests/unit/data/compoundrule.good rename : extensions/spellcheck/hunspell/tests/compoundrule.test => extensions/spellcheck/hunspell/tests/unit/data/compoundrule.test rename : extensions/spellcheck/hunspell/tests/compoundrule.wrong => extensions/spellcheck/hunspell/tests/unit/data/compoundrule.wrong rename : extensions/spellcheck/hunspell/tests/compoundrule2.aff => extensions/spellcheck/hunspell/tests/unit/data/compoundrule2.aff rename : extensions/spellcheck/hunspell/tests/compoundrule2.dic => extensions/spellcheck/hunspell/tests/unit/data/compoundrule2.dic rename : extensions/spellcheck/hunspell/tests/compoundrule2.good => extensions/spellcheck/hunspell/tests/unit/data/compoundrule2.good rename : extensions/spellcheck/hunspell/tests/compoundrule2.test => extensions/spellcheck/hunspell/tests/unit/data/compoundrule2.test rename : extensions/spellcheck/hunspell/tests/compoundrule2.wrong => extensions/spellcheck/hunspell/tests/unit/data/compoundrule2.wrong rename : extensions/spellcheck/hunspell/tests/compoundrule3.aff => extensions/spellcheck/hunspell/tests/unit/data/compoundrule3.aff rename : extensions/spellcheck/hunspell/tests/compoundrule3.dic => extensions/spellcheck/hunspell/tests/unit/data/compoundrule3.dic rename : extensions/spellcheck/hunspell/tests/compoundrule3.good => extensions/spellcheck/hunspell/tests/unit/data/compoundrule3.good rename : extensions/spellcheck/hunspell/tests/compoundrule3.test => extensions/spellcheck/hunspell/tests/unit/data/compoundrule3.test rename : extensions/spellcheck/hunspell/tests/compoundrule3.wrong => extensions/spellcheck/hunspell/tests/unit/data/compoundrule3.wrong rename : extensions/spellcheck/hunspell/tests/compoundrule4.aff => extensions/spellcheck/hunspell/tests/unit/data/compoundrule4.aff rename : extensions/spellcheck/hunspell/tests/compoundrule4.dic => extensions/spellcheck/hunspell/tests/unit/data/compoundrule4.dic rename : extensions/spellcheck/hunspell/tests/compoundrule4.good => extensions/spellcheck/hunspell/tests/unit/data/compoundrule4.good rename : extensions/spellcheck/hunspell/tests/compoundrule4.test => extensions/spellcheck/hunspell/tests/unit/data/compoundrule4.test rename : extensions/spellcheck/hunspell/tests/compoundrule4.wrong => extensions/spellcheck/hunspell/tests/unit/data/compoundrule4.wrong rename : extensions/spellcheck/hunspell/tests/compoundrule5.aff => extensions/spellcheck/hunspell/tests/unit/data/compoundrule5.aff rename : extensions/spellcheck/hunspell/tests/compoundrule5.dic => extensions/spellcheck/hunspell/tests/unit/data/compoundrule5.dic rename : extensions/spellcheck/hunspell/tests/compoundrule5.good => extensions/spellcheck/hunspell/tests/unit/data/compoundrule5.good rename : extensions/spellcheck/hunspell/tests/compoundrule5.morph => extensions/spellcheck/hunspell/tests/unit/data/compoundrule5.morph rename : extensions/spellcheck/hunspell/tests/compoundrule5.test => extensions/spellcheck/hunspell/tests/unit/data/compoundrule5.test rename : extensions/spellcheck/hunspell/tests/compoundrule5.wrong => extensions/spellcheck/hunspell/tests/unit/data/compoundrule5.wrong rename : extensions/spellcheck/hunspell/tests/compoundrule6.aff => extensions/spellcheck/hunspell/tests/unit/data/compoundrule6.aff rename : extensions/spellcheck/hunspell/tests/compoundrule6.dic => extensions/spellcheck/hunspell/tests/unit/data/compoundrule6.dic rename : extensions/spellcheck/hunspell/tests/compoundrule6.good => extensions/spellcheck/hunspell/tests/unit/data/compoundrule6.good rename : extensions/spellcheck/hunspell/tests/compoundrule6.test => extensions/spellcheck/hunspell/tests/unit/data/compoundrule6.test rename : extensions/spellcheck/hunspell/tests/compoundrule6.wrong => extensions/spellcheck/hunspell/tests/unit/data/compoundrule6.wrong rename : extensions/spellcheck/hunspell/tests/compoundrule7.aff => extensions/spellcheck/hunspell/tests/unit/data/compoundrule7.aff rename : extensions/spellcheck/hunspell/tests/compoundrule7.dic => extensions/spellcheck/hunspell/tests/unit/data/compoundrule7.dic rename : extensions/spellcheck/hunspell/tests/compoundrule7.good => extensions/spellcheck/hunspell/tests/unit/data/compoundrule7.good rename : extensions/spellcheck/hunspell/tests/compoundrule7.test => extensions/spellcheck/hunspell/tests/unit/data/compoundrule7.test rename : extensions/spellcheck/hunspell/tests/compoundrule7.wrong => extensions/spellcheck/hunspell/tests/unit/data/compoundrule7.wrong rename : extensions/spellcheck/hunspell/tests/compoundrule8.aff => extensions/spellcheck/hunspell/tests/unit/data/compoundrule8.aff rename : extensions/spellcheck/hunspell/tests/compoundrule8.dic => extensions/spellcheck/hunspell/tests/unit/data/compoundrule8.dic rename : extensions/spellcheck/hunspell/tests/compoundrule8.good => extensions/spellcheck/hunspell/tests/unit/data/compoundrule8.good rename : extensions/spellcheck/hunspell/tests/compoundrule8.test => extensions/spellcheck/hunspell/tests/unit/data/compoundrule8.test rename : extensions/spellcheck/hunspell/tests/compoundrule8.wrong => extensions/spellcheck/hunspell/tests/unit/data/compoundrule8.wrong rename : extensions/spellcheck/hunspell/tests/condition.aff => extensions/spellcheck/hunspell/tests/unit/data/condition.aff rename : extensions/spellcheck/hunspell/tests/condition.dic => extensions/spellcheck/hunspell/tests/unit/data/condition.dic rename : extensions/spellcheck/hunspell/tests/condition.good => extensions/spellcheck/hunspell/tests/unit/data/condition.good rename : extensions/spellcheck/hunspell/tests/condition.test => extensions/spellcheck/hunspell/tests/unit/data/condition.test rename : extensions/spellcheck/hunspell/tests/condition.wrong => extensions/spellcheck/hunspell/tests/unit/data/condition.wrong rename : extensions/spellcheck/hunspell/tests/condition_utf.aff => extensions/spellcheck/hunspell/tests/unit/data/condition_utf.aff rename : extensions/spellcheck/hunspell/tests/condition_utf.dic => extensions/spellcheck/hunspell/tests/unit/data/condition_utf.dic rename : extensions/spellcheck/hunspell/tests/condition_utf.good => extensions/spellcheck/hunspell/tests/unit/data/condition_utf.good rename : extensions/spellcheck/hunspell/tests/condition_utf.test => extensions/spellcheck/hunspell/tests/unit/data/condition_utf.test rename : extensions/spellcheck/hunspell/tests/condition_utf.wrong => extensions/spellcheck/hunspell/tests/unit/data/condition_utf.wrong rename : extensions/spellcheck/hunspell/tests/conditionalprefix.aff => extensions/spellcheck/hunspell/tests/unit/data/conditionalprefix.aff rename : extensions/spellcheck/hunspell/tests/conditionalprefix.dic => extensions/spellcheck/hunspell/tests/unit/data/conditionalprefix.dic rename : extensions/spellcheck/hunspell/tests/conditionalprefix.good => extensions/spellcheck/hunspell/tests/unit/data/conditionalprefix.good rename : extensions/spellcheck/hunspell/tests/conditionalprefix.morph => extensions/spellcheck/hunspell/tests/unit/data/conditionalprefix.morph rename : extensions/spellcheck/hunspell/tests/conditionalprefix.test => extensions/spellcheck/hunspell/tests/unit/data/conditionalprefix.test rename : extensions/spellcheck/hunspell/tests/conditionalprefix.wrong => extensions/spellcheck/hunspell/tests/unit/data/conditionalprefix.wrong rename : extensions/spellcheck/hunspell/tests/digits_in_words.aff => extensions/spellcheck/hunspell/tests/unit/data/digits_in_words.aff rename : extensions/spellcheck/hunspell/tests/digits_in_words.dic => extensions/spellcheck/hunspell/tests/unit/data/digits_in_words.dic rename : extensions/spellcheck/hunspell/tests/digits_in_words.test => extensions/spellcheck/hunspell/tests/unit/data/digits_in_words.test rename : extensions/spellcheck/hunspell/tests/digits_in_words.wrong => extensions/spellcheck/hunspell/tests/unit/data/digits_in_words.wrong rename : extensions/spellcheck/hunspell/tests/encoding.aff => extensions/spellcheck/hunspell/tests/unit/data/encoding.aff rename : extensions/spellcheck/hunspell/tests/encoding.dic => extensions/spellcheck/hunspell/tests/unit/data/encoding.dic rename : extensions/spellcheck/hunspell/tests/encoding.good => extensions/spellcheck/hunspell/tests/unit/data/encoding.good rename : extensions/spellcheck/hunspell/tests/encoding.test => extensions/spellcheck/hunspell/tests/unit/data/encoding.test rename : extensions/spellcheck/hunspell/tests/flag.aff => extensions/spellcheck/hunspell/tests/unit/data/flag.aff rename : extensions/spellcheck/hunspell/tests/flag.dic => extensions/spellcheck/hunspell/tests/unit/data/flag.dic rename : extensions/spellcheck/hunspell/tests/flag.good => extensions/spellcheck/hunspell/tests/unit/data/flag.good rename : extensions/spellcheck/hunspell/tests/flag.test => extensions/spellcheck/hunspell/tests/unit/data/flag.test rename : extensions/spellcheck/hunspell/tests/flaglong.aff => extensions/spellcheck/hunspell/tests/unit/data/flaglong.aff rename : extensions/spellcheck/hunspell/tests/flaglong.dic => extensions/spellcheck/hunspell/tests/unit/data/flaglong.dic rename : extensions/spellcheck/hunspell/tests/flaglong.good => extensions/spellcheck/hunspell/tests/unit/data/flaglong.good rename : extensions/spellcheck/hunspell/tests/flaglong.test => extensions/spellcheck/hunspell/tests/unit/data/flaglong.test rename : extensions/spellcheck/hunspell/tests/flagnum.aff => extensions/spellcheck/hunspell/tests/unit/data/flagnum.aff rename : extensions/spellcheck/hunspell/tests/flagnum.dic => extensions/spellcheck/hunspell/tests/unit/data/flagnum.dic rename : extensions/spellcheck/hunspell/tests/flagnum.good => extensions/spellcheck/hunspell/tests/unit/data/flagnum.good rename : extensions/spellcheck/hunspell/tests/flagnum.test => extensions/spellcheck/hunspell/tests/unit/data/flagnum.test rename : extensions/spellcheck/hunspell/tests/flagutf8.aff => extensions/spellcheck/hunspell/tests/unit/data/flagutf8.aff rename : extensions/spellcheck/hunspell/tests/flagutf8.dic => extensions/spellcheck/hunspell/tests/unit/data/flagutf8.dic rename : extensions/spellcheck/hunspell/tests/flagutf8.good => extensions/spellcheck/hunspell/tests/unit/data/flagutf8.good rename : extensions/spellcheck/hunspell/tests/flagutf8.test => extensions/spellcheck/hunspell/tests/unit/data/flagutf8.test rename : extensions/spellcheck/hunspell/tests/fogemorpheme.aff => extensions/spellcheck/hunspell/tests/unit/data/fogemorpheme.aff rename : extensions/spellcheck/hunspell/tests/fogemorpheme.dic => extensions/spellcheck/hunspell/tests/unit/data/fogemorpheme.dic rename : extensions/spellcheck/hunspell/tests/fogemorpheme.good => extensions/spellcheck/hunspell/tests/unit/data/fogemorpheme.good rename : extensions/spellcheck/hunspell/tests/fogemorpheme.test => extensions/spellcheck/hunspell/tests/unit/data/fogemorpheme.test rename : extensions/spellcheck/hunspell/tests/fogemorpheme.wrong => extensions/spellcheck/hunspell/tests/unit/data/fogemorpheme.wrong rename : extensions/spellcheck/hunspell/tests/forbiddenword.aff => extensions/spellcheck/hunspell/tests/unit/data/forbiddenword.aff rename : extensions/spellcheck/hunspell/tests/forbiddenword.dic => extensions/spellcheck/hunspell/tests/unit/data/forbiddenword.dic rename : extensions/spellcheck/hunspell/tests/forbiddenword.good => extensions/spellcheck/hunspell/tests/unit/data/forbiddenword.good rename : extensions/spellcheck/hunspell/tests/forbiddenword.test => extensions/spellcheck/hunspell/tests/unit/data/forbiddenword.test rename : extensions/spellcheck/hunspell/tests/forbiddenword.wrong => extensions/spellcheck/hunspell/tests/unit/data/forbiddenword.wrong rename : extensions/spellcheck/hunspell/tests/forceucase.aff => extensions/spellcheck/hunspell/tests/unit/data/forceucase.aff rename : extensions/spellcheck/hunspell/tests/forceucase.dic => extensions/spellcheck/hunspell/tests/unit/data/forceucase.dic rename : extensions/spellcheck/hunspell/tests/forceucase.good => extensions/spellcheck/hunspell/tests/unit/data/forceucase.good rename : extensions/spellcheck/hunspell/tests/forceucase.sug => extensions/spellcheck/hunspell/tests/unit/data/forceucase.sug rename : extensions/spellcheck/hunspell/tests/forceucase.test => extensions/spellcheck/hunspell/tests/unit/data/forceucase.test rename : extensions/spellcheck/hunspell/tests/forceucase.wrong => extensions/spellcheck/hunspell/tests/unit/data/forceucase.wrong rename : extensions/spellcheck/hunspell/tests/fullstrip.aff => extensions/spellcheck/hunspell/tests/unit/data/fullstrip.aff rename : extensions/spellcheck/hunspell/tests/fullstrip.dic => extensions/spellcheck/hunspell/tests/unit/data/fullstrip.dic rename : extensions/spellcheck/hunspell/tests/fullstrip.good => extensions/spellcheck/hunspell/tests/unit/data/fullstrip.good rename : extensions/spellcheck/hunspell/tests/fullstrip.test => extensions/spellcheck/hunspell/tests/unit/data/fullstrip.test rename : extensions/spellcheck/hunspell/tests/germancompounding.aff => extensions/spellcheck/hunspell/tests/unit/data/germancompounding.aff rename : extensions/spellcheck/hunspell/tests/germancompounding.dic => extensions/spellcheck/hunspell/tests/unit/data/germancompounding.dic rename : extensions/spellcheck/hunspell/tests/germancompounding.good => extensions/spellcheck/hunspell/tests/unit/data/germancompounding.good rename : extensions/spellcheck/hunspell/tests/germancompounding.test => extensions/spellcheck/hunspell/tests/unit/data/germancompounding.test rename : extensions/spellcheck/hunspell/tests/germancompounding.wrong => extensions/spellcheck/hunspell/tests/unit/data/germancompounding.wrong rename : extensions/spellcheck/hunspell/tests/germancompoundingold.aff => extensions/spellcheck/hunspell/tests/unit/data/germancompoundingold.aff rename : extensions/spellcheck/hunspell/tests/germancompoundingold.dic => extensions/spellcheck/hunspell/tests/unit/data/germancompoundingold.dic rename : extensions/spellcheck/hunspell/tests/germancompoundingold.good => extensions/spellcheck/hunspell/tests/unit/data/germancompoundingold.good rename : extensions/spellcheck/hunspell/tests/germancompoundingold.test => extensions/spellcheck/hunspell/tests/unit/data/germancompoundingold.test rename : extensions/spellcheck/hunspell/tests/germancompoundingold.wrong => extensions/spellcheck/hunspell/tests/unit/data/germancompoundingold.wrong rename : extensions/spellcheck/hunspell/tests/i35725.aff => extensions/spellcheck/hunspell/tests/unit/data/i35725.aff rename : extensions/spellcheck/hunspell/tests/i35725.dic => extensions/spellcheck/hunspell/tests/unit/data/i35725.dic rename : extensions/spellcheck/hunspell/tests/i35725.good => extensions/spellcheck/hunspell/tests/unit/data/i35725.good rename : extensions/spellcheck/hunspell/tests/i35725.sug => extensions/spellcheck/hunspell/tests/unit/data/i35725.sug rename : extensions/spellcheck/hunspell/tests/i35725.test => extensions/spellcheck/hunspell/tests/unit/data/i35725.test rename : extensions/spellcheck/hunspell/tests/i35725.wrong => extensions/spellcheck/hunspell/tests/unit/data/i35725.wrong rename : extensions/spellcheck/hunspell/tests/i53643.aff => extensions/spellcheck/hunspell/tests/unit/data/i53643.aff rename : extensions/spellcheck/hunspell/tests/i53643.dic => extensions/spellcheck/hunspell/tests/unit/data/i53643.dic rename : extensions/spellcheck/hunspell/tests/i53643.good => extensions/spellcheck/hunspell/tests/unit/data/i53643.good rename : extensions/spellcheck/hunspell/tests/i53643.test => extensions/spellcheck/hunspell/tests/unit/data/i53643.test rename : extensions/spellcheck/hunspell/tests/i53643.wrong => extensions/spellcheck/hunspell/tests/unit/data/i53643.wrong rename : extensions/spellcheck/hunspell/tests/i54633.aff => extensions/spellcheck/hunspell/tests/unit/data/i54633.aff rename : extensions/spellcheck/hunspell/tests/i54633.dic => extensions/spellcheck/hunspell/tests/unit/data/i54633.dic rename : extensions/spellcheck/hunspell/tests/i54633.good => extensions/spellcheck/hunspell/tests/unit/data/i54633.good rename : extensions/spellcheck/hunspell/tests/i54633.sug => extensions/spellcheck/hunspell/tests/unit/data/i54633.sug rename : extensions/spellcheck/hunspell/tests/i54633.test => extensions/spellcheck/hunspell/tests/unit/data/i54633.test rename : extensions/spellcheck/hunspell/tests/i54633.wrong => extensions/spellcheck/hunspell/tests/unit/data/i54633.wrong rename : extensions/spellcheck/hunspell/tests/i54980.aff => extensions/spellcheck/hunspell/tests/unit/data/i54980.aff rename : extensions/spellcheck/hunspell/tests/i54980.dic => extensions/spellcheck/hunspell/tests/unit/data/i54980.dic rename : extensions/spellcheck/hunspell/tests/i54980.good => extensions/spellcheck/hunspell/tests/unit/data/i54980.good rename : extensions/spellcheck/hunspell/tests/i54980.test => extensions/spellcheck/hunspell/tests/unit/data/i54980.test rename : extensions/spellcheck/hunspell/tests/i58202.aff => extensions/spellcheck/hunspell/tests/unit/data/i58202.aff rename : extensions/spellcheck/hunspell/tests/i58202.dic => extensions/spellcheck/hunspell/tests/unit/data/i58202.dic rename : extensions/spellcheck/hunspell/tests/i58202.good => extensions/spellcheck/hunspell/tests/unit/data/i58202.good rename : extensions/spellcheck/hunspell/tests/i58202.sug => extensions/spellcheck/hunspell/tests/unit/data/i58202.sug rename : extensions/spellcheck/hunspell/tests/i58202.test => extensions/spellcheck/hunspell/tests/unit/data/i58202.test rename : extensions/spellcheck/hunspell/tests/i58202.wrong => extensions/spellcheck/hunspell/tests/unit/data/i58202.wrong rename : extensions/spellcheck/hunspell/tests/i68568.aff => extensions/spellcheck/hunspell/tests/unit/data/i68568.aff rename : extensions/spellcheck/hunspell/tests/i68568.dic => extensions/spellcheck/hunspell/tests/unit/data/i68568.dic rename : extensions/spellcheck/hunspell/tests/i68568.test => extensions/spellcheck/hunspell/tests/unit/data/i68568.test rename : extensions/spellcheck/hunspell/tests/i68568.wrong => extensions/spellcheck/hunspell/tests/unit/data/i68568.wrong rename : extensions/spellcheck/hunspell/tests/i68568utf.aff => extensions/spellcheck/hunspell/tests/unit/data/i68568utf.aff rename : extensions/spellcheck/hunspell/tests/i68568utf.dic => extensions/spellcheck/hunspell/tests/unit/data/i68568utf.dic rename : extensions/spellcheck/hunspell/tests/i68568utf.test => extensions/spellcheck/hunspell/tests/unit/data/i68568utf.test rename : extensions/spellcheck/hunspell/tests/i68568utf.wrong => extensions/spellcheck/hunspell/tests/unit/data/i68568utf.wrong rename : extensions/spellcheck/hunspell/tests/iconv.aff => extensions/spellcheck/hunspell/tests/unit/data/iconv.aff rename : extensions/spellcheck/hunspell/tests/iconv.dic => extensions/spellcheck/hunspell/tests/unit/data/iconv.dic rename : extensions/spellcheck/hunspell/tests/iconv.good => extensions/spellcheck/hunspell/tests/unit/data/iconv.good rename : extensions/spellcheck/hunspell/tests/iconv.test => extensions/spellcheck/hunspell/tests/unit/data/iconv.test rename : extensions/spellcheck/hunspell/tests/ignore.aff => extensions/spellcheck/hunspell/tests/unit/data/ignore.aff rename : extensions/spellcheck/hunspell/tests/ignore.dic => extensions/spellcheck/hunspell/tests/unit/data/ignore.dic rename : extensions/spellcheck/hunspell/tests/ignore.good => extensions/spellcheck/hunspell/tests/unit/data/ignore.good rename : extensions/spellcheck/hunspell/tests/ignore.test => extensions/spellcheck/hunspell/tests/unit/data/ignore.test rename : extensions/spellcheck/hunspell/tests/ignoreutf.aff => extensions/spellcheck/hunspell/tests/unit/data/ignoreutf.aff rename : extensions/spellcheck/hunspell/tests/ignoreutf.dic => extensions/spellcheck/hunspell/tests/unit/data/ignoreutf.dic rename : extensions/spellcheck/hunspell/tests/ignoreutf.good => extensions/spellcheck/hunspell/tests/unit/data/ignoreutf.good rename : extensions/spellcheck/hunspell/tests/ignoreutf.test => extensions/spellcheck/hunspell/tests/unit/data/ignoreutf.test rename : extensions/spellcheck/hunspell/tests/keepcase.aff => extensions/spellcheck/hunspell/tests/unit/data/keepcase.aff rename : extensions/spellcheck/hunspell/tests/keepcase.dic => extensions/spellcheck/hunspell/tests/unit/data/keepcase.dic rename : extensions/spellcheck/hunspell/tests/keepcase.good => extensions/spellcheck/hunspell/tests/unit/data/keepcase.good rename : extensions/spellcheck/hunspell/tests/keepcase.sug => extensions/spellcheck/hunspell/tests/unit/data/keepcase.sug rename : extensions/spellcheck/hunspell/tests/keepcase.test => extensions/spellcheck/hunspell/tests/unit/data/keepcase.test rename : extensions/spellcheck/hunspell/tests/keepcase.wrong => extensions/spellcheck/hunspell/tests/unit/data/keepcase.wrong rename : extensions/spellcheck/hunspell/tests/korean.aff => extensions/spellcheck/hunspell/tests/unit/data/korean.aff rename : extensions/spellcheck/hunspell/tests/korean.dic => extensions/spellcheck/hunspell/tests/unit/data/korean.dic rename : extensions/spellcheck/hunspell/tests/korean.good => extensions/spellcheck/hunspell/tests/unit/data/korean.good rename : extensions/spellcheck/hunspell/tests/korean.test => extensions/spellcheck/hunspell/tests/unit/data/korean.test rename : extensions/spellcheck/hunspell/tests/korean.wrong => extensions/spellcheck/hunspell/tests/unit/data/korean.wrong rename : extensions/spellcheck/hunspell/tests/map.aff => extensions/spellcheck/hunspell/tests/unit/data/map.aff rename : extensions/spellcheck/hunspell/tests/map.dic => extensions/spellcheck/hunspell/tests/unit/data/map.dic rename : extensions/spellcheck/hunspell/tests/map.sug => extensions/spellcheck/hunspell/tests/unit/data/map.sug rename : extensions/spellcheck/hunspell/tests/map.test => extensions/spellcheck/hunspell/tests/unit/data/map.test rename : extensions/spellcheck/hunspell/tests/map.wrong => extensions/spellcheck/hunspell/tests/unit/data/map.wrong rename : extensions/spellcheck/hunspell/tests/maputf.aff => extensions/spellcheck/hunspell/tests/unit/data/maputf.aff rename : extensions/spellcheck/hunspell/tests/maputf.dic => extensions/spellcheck/hunspell/tests/unit/data/maputf.dic rename : extensions/spellcheck/hunspell/tests/maputf.sug => extensions/spellcheck/hunspell/tests/unit/data/maputf.sug rename : extensions/spellcheck/hunspell/tests/maputf.test => extensions/spellcheck/hunspell/tests/unit/data/maputf.test rename : extensions/spellcheck/hunspell/tests/maputf.wrong => extensions/spellcheck/hunspell/tests/unit/data/maputf.wrong rename : extensions/spellcheck/hunspell/tests/morph.aff => extensions/spellcheck/hunspell/tests/unit/data/morph.aff rename : extensions/spellcheck/hunspell/tests/morph.dic => extensions/spellcheck/hunspell/tests/unit/data/morph.dic rename : extensions/spellcheck/hunspell/tests/morph.good => extensions/spellcheck/hunspell/tests/unit/data/morph.good rename : extensions/spellcheck/hunspell/tests/morph.morph => extensions/spellcheck/hunspell/tests/unit/data/morph.morph rename : extensions/spellcheck/hunspell/tests/morph.test => extensions/spellcheck/hunspell/tests/unit/data/morph.test rename : extensions/spellcheck/hunspell/tests/needaffix.aff => extensions/spellcheck/hunspell/tests/unit/data/needaffix.aff rename : extensions/spellcheck/hunspell/tests/needaffix.dic => extensions/spellcheck/hunspell/tests/unit/data/needaffix.dic rename : extensions/spellcheck/hunspell/tests/needaffix.good => extensions/spellcheck/hunspell/tests/unit/data/needaffix.good rename : extensions/spellcheck/hunspell/tests/needaffix.test => extensions/spellcheck/hunspell/tests/unit/data/needaffix.test rename : extensions/spellcheck/hunspell/tests/needaffix.wrong => extensions/spellcheck/hunspell/tests/unit/data/needaffix.wrong rename : extensions/spellcheck/hunspell/tests/needaffix2.aff => extensions/spellcheck/hunspell/tests/unit/data/needaffix2.aff rename : extensions/spellcheck/hunspell/tests/needaffix2.dic => extensions/spellcheck/hunspell/tests/unit/data/needaffix2.dic rename : extensions/spellcheck/hunspell/tests/needaffix2.good => extensions/spellcheck/hunspell/tests/unit/data/needaffix2.good rename : extensions/spellcheck/hunspell/tests/needaffix2.morph => extensions/spellcheck/hunspell/tests/unit/data/needaffix2.morph rename : extensions/spellcheck/hunspell/tests/needaffix2.test => extensions/spellcheck/hunspell/tests/unit/data/needaffix2.test rename : extensions/spellcheck/hunspell/tests/needaffix3.aff => extensions/spellcheck/hunspell/tests/unit/data/needaffix3.aff rename : extensions/spellcheck/hunspell/tests/needaffix3.dic => extensions/spellcheck/hunspell/tests/unit/data/needaffix3.dic rename : extensions/spellcheck/hunspell/tests/needaffix3.good => extensions/spellcheck/hunspell/tests/unit/data/needaffix3.good rename : extensions/spellcheck/hunspell/tests/needaffix3.test => extensions/spellcheck/hunspell/tests/unit/data/needaffix3.test rename : extensions/spellcheck/hunspell/tests/needaffix3.wrong => extensions/spellcheck/hunspell/tests/unit/data/needaffix3.wrong rename : extensions/spellcheck/hunspell/tests/needaffix4.aff => extensions/spellcheck/hunspell/tests/unit/data/needaffix4.aff rename : extensions/spellcheck/hunspell/tests/needaffix4.dic => extensions/spellcheck/hunspell/tests/unit/data/needaffix4.dic rename : extensions/spellcheck/hunspell/tests/needaffix4.good => extensions/spellcheck/hunspell/tests/unit/data/needaffix4.good rename : extensions/spellcheck/hunspell/tests/needaffix4.test => extensions/spellcheck/hunspell/tests/unit/data/needaffix4.test rename : extensions/spellcheck/hunspell/tests/needaffix5.aff => extensions/spellcheck/hunspell/tests/unit/data/needaffix5.aff rename : extensions/spellcheck/hunspell/tests/needaffix5.dic => extensions/spellcheck/hunspell/tests/unit/data/needaffix5.dic rename : extensions/spellcheck/hunspell/tests/needaffix5.good => extensions/spellcheck/hunspell/tests/unit/data/needaffix5.good rename : extensions/spellcheck/hunspell/tests/needaffix5.test => extensions/spellcheck/hunspell/tests/unit/data/needaffix5.test rename : extensions/spellcheck/hunspell/tests/needaffix5.wrong => extensions/spellcheck/hunspell/tests/unit/data/needaffix5.wrong rename : extensions/spellcheck/hunspell/tests/ngram_utf_fix.aff => extensions/spellcheck/hunspell/tests/unit/data/ngram_utf_fix.aff rename : extensions/spellcheck/hunspell/tests/ngram_utf_fix.dic => extensions/spellcheck/hunspell/tests/unit/data/ngram_utf_fix.dic rename : extensions/spellcheck/hunspell/tests/ngram_utf_fix.good => extensions/spellcheck/hunspell/tests/unit/data/ngram_utf_fix.good rename : extensions/spellcheck/hunspell/tests/ngram_utf_fix.sug => extensions/spellcheck/hunspell/tests/unit/data/ngram_utf_fix.sug rename : extensions/spellcheck/hunspell/tests/ngram_utf_fix.test => extensions/spellcheck/hunspell/tests/unit/data/ngram_utf_fix.test rename : extensions/spellcheck/hunspell/tests/ngram_utf_fix.wrong => extensions/spellcheck/hunspell/tests/unit/data/ngram_utf_fix.wrong rename : extensions/spellcheck/hunspell/tests/nosuggest.aff => extensions/spellcheck/hunspell/tests/unit/data/nosuggest.aff rename : extensions/spellcheck/hunspell/tests/nosuggest.dic => extensions/spellcheck/hunspell/tests/unit/data/nosuggest.dic rename : extensions/spellcheck/hunspell/tests/nosuggest.good => extensions/spellcheck/hunspell/tests/unit/data/nosuggest.good rename : extensions/spellcheck/hunspell/tests/nosuggest.sug => extensions/spellcheck/hunspell/tests/unit/data/nosuggest.sug rename : extensions/spellcheck/hunspell/tests/nosuggest.test => extensions/spellcheck/hunspell/tests/unit/data/nosuggest.test rename : extensions/spellcheck/hunspell/tests/nosuggest.wrong => extensions/spellcheck/hunspell/tests/unit/data/nosuggest.wrong rename : extensions/spellcheck/hunspell/tests/oconv.aff => extensions/spellcheck/hunspell/tests/unit/data/oconv.aff rename : extensions/spellcheck/hunspell/tests/oconv.dic => extensions/spellcheck/hunspell/tests/unit/data/oconv.dic rename : extensions/spellcheck/hunspell/tests/oconv.good => extensions/spellcheck/hunspell/tests/unit/data/oconv.good rename : extensions/spellcheck/hunspell/tests/oconv.sug => extensions/spellcheck/hunspell/tests/unit/data/oconv.sug rename : extensions/spellcheck/hunspell/tests/oconv.test => extensions/spellcheck/hunspell/tests/unit/data/oconv.test rename : extensions/spellcheck/hunspell/tests/oconv.wrong => extensions/spellcheck/hunspell/tests/unit/data/oconv.wrong rename : extensions/spellcheck/hunspell/tests/onlyincompound.aff => extensions/spellcheck/hunspell/tests/unit/data/onlyincompound.aff rename : extensions/spellcheck/hunspell/tests/onlyincompound.dic => extensions/spellcheck/hunspell/tests/unit/data/onlyincompound.dic rename : extensions/spellcheck/hunspell/tests/onlyincompound.good => extensions/spellcheck/hunspell/tests/unit/data/onlyincompound.good rename : extensions/spellcheck/hunspell/tests/onlyincompound.sug => extensions/spellcheck/hunspell/tests/unit/data/onlyincompound.sug rename : extensions/spellcheck/hunspell/tests/onlyincompound.test => extensions/spellcheck/hunspell/tests/unit/data/onlyincompound.test rename : extensions/spellcheck/hunspell/tests/onlyincompound.wrong => extensions/spellcheck/hunspell/tests/unit/data/onlyincompound.wrong rename : extensions/spellcheck/hunspell/tests/onlyincompound2.aff => extensions/spellcheck/hunspell/tests/unit/data/onlyincompound2.aff rename : extensions/spellcheck/hunspell/tests/onlyincompound2.dic => extensions/spellcheck/hunspell/tests/unit/data/onlyincompound2.dic rename : extensions/spellcheck/hunspell/tests/onlyincompound2.good => extensions/spellcheck/hunspell/tests/unit/data/onlyincompound2.good rename : extensions/spellcheck/hunspell/tests/onlyincompound2.test => extensions/spellcheck/hunspell/tests/unit/data/onlyincompound2.test rename : extensions/spellcheck/hunspell/tests/onlyincompound2.wrong => extensions/spellcheck/hunspell/tests/unit/data/onlyincompound2.wrong rename : extensions/spellcheck/hunspell/tests/opentaal_cpdpat.aff => extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat.aff rename : extensions/spellcheck/hunspell/tests/opentaal_cpdpat.dic => extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat.dic rename : extensions/spellcheck/hunspell/tests/opentaal_cpdpat.good => extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat.good rename : extensions/spellcheck/hunspell/tests/opentaal_cpdpat.test => extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat.test rename : extensions/spellcheck/hunspell/tests/opentaal_cpdpat.wrong => extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat.wrong rename : extensions/spellcheck/hunspell/tests/opentaal_cpdpat2.aff => extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat2.aff rename : extensions/spellcheck/hunspell/tests/opentaal_cpdpat2.dic => extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat2.dic rename : extensions/spellcheck/hunspell/tests/opentaal_cpdpat2.good => extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat2.good rename : extensions/spellcheck/hunspell/tests/opentaal_cpdpat2.test => extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat2.test rename : extensions/spellcheck/hunspell/tests/opentaal_cpdpat2.wrong => extensions/spellcheck/hunspell/tests/unit/data/opentaal_cpdpat2.wrong rename : extensions/spellcheck/hunspell/tests/opentaal_forbiddenword1.aff => extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword1.aff rename : extensions/spellcheck/hunspell/tests/opentaal_forbiddenword1.dic => extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword1.dic rename : extensions/spellcheck/hunspell/tests/opentaal_forbiddenword1.good => extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword1.good rename : extensions/spellcheck/hunspell/tests/opentaal_forbiddenword1.sug => extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword1.sug rename : extensions/spellcheck/hunspell/tests/opentaal_forbiddenword1.test => extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword1.test rename : extensions/spellcheck/hunspell/tests/opentaal_forbiddenword1.wrong => extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword1.wrong rename : extensions/spellcheck/hunspell/tests/opentaal_forbiddenword2.aff => extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword2.aff rename : extensions/spellcheck/hunspell/tests/opentaal_forbiddenword2.dic => extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword2.dic rename : extensions/spellcheck/hunspell/tests/opentaal_forbiddenword2.good => extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword2.good rename : extensions/spellcheck/hunspell/tests/opentaal_forbiddenword2.sug => extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword2.sug rename : extensions/spellcheck/hunspell/tests/opentaal_forbiddenword2.test => extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword2.test rename : extensions/spellcheck/hunspell/tests/opentaal_forbiddenword2.wrong => extensions/spellcheck/hunspell/tests/unit/data/opentaal_forbiddenword2.wrong rename : extensions/spellcheck/hunspell/tests/opentaal_keepcase.aff => extensions/spellcheck/hunspell/tests/unit/data/opentaal_keepcase.aff rename : extensions/spellcheck/hunspell/tests/opentaal_keepcase.dic => extensions/spellcheck/hunspell/tests/unit/data/opentaal_keepcase.dic rename : extensions/spellcheck/hunspell/tests/opentaal_keepcase.good => extensions/spellcheck/hunspell/tests/unit/data/opentaal_keepcase.good rename : extensions/spellcheck/hunspell/tests/opentaal_keepcase.sug => extensions/spellcheck/hunspell/tests/unit/data/opentaal_keepcase.sug rename : extensions/spellcheck/hunspell/tests/opentaal_keepcase.test => extensions/spellcheck/hunspell/tests/unit/data/opentaal_keepcase.test rename : extensions/spellcheck/hunspell/tests/opentaal_keepcase.wrong => extensions/spellcheck/hunspell/tests/unit/data/opentaal_keepcase.wrong rename : extensions/spellcheck/hunspell/tests/phone.aff => extensions/spellcheck/hunspell/tests/unit/data/phone.aff rename : extensions/spellcheck/hunspell/tests/phone.dic => extensions/spellcheck/hunspell/tests/unit/data/phone.dic rename : extensions/spellcheck/hunspell/tests/phone.sug => extensions/spellcheck/hunspell/tests/unit/data/phone.sug rename : extensions/spellcheck/hunspell/tests/phone.test => extensions/spellcheck/hunspell/tests/unit/data/phone.test rename : extensions/spellcheck/hunspell/tests/phone.wrong => extensions/spellcheck/hunspell/tests/unit/data/phone.wrong rename : extensions/spellcheck/hunspell/tests/rep.aff => extensions/spellcheck/hunspell/tests/unit/data/rep.aff rename : extensions/spellcheck/hunspell/tests/rep.dic => extensions/spellcheck/hunspell/tests/unit/data/rep.dic rename : extensions/spellcheck/hunspell/tests/rep.sug => extensions/spellcheck/hunspell/tests/unit/data/rep.sug rename : extensions/spellcheck/hunspell/tests/rep.test => extensions/spellcheck/hunspell/tests/unit/data/rep.test rename : extensions/spellcheck/hunspell/tests/rep.wrong => extensions/spellcheck/hunspell/tests/unit/data/rep.wrong rename : extensions/spellcheck/hunspell/tests/reputf.aff => extensions/spellcheck/hunspell/tests/unit/data/reputf.aff rename : extensions/spellcheck/hunspell/tests/reputf.dic => extensions/spellcheck/hunspell/tests/unit/data/reputf.dic rename : extensions/spellcheck/hunspell/tests/reputf.sug => extensions/spellcheck/hunspell/tests/unit/data/reputf.sug rename : extensions/spellcheck/hunspell/tests/reputf.test => extensions/spellcheck/hunspell/tests/unit/data/reputf.test rename : extensions/spellcheck/hunspell/tests/reputf.wrong => extensions/spellcheck/hunspell/tests/unit/data/reputf.wrong rename : extensions/spellcheck/hunspell/tests/simplifiedtriple.aff => extensions/spellcheck/hunspell/tests/unit/data/simplifiedtriple.aff rename : extensions/spellcheck/hunspell/tests/simplifiedtriple.dic => extensions/spellcheck/hunspell/tests/unit/data/simplifiedtriple.dic rename : extensions/spellcheck/hunspell/tests/simplifiedtriple.good => extensions/spellcheck/hunspell/tests/unit/data/simplifiedtriple.good rename : extensions/spellcheck/hunspell/tests/simplifiedtriple.test => extensions/spellcheck/hunspell/tests/unit/data/simplifiedtriple.test rename : extensions/spellcheck/hunspell/tests/simplifiedtriple.wrong => extensions/spellcheck/hunspell/tests/unit/data/simplifiedtriple.wrong rename : extensions/spellcheck/hunspell/tests/slash.aff => extensions/spellcheck/hunspell/tests/unit/data/slash.aff rename : extensions/spellcheck/hunspell/tests/slash.dic => extensions/spellcheck/hunspell/tests/unit/data/slash.dic rename : extensions/spellcheck/hunspell/tests/slash.good => extensions/spellcheck/hunspell/tests/unit/data/slash.good rename : extensions/spellcheck/hunspell/tests/slash.test => extensions/spellcheck/hunspell/tests/unit/data/slash.test rename : extensions/spellcheck/hunspell/tests/sug.aff => extensions/spellcheck/hunspell/tests/unit/data/sug.aff rename : extensions/spellcheck/hunspell/tests/sug.dic => extensions/spellcheck/hunspell/tests/unit/data/sug.dic rename : extensions/spellcheck/hunspell/tests/sug.sug => extensions/spellcheck/hunspell/tests/unit/data/sug.sug rename : extensions/spellcheck/hunspell/tests/sug.test => extensions/spellcheck/hunspell/tests/unit/data/sug.test rename : extensions/spellcheck/hunspell/tests/sug.wrong => extensions/spellcheck/hunspell/tests/unit/data/sug.wrong rename : extensions/spellcheck/hunspell/tests/suggestiontest/List_of_common_misspellings.txt => extensions/spellcheck/hunspell/tests/unit/data/suggestiontest/List_of_common_misspellings.txt rename : extensions/spellcheck/hunspell/tests/suggestiontest/Makefile.am => extensions/spellcheck/hunspell/tests/unit/data/suggestiontest/Makefile.am rename : extensions/spellcheck/hunspell/tests/suggestiontest/Makefile.in => extensions/spellcheck/hunspell/tests/unit/data/suggestiontest/Makefile.in rename : extensions/spellcheck/hunspell/tests/suggestiontest/README => extensions/spellcheck/hunspell/tests/unit/data/suggestiontest/README rename : extensions/spellcheck/hunspell/tests/suggestiontest/prepare => extensions/spellcheck/hunspell/tests/unit/data/suggestiontest/prepare rename : extensions/spellcheck/hunspell/tests/suggestiontest/test => extensions/spellcheck/hunspell/tests/unit/data/suggestiontest/test rename : extensions/spellcheck/hunspell/tests/sugutf.aff => extensions/spellcheck/hunspell/tests/unit/data/sugutf.aff rename : extensions/spellcheck/hunspell/tests/sugutf.dic => extensions/spellcheck/hunspell/tests/unit/data/sugutf.dic rename : extensions/spellcheck/hunspell/tests/sugutf.sug => extensions/spellcheck/hunspell/tests/unit/data/sugutf.sug rename : extensions/spellcheck/hunspell/tests/sugutf.test => extensions/spellcheck/hunspell/tests/unit/data/sugutf.test rename : extensions/spellcheck/hunspell/tests/sugutf.wrong => extensions/spellcheck/hunspell/tests/unit/data/sugutf.wrong rename : extensions/spellcheck/hunspell/tests/test.sh => extensions/spellcheck/hunspell/tests/unit/data/test.sh rename : extensions/spellcheck/hunspell/tests/utf8.aff => extensions/spellcheck/hunspell/tests/unit/data/utf8.aff rename : extensions/spellcheck/hunspell/tests/utf8.dic => extensions/spellcheck/hunspell/tests/unit/data/utf8.dic rename : extensions/spellcheck/hunspell/tests/utf8.good => extensions/spellcheck/hunspell/tests/unit/data/utf8.good rename : extensions/spellcheck/hunspell/tests/utf8.test => extensions/spellcheck/hunspell/tests/unit/data/utf8.test rename : extensions/spellcheck/hunspell/tests/utf8_bom.aff => extensions/spellcheck/hunspell/tests/unit/data/utf8_bom.aff rename : extensions/spellcheck/hunspell/tests/utf8_bom.dic => extensions/spellcheck/hunspell/tests/unit/data/utf8_bom.dic rename : extensions/spellcheck/hunspell/tests/utf8_bom.good => extensions/spellcheck/hunspell/tests/unit/data/utf8_bom.good rename : extensions/spellcheck/hunspell/tests/utf8_bom.test => extensions/spellcheck/hunspell/tests/unit/data/utf8_bom.test rename : extensions/spellcheck/hunspell/tests/utf8_bom2.aff => extensions/spellcheck/hunspell/tests/unit/data/utf8_bom2.aff rename : extensions/spellcheck/hunspell/tests/utf8_bom2.dic => extensions/spellcheck/hunspell/tests/unit/data/utf8_bom2.dic rename : extensions/spellcheck/hunspell/tests/utf8_bom2.good => extensions/spellcheck/hunspell/tests/unit/data/utf8_bom2.good rename : extensions/spellcheck/hunspell/tests/utf8_bom2.test => extensions/spellcheck/hunspell/tests/unit/data/utf8_bom2.test rename : extensions/spellcheck/hunspell/tests/utf8_nonbmp.aff => extensions/spellcheck/hunspell/tests/unit/data/utf8_nonbmp.aff rename : extensions/spellcheck/hunspell/tests/utf8_nonbmp.dic => extensions/spellcheck/hunspell/tests/unit/data/utf8_nonbmp.dic rename : extensions/spellcheck/hunspell/tests/utf8_nonbmp.good => extensions/spellcheck/hunspell/tests/unit/data/utf8_nonbmp.good rename : extensions/spellcheck/hunspell/tests/utf8_nonbmp.sug => extensions/spellcheck/hunspell/tests/unit/data/utf8_nonbmp.sug rename : extensions/spellcheck/hunspell/tests/utf8_nonbmp.test => extensions/spellcheck/hunspell/tests/unit/data/utf8_nonbmp.test rename : extensions/spellcheck/hunspell/tests/utf8_nonbmp.wrong => extensions/spellcheck/hunspell/tests/unit/data/utf8_nonbmp.wrong rename : extensions/spellcheck/hunspell/tests/utfcompound.aff => extensions/spellcheck/hunspell/tests/unit/data/utfcompound.aff rename : extensions/spellcheck/hunspell/tests/utfcompound.dic => extensions/spellcheck/hunspell/tests/unit/data/utfcompound.dic rename : extensions/spellcheck/hunspell/tests/utfcompound.good => extensions/spellcheck/hunspell/tests/unit/data/utfcompound.good rename : extensions/spellcheck/hunspell/tests/utfcompound.test => extensions/spellcheck/hunspell/tests/unit/data/utfcompound.test rename : extensions/spellcheck/hunspell/tests/utfcompound.wrong => extensions/spellcheck/hunspell/tests/unit/data/utfcompound.wrong rename : extensions/spellcheck/hunspell/tests/warn.aff => extensions/spellcheck/hunspell/tests/unit/data/warn.aff rename : extensions/spellcheck/hunspell/tests/warn.dic => extensions/spellcheck/hunspell/tests/unit/data/warn.dic rename : extensions/spellcheck/hunspell/tests/warn.good => extensions/spellcheck/hunspell/tests/unit/data/warn.good rename : extensions/spellcheck/hunspell/tests/warn.test => extensions/spellcheck/hunspell/tests/unit/data/warn.test rename : extensions/spellcheck/hunspell/tests/zeroaffix.aff => extensions/spellcheck/hunspell/tests/unit/data/zeroaffix.aff rename : extensions/spellcheck/hunspell/tests/zeroaffix.dic => extensions/spellcheck/hunspell/tests/unit/data/zeroaffix.dic rename : extensions/spellcheck/hunspell/tests/zeroaffix.good => extensions/spellcheck/hunspell/tests/unit/data/zeroaffix.good rename : extensions/spellcheck/hunspell/tests/zeroaffix.morph => extensions/spellcheck/hunspell/tests/unit/data/zeroaffix.morph rename : extensions/spellcheck/hunspell/tests/zeroaffix.test => extensions/spellcheck/hunspell/tests/unit/data/zeroaffix.test
This commit is contained in:
parent
809da8f2ae
commit
d5b849f4cf
@ -19,11 +19,8 @@ VISIBILITY_FLAGS =
|
||||
# libstdc++-compat is not built yet.
|
||||
STDCXX_COMPAT =
|
||||
|
||||
ifneq (WINNT,$(HOST_OS_ARCH))
|
||||
HOST_PROGRAM = nsinstall$(HOST_BIN_SUFFIX)
|
||||
|
||||
ifeq (WINNT,$(HOST_OS_ARCH))
|
||||
HOST_CSRCS = nsinstall_win.c
|
||||
else
|
||||
HOST_CSRCS = nsinstall.c pathsub.c
|
||||
endif
|
||||
|
||||
|
@ -633,19 +633,25 @@ endif
|
||||
PWD := $(CURDIR)
|
||||
endif
|
||||
|
||||
NSINSTALL_PY := $(PYTHON) $(call core_abspath,$(topsrcdir)/config/nsinstall.py)
|
||||
|
||||
ifdef NSINSTALL_BIN
|
||||
NSINSTALL = $(NSINSTALL_BIN)
|
||||
else
|
||||
ifeq (OS2,$(CROSS_COMPILE)$(OS_ARCH))
|
||||
NSINSTALL = $(MOZ_TOOLS_DIR)/nsinstall
|
||||
else
|
||||
ifeq ($(HOST_OS_ARCH),WINNT)
|
||||
NSINSTALL = $(NSINSTALL_PY)
|
||||
else
|
||||
NSINSTALL = $(CONFIG_TOOLS)/nsinstall$(HOST_BIN_SUFFIX)
|
||||
endif # WINNT
|
||||
endif # OS2
|
||||
endif # NSINSTALL_BIN
|
||||
|
||||
|
||||
ifeq (,$(CROSS_COMPILE)$(filter-out WINNT OS2, $(OS_ARCH)))
|
||||
INSTALL = $(NSINSTALL)
|
||||
INSTALL = $(NSINSTALL) -t
|
||||
else
|
||||
|
||||
# This isn't laid out as conditional directives so that NSDISTMODE can be
|
||||
@ -657,13 +663,8 @@ endif # WINNT/OS2
|
||||
# Use nsinstall in copy mode to install files on the system
|
||||
SYSINSTALL = $(NSINSTALL) -t
|
||||
|
||||
# Directory nsinstall. Windows and OS/2 nsinstall can't recursively copy
|
||||
# directories.
|
||||
ifneq (,$(filter WINNT os2-emx,$(HOST_OS_ARCH)))
|
||||
DIR_INSTALL = $(PYTHON) $(topsrcdir)/config/nsinstall.py
|
||||
else
|
||||
# Directory nsinstall.
|
||||
DIR_INSTALL = $(INSTALL)
|
||||
endif # WINNT/OS2
|
||||
|
||||
#
|
||||
# Localization build automation
|
||||
|
@ -15,6 +15,7 @@ import os
|
||||
import os.path
|
||||
import sys
|
||||
import shutil
|
||||
import stat
|
||||
|
||||
def nsinstall(argv):
|
||||
usage = "usage: %prog [options] arg1 [arg2 ...] target-directory"
|
||||
@ -51,6 +52,13 @@ def nsinstall(argv):
|
||||
help="Set group (NOT SUPPORTED)", metavar="group")
|
||||
|
||||
(options, args) = p.parse_args(argv)
|
||||
# Switching to Unicode strings makes python use the wide Windows APIs, which is
|
||||
# what we want here since the wide APIs normally do a better job at handling long
|
||||
# paths and such.
|
||||
if sys.stdin.encoding is None:
|
||||
args = [unicode(arg) for arg in args]
|
||||
else:
|
||||
args = [unicode(arg, sys.stdin.encoding) for arg in args]
|
||||
|
||||
if options.m:
|
||||
# mode is specified
|
||||
@ -61,36 +69,47 @@ def nsinstall(argv):
|
||||
return 1
|
||||
|
||||
# just create one directory?
|
||||
if options.D:
|
||||
if len(args) != 1:
|
||||
def maybe_create_dir(dir, mode, try_again):
|
||||
if os.path.exists(dir):
|
||||
if not os.path.isdir(dir):
|
||||
print >> sys.stderr, ('nsinstall: %s is not a directory' % dir)
|
||||
return 1
|
||||
if mode:
|
||||
os.chmod(dir, mode)
|
||||
return 0
|
||||
|
||||
try:
|
||||
if mode:
|
||||
os.makedirs(dir, mode)
|
||||
else:
|
||||
os.makedirs(dir)
|
||||
except Exception, e:
|
||||
# We might have hit EEXIST due to a race condition (see bug 463411) -- try again once
|
||||
if try_again:
|
||||
return maybe_create_dir(dir, mode, False)
|
||||
print >> sys.stderr, ("nsinstall: failed to create directory %s: %s" % (dir, e))
|
||||
return 1
|
||||
if os.path.exists(args[0]):
|
||||
if not os.path.isdir(args[0]):
|
||||
sys.stderr.write('nsinstall: ' + args[0] + ' is not a directory\n')
|
||||
sys.exit(1)
|
||||
if options.m:
|
||||
os.chmod(args[0], options.m)
|
||||
sys.exit()
|
||||
if options.m:
|
||||
os.makedirs(args[0], options.m)
|
||||
else:
|
||||
os.makedirs(args[0])
|
||||
return 0
|
||||
return 0
|
||||
|
||||
if options.X:
|
||||
options.X = [os.path.abspath(p) for p in options.X]
|
||||
|
||||
if options.D:
|
||||
return maybe_create_dir(args[0], options.m, True)
|
||||
|
||||
# nsinstall arg1 [...] directory
|
||||
if len(args) < 2:
|
||||
p.error('not enough arguments')
|
||||
|
||||
def copy_all_entries(entries, target):
|
||||
for e in entries:
|
||||
if options.X and os.path.abspath(e) in options.X:
|
||||
e = os.path.abspath(e)
|
||||
if options.X and e in options.X:
|
||||
continue
|
||||
|
||||
dest = os.path.join(target,
|
||||
os.path.basename(os.path.normpath(e)))
|
||||
dest = os.path.join(target, os.path.basename(e))
|
||||
dest = os.path.abspath(dest)
|
||||
handleTarget(e, dest)
|
||||
if options.m:
|
||||
os.chmod(dest, options.m)
|
||||
@ -112,19 +131,46 @@ def nsinstall(argv):
|
||||
# options.t is not relevant for directories
|
||||
if options.m:
|
||||
os.chmod(targetpath, options.m)
|
||||
elif options.t:
|
||||
shutil.copy2(srcpath, targetpath)
|
||||
else:
|
||||
shutil.copy(srcpath, targetpath)
|
||||
if os.path.exists(targetpath):
|
||||
# On Windows, read-only files can't be deleted
|
||||
os.chmod(targetpath, stat.S_IWUSR)
|
||||
os.remove(targetpath)
|
||||
if options.t:
|
||||
shutil.copy2(srcpath, targetpath)
|
||||
else:
|
||||
shutil.copy(srcpath, targetpath)
|
||||
|
||||
# the last argument is the target directory
|
||||
target = args.pop()
|
||||
# ensure target directory
|
||||
if not os.path.isdir(target):
|
||||
os.makedirs(target)
|
||||
# ensure target directory (importantly, we do not apply a mode to the directory
|
||||
# because we want to copy files into it and the mode might be read-only)
|
||||
rv = maybe_create_dir(target, None, True)
|
||||
if rv != 0:
|
||||
return rv
|
||||
|
||||
copy_all_entries(args, target)
|
||||
return 0
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(nsinstall(sys.argv[1:]))
|
||||
# sys.argv corrupts characters outside the system code page on Windows
|
||||
# <http://bugs.python.org/issue2128>. Use ctypes instead.
|
||||
if sys.platform == "win32":
|
||||
import ctypes
|
||||
from ctypes import wintypes
|
||||
GetCommandLine = ctypes.windll.kernel32.GetCommandLineW
|
||||
GetCommandLine.argtypes = []
|
||||
GetCommandLine.restype = wintypes.LPWSTR
|
||||
|
||||
CommandLineToArgv = ctypes.windll.shell32.CommandLineToArgvW
|
||||
CommandLineToArgv.argtypes = [wintypes.LPWSTR, ctypes.POINTER(ctypes.c_int)]
|
||||
CommandLineToArgv.restype = ctypes.POINTER(wintypes.LPWSTR)
|
||||
|
||||
argc = ctypes.c_int(0)
|
||||
argv_arr = CommandLineToArgv(GetCommandLine(), ctypes.byref(argc))
|
||||
# The first argument will be "python", the second will be the .py file
|
||||
argv = argv_arr[1:argc.value]
|
||||
else:
|
||||
argv = sys.argv
|
||||
|
||||
sys.exit(nsinstall(argv[1:]))
|
||||
|
@ -1,747 +0,0 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
/*
|
||||
* The nsinstall command for Win32
|
||||
*
|
||||
* Our gmake makefiles use the nsinstall command to create the
|
||||
* object directories or installing headers and libs. This code was originally
|
||||
* taken from shmsdos.c
|
||||
*/
|
||||
|
||||
#include <direct.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include <windows.h>
|
||||
#pragma hdrstop
|
||||
|
||||
/*
|
||||
* sh_FileFcn --
|
||||
*
|
||||
* A function that operates on a file. The pathname is either
|
||||
* absolute or relative to the current directory, and contains
|
||||
* no wildcard characters such as * and ?. Additional arguments
|
||||
* can be passed to the function via the arg pointer.
|
||||
*/
|
||||
|
||||
typedef BOOL (*sh_FileFcn)(
|
||||
wchar_t *pathName,
|
||||
WIN32_FIND_DATA *fileData,
|
||||
void *arg);
|
||||
|
||||
static int shellCp (wchar_t **pArgv);
|
||||
static int shellNsinstall (wchar_t **pArgv);
|
||||
static int shellMkdir (wchar_t **pArgv);
|
||||
static BOOL sh_EnumerateFiles(const wchar_t *pattern, const wchar_t *where,
|
||||
sh_FileFcn fileFcn, void *arg, int *nFiles);
|
||||
static const char *sh_GetLastErrorMessage(void);
|
||||
static BOOL sh_DoCopy(wchar_t *srcFileName, DWORD srcFileAttributes,
|
||||
wchar_t *dstFileName, DWORD dstFileAttributes,
|
||||
int force, int recursive);
|
||||
|
||||
#define LONGPATH_PREFIX L"\\\\?\\"
|
||||
#define ARRAY_LEN(a) (sizeof(a) / sizeof(a[0]))
|
||||
#define STR_LEN(a) (ARRAY_LEN(a) - 1)
|
||||
|
||||
#ifdef __MINGW32__
|
||||
|
||||
/* MingW currently does not implement a wide version of the
|
||||
startup routines. Workaround is to implement something like
|
||||
it ourselves. */
|
||||
|
||||
#include <shellapi.h>
|
||||
|
||||
int wmain(int argc, WCHAR **argv);
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int result;
|
||||
wchar_t *commandLine = GetCommandLineW();
|
||||
int argcw = 0;
|
||||
wchar_t **_argvw = CommandLineToArgvW( commandLine, &argcw );
|
||||
wchar_t *argvw[argcw + 1];
|
||||
int i;
|
||||
if (!_argvw)
|
||||
return 127;
|
||||
/* CommandLineToArgvW doesn't output the ending NULL so
|
||||
we have to manually add it on */
|
||||
for ( i = 0; i < argcw; i++ )
|
||||
argvw[i] = _argvw[i];
|
||||
argvw[argcw] = NULL;
|
||||
|
||||
result = wmain(argcw, argvw);
|
||||
LocalFree(_argvw);
|
||||
return result;
|
||||
}
|
||||
#endif /* __MINGW32__ */
|
||||
|
||||
/* changes all forward slashes in token to backslashes */
|
||||
void changeForwardSlashesToBackSlashes ( wchar_t *arg )
|
||||
{
|
||||
if ( arg == NULL )
|
||||
return;
|
||||
|
||||
while ( *arg ) {
|
||||
if ( *arg == '/' )
|
||||
*arg = '\\';
|
||||
arg++;
|
||||
}
|
||||
}
|
||||
|
||||
int wmain(int argc, wchar_t *argv[ ])
|
||||
{
|
||||
return shellNsinstall ( argv + 1 );
|
||||
}
|
||||
|
||||
static int
|
||||
shellNsinstall (wchar_t **pArgv)
|
||||
{
|
||||
int retVal = 0; /* exit status */
|
||||
int dirOnly = 0; /* 1 if and only if -D is specified */
|
||||
wchar_t **pSrc;
|
||||
wchar_t **pDst;
|
||||
|
||||
/*
|
||||
* Process the command-line options. We ignore the
|
||||
* options except for -D. Some options, such as -m,
|
||||
* are followed by an argument. We need to skip the
|
||||
* argument too.
|
||||
*/
|
||||
while ( *pArgv && **pArgv == '-' ) {
|
||||
wchar_t c = (*pArgv)[1]; /* The char after '-' */
|
||||
|
||||
if ( c == 'D' ) {
|
||||
dirOnly = 1;
|
||||
} else if ( c == 'm' ) {
|
||||
pArgv++; /* skip the next argument */
|
||||
}
|
||||
pArgv++;
|
||||
}
|
||||
|
||||
if ( !dirOnly ) {
|
||||
/* There are files to install. Get source files */
|
||||
if ( *pArgv ) {
|
||||
pSrc = pArgv++;
|
||||
} else {
|
||||
fprintf( stderr, "nsinstall: not enough arguments\n");
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
/* Get to last token to find destination directory */
|
||||
if ( *pArgv ) {
|
||||
pDst = pArgv++;
|
||||
if ( dirOnly && *pArgv ) {
|
||||
fprintf( stderr, "nsinstall: too many arguments with -D\n");
|
||||
return 3;
|
||||
}
|
||||
} else {
|
||||
fprintf( stderr, "nsinstall: not enough arguments\n");
|
||||
return 3;
|
||||
}
|
||||
while ( *pArgv )
|
||||
pDst = pArgv++;
|
||||
|
||||
retVal = shellMkdir ( pDst );
|
||||
if ( retVal )
|
||||
return retVal;
|
||||
if ( !dirOnly )
|
||||
retVal = shellCp ( pSrc );
|
||||
return retVal;
|
||||
}
|
||||
|
||||
static int
|
||||
shellMkdir (wchar_t **pArgv)
|
||||
{
|
||||
int retVal = 0; /* assume valid return */
|
||||
wchar_t *arg;
|
||||
wchar_t *pArg;
|
||||
wchar_t path[_MAX_PATH];
|
||||
wchar_t tmpPath[_MAX_PATH];
|
||||
wchar_t *pTmpPath = tmpPath;
|
||||
|
||||
/* All the options are simply ignored in this implementation */
|
||||
while ( *pArgv && **pArgv == '-' ) {
|
||||
if ( (*pArgv)[1] == 'm' ) {
|
||||
pArgv++; /* skip the next argument (mode) */
|
||||
}
|
||||
pArgv++;
|
||||
}
|
||||
|
||||
while ( *pArgv ) {
|
||||
arg = *pArgv;
|
||||
changeForwardSlashesToBackSlashes ( arg );
|
||||
pArg = arg;
|
||||
pTmpPath = tmpPath;
|
||||
while ( 1 ) {
|
||||
/* create part of path */
|
||||
while ( *pArg ) {
|
||||
*pTmpPath++ = *pArg++;
|
||||
if ( *pArg == '\\' )
|
||||
break;
|
||||
}
|
||||
*pTmpPath = '\0';
|
||||
|
||||
/* check if directory already exists */
|
||||
_wgetcwd ( path, _MAX_PATH );
|
||||
if ( _wchdir ( tmpPath ) == -1 &&
|
||||
_wmkdir ( tmpPath ) == -1 && // might have hit EEXIST
|
||||
_wchdir ( tmpPath ) == -1) { // so try again
|
||||
char buf[2048];
|
||||
_snprintf(buf, 2048, "Could not create the directory: %S",
|
||||
tmpPath);
|
||||
perror ( buf );
|
||||
retVal = 3;
|
||||
break;
|
||||
} else {
|
||||
// get back to the cwd
|
||||
_wchdir ( path );
|
||||
}
|
||||
if ( *pArg == '\0' ) /* complete path? */
|
||||
break;
|
||||
/* loop for next directory */
|
||||
}
|
||||
|
||||
pArgv++;
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
static const char *
|
||||
sh_GetLastErrorMessage()
|
||||
{
|
||||
static char buf[128];
|
||||
|
||||
FormatMessageA(
|
||||
FORMAT_MESSAGE_FROM_SYSTEM,
|
||||
NULL,
|
||||
GetLastError(),
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* default language */
|
||||
buf,
|
||||
sizeof(buf),
|
||||
NULL
|
||||
);
|
||||
return buf;
|
||||
}
|
||||
|
||||
/*
|
||||
* struct sh_FileData --
|
||||
*
|
||||
* A pointer to the sh_FileData structure is passed into sh_RecordFileData,
|
||||
* which will fill in the fields.
|
||||
*/
|
||||
|
||||
struct sh_FileData {
|
||||
wchar_t pathName[_MAX_PATH];
|
||||
DWORD dwFileAttributes;
|
||||
};
|
||||
|
||||
/*
|
||||
* sh_RecordFileData --
|
||||
*
|
||||
* Record the pathname and attributes of the file in
|
||||
* the sh_FileData structure pointed to by arg.
|
||||
*
|
||||
* Always return TRUE (successful completion).
|
||||
*
|
||||
* This function is intended to be passed into sh_EnumerateFiles
|
||||
* to see if a certain pattern expands to exactly one file/directory,
|
||||
* and if so, record its pathname and attributes.
|
||||
*/
|
||||
|
||||
static BOOL
|
||||
sh_RecordFileData(wchar_t *pathName, WIN32_FIND_DATA *findData, void *arg)
|
||||
{
|
||||
struct sh_FileData *fData = (struct sh_FileData *) arg;
|
||||
|
||||
wcscpy(fData->pathName, pathName);
|
||||
fData->dwFileAttributes = findData->dwFileAttributes;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL
|
||||
sh_DoCopy(wchar_t *srcFileName,
|
||||
DWORD srcFileAttributes,
|
||||
wchar_t *dstFileName,
|
||||
DWORD dstFileAttributes,
|
||||
int force,
|
||||
int recursive
|
||||
)
|
||||
{
|
||||
if (dstFileAttributes != 0xFFFFFFFF) {
|
||||
if ((dstFileAttributes & FILE_ATTRIBUTE_READONLY) && force) {
|
||||
dstFileAttributes &= ~FILE_ATTRIBUTE_READONLY;
|
||||
SetFileAttributes(dstFileName, dstFileAttributes);
|
||||
}
|
||||
}
|
||||
|
||||
if (srcFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
|
||||
fprintf(stderr, "nsinstall: %ls is a directory\n",
|
||||
srcFileName);
|
||||
return FALSE;
|
||||
} else {
|
||||
DWORD r;
|
||||
wchar_t longSrc[1004] = LONGPATH_PREFIX;
|
||||
wchar_t longDst[1004] = LONGPATH_PREFIX;
|
||||
r = GetFullPathName(srcFileName, 1000, longSrc + STR_LEN(LONGPATH_PREFIX), NULL);
|
||||
if (!r) {
|
||||
fprintf(stderr, "nsinstall: couldn't get full path of %ls: %s\n",
|
||||
srcFileName, sh_GetLastErrorMessage());
|
||||
return FALSE;
|
||||
}
|
||||
r = GetFullPathName(dstFileName, 1000, longDst + ARRAY_LEN(LONGPATH_PREFIX) - 1, NULL);
|
||||
if (!r) {
|
||||
fprintf(stderr, "nsinstall: couldn't get full path of %ls: %s\n",
|
||||
dstFileName, sh_GetLastErrorMessage());
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!CopyFile(longSrc, longDst, FALSE)) {
|
||||
fprintf(stderr, "nsinstall: cannot copy %ls to %ls: %s\n",
|
||||
srcFileName, dstFileName, sh_GetLastErrorMessage());
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* struct sh_CpCmdArg --
|
||||
*
|
||||
* A pointer to the sh_CpCmdArg structure is passed into sh_CpFileCmd.
|
||||
* The sh_CpCmdArg contains information about the cp command, and
|
||||
* provide a buffer for constructing the destination file name.
|
||||
*/
|
||||
|
||||
struct sh_CpCmdArg {
|
||||
int force; /* -f option, ok to overwrite an existing
|
||||
* read-only destination file */
|
||||
int recursive; /* -r or -R option, recursively copy
|
||||
* directories. Note: this field is not used
|
||||
* by nsinstall and should always be 0. */
|
||||
wchar_t *dstFileName; /* a buffer for constructing the destination
|
||||
* file name */
|
||||
wchar_t *dstFileNameMarker; /* points to where in the dstFileName buffer
|
||||
* we should write the file component of the
|
||||
* destination file */
|
||||
};
|
||||
|
||||
/*
|
||||
* sh_CpFileCmd --
|
||||
*
|
||||
* Copy a file to the destination directory
|
||||
*
|
||||
* This function is intended to be passed into sh_EnumerateFiles to
|
||||
* copy all the files specified by the pattern to the destination
|
||||
* directory.
|
||||
*
|
||||
* Return TRUE if the file is successfully copied, and FALSE otherwise.
|
||||
*/
|
||||
|
||||
static BOOL
|
||||
sh_CpFileCmd(wchar_t *pathName, WIN32_FIND_DATA *findData, void *cpArg)
|
||||
{
|
||||
BOOL retVal = TRUE;
|
||||
struct sh_CpCmdArg *arg = (struct sh_CpCmdArg *) cpArg;
|
||||
|
||||
wcscpy(arg->dstFileNameMarker, findData->cFileName);
|
||||
return sh_DoCopy(pathName, findData->dwFileAttributes,
|
||||
arg->dstFileName, GetFileAttributes(arg->dstFileName),
|
||||
arg->force, arg->recursive);
|
||||
}
|
||||
|
||||
static int
|
||||
shellCp (wchar_t **pArgv)
|
||||
{
|
||||
int retVal = 0;
|
||||
wchar_t **pSrc;
|
||||
wchar_t **pDst;
|
||||
struct sh_CpCmdArg arg;
|
||||
struct sh_FileData dstData;
|
||||
int dstIsDir = 0;
|
||||
int n;
|
||||
|
||||
arg.force = 0;
|
||||
arg.recursive = 0;
|
||||
arg.dstFileName = dstData.pathName;
|
||||
arg.dstFileNameMarker = 0;
|
||||
|
||||
while (*pArgv && **pArgv == '-') {
|
||||
wchar_t *p = *pArgv;
|
||||
|
||||
while (*(++p)) {
|
||||
if (*p == 'f') {
|
||||
arg.force = 1;
|
||||
}
|
||||
}
|
||||
pArgv++;
|
||||
}
|
||||
|
||||
/* the first source file */
|
||||
if (*pArgv) {
|
||||
pSrc = pArgv++;
|
||||
} else {
|
||||
fprintf(stderr, "nsinstall: not enough arguments\n");
|
||||
return 3;
|
||||
}
|
||||
|
||||
/* get to the last token to find destination */
|
||||
if (*pArgv) {
|
||||
pDst = pArgv++;
|
||||
} else {
|
||||
fprintf(stderr, "nsinstall: not enough arguments\n");
|
||||
return 3;
|
||||
}
|
||||
while (*pArgv) {
|
||||
pDst = pArgv++;
|
||||
}
|
||||
|
||||
/*
|
||||
* The destination pattern must unambiguously expand to exactly
|
||||
* one file or directory.
|
||||
*/
|
||||
|
||||
changeForwardSlashesToBackSlashes(*pDst);
|
||||
sh_EnumerateFiles(*pDst, *pDst, sh_RecordFileData, &dstData, &n);
|
||||
assert(n >= 0);
|
||||
if (n == 1) {
|
||||
/*
|
||||
* Is the destination a file or directory?
|
||||
*/
|
||||
|
||||
if (dstData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
|
||||
dstIsDir = 1;
|
||||
}
|
||||
} else if (n > 1) {
|
||||
fprintf(stderr, "nsinstall: %ls: ambiguous destination file "
|
||||
"or directory\n", *pDst);
|
||||
return 3;
|
||||
} else {
|
||||
/*
|
||||
* n == 0, meaning that destination file or directory does
|
||||
* not exist. In this case the destination file directory
|
||||
* name must be fully specified.
|
||||
*/
|
||||
|
||||
wchar_t *p;
|
||||
|
||||
for (p = *pDst; *p; p++) {
|
||||
if (*p == '*' || *p == '?') {
|
||||
fprintf(stderr, "nsinstall: %ls: No such file or directory\n",
|
||||
*pDst);
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Do not include the trailing \, if any, unless it is a root
|
||||
* directory (\ or X:\).
|
||||
*/
|
||||
|
||||
if (p > *pDst && p[-1] == '\\' && p != *pDst + 1 && p[-2] != ':') {
|
||||
p[-1] = '\0';
|
||||
}
|
||||
wcscpy(dstData.pathName, *pDst);
|
||||
dstData.dwFileAttributes = 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
/*
|
||||
* If there are two or more source files, the destination has
|
||||
* to be a directory.
|
||||
*/
|
||||
|
||||
if (pDst - pSrc > 1 && !dstIsDir) {
|
||||
fprintf(stderr, "nsinstall: cannot copy more than"
|
||||
" one file to the same destination file\n");
|
||||
return 3;
|
||||
}
|
||||
|
||||
if (dstIsDir) {
|
||||
arg.dstFileNameMarker = arg.dstFileName + wcslen(arg.dstFileName);
|
||||
|
||||
/*
|
||||
* Now arg.dstFileNameMarker is pointing to the null byte at the
|
||||
* end of string. We want to make sure that there is a \ at the
|
||||
* end of string, and arg.dstFileNameMarker should point right
|
||||
* after that \.
|
||||
*/
|
||||
|
||||
if (arg.dstFileNameMarker[-1] != '\\') {
|
||||
*(arg.dstFileNameMarker++) = '\\';
|
||||
}
|
||||
}
|
||||
|
||||
if (!dstIsDir) {
|
||||
struct sh_FileData srcData;
|
||||
|
||||
assert(pDst - pSrc == 1);
|
||||
changeForwardSlashesToBackSlashes(*pSrc);
|
||||
sh_EnumerateFiles(*pSrc, *pSrc, sh_RecordFileData, &srcData, &n);
|
||||
if (n == 0) {
|
||||
fprintf(stderr, "nsinstall: %ls: No such file or directory\n",
|
||||
*pSrc);
|
||||
retVal = 3;
|
||||
} else if (n > 1) {
|
||||
fprintf(stderr, "nsinstall: cannot copy more than one file or "
|
||||
"directory to the same destination\n");
|
||||
retVal = 3;
|
||||
} else {
|
||||
assert(n == 1);
|
||||
if (sh_DoCopy(srcData.pathName, srcData.dwFileAttributes,
|
||||
dstData.pathName, dstData.dwFileAttributes,
|
||||
arg.force, arg.recursive) == FALSE) {
|
||||
retVal = 3;
|
||||
}
|
||||
}
|
||||
return retVal;
|
||||
}
|
||||
|
||||
for ( ; *pSrc != *pDst; pSrc++) {
|
||||
BOOL rv;
|
||||
|
||||
changeForwardSlashesToBackSlashes(*pSrc);
|
||||
rv = sh_EnumerateFiles(*pSrc, *pSrc, sh_CpFileCmd, &arg, &n);
|
||||
if (rv == FALSE) {
|
||||
retVal = 3;
|
||||
} else {
|
||||
if (n == 0) {
|
||||
fprintf(stderr, "nsinstall: %ls: No such file or directory\n",
|
||||
*pSrc);
|
||||
retVal = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
/*
|
||||
* sh_EnumerateFiles --
|
||||
*
|
||||
* Enumerate all the files in the specified pattern, which is a pathname
|
||||
* containing possibly wildcard characters such as * and ?. fileFcn
|
||||
* is called on each file, passing the expanded file name, a pointer
|
||||
* to the file's WIN32_FILE_DATA, and the arg pointer.
|
||||
*
|
||||
* It is assumed that there are no wildcard characters before the
|
||||
* character pointed to by 'where'.
|
||||
*
|
||||
* On return, *nFiles stores the number of files enumerated. *nFiles is
|
||||
* set to this number whether sh_EnumerateFiles or 'fileFcn' succeeds
|
||||
* or not.
|
||||
*
|
||||
* Return TRUE if the files are successfully enumerated and all
|
||||
* 'fileFcn' invocations succeeded. Return FALSE if something went
|
||||
* wrong.
|
||||
*/
|
||||
|
||||
static BOOL sh_EnumerateFiles(
|
||||
const wchar_t *pattern,
|
||||
const wchar_t *where,
|
||||
sh_FileFcn fileFcn,
|
||||
void *arg,
|
||||
int *nFiles
|
||||
)
|
||||
{
|
||||
WIN32_FIND_DATA fileData;
|
||||
HANDLE hSearch;
|
||||
const wchar_t *src;
|
||||
wchar_t *dst;
|
||||
wchar_t fileName[_MAX_PATH];
|
||||
wchar_t *fileNameMarker = fileName;
|
||||
wchar_t *oldFileNameMarker;
|
||||
BOOL hasWildcard = FALSE;
|
||||
BOOL retVal = TRUE;
|
||||
BOOL patternEndsInDotStar = FALSE;
|
||||
BOOL patternEndsInDot = FALSE; /* a special case of
|
||||
* patternEndsInDotStar */
|
||||
int numDotsInPattern;
|
||||
int len;
|
||||
|
||||
/*
|
||||
* Windows expands patterns ending in ".", ".*", ".**", etc.
|
||||
* differently from the glob expansion on Unix. For example,
|
||||
* both "foo." and "foo.*" match "foo", and "*.*" matches
|
||||
* everything, including filenames with no dots. So we need
|
||||
* to throw away extra files returned by the FindNextFile()
|
||||
* function. We require that a matched filename have at least
|
||||
* the number of dots in the pattern.
|
||||
*/
|
||||
len = wcslen(pattern);
|
||||
if (len >= 2) {
|
||||
/* Start from the end of pattern and go backward */
|
||||
const wchar_t *p = &pattern[len - 1];
|
||||
|
||||
/* We can have zero or more *'s */
|
||||
while (p >= pattern && *p == '*') {
|
||||
p--;
|
||||
}
|
||||
if (p >= pattern && *p == '.') {
|
||||
patternEndsInDotStar = TRUE;
|
||||
if (p == &pattern[len - 1]) {
|
||||
patternEndsInDot = TRUE;
|
||||
}
|
||||
p--;
|
||||
numDotsInPattern = 1;
|
||||
while (p >= pattern && *p != '\\') {
|
||||
if (*p == '.') {
|
||||
numDotsInPattern++;
|
||||
}
|
||||
p--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*nFiles = 0;
|
||||
|
||||
/*
|
||||
* Copy pattern to fileName, but only up to and not including
|
||||
* the first \ after the first wildcard letter.
|
||||
*
|
||||
* Make fileNameMarker point to one of the following:
|
||||
* - the start of fileName, if fileName does not contain any \.
|
||||
* - right after the \ before the first wildcard letter, if there is
|
||||
* a wildcard character.
|
||||
* - right after the last \, if there is no wildcard character.
|
||||
*/
|
||||
|
||||
dst = fileName;
|
||||
src = pattern;
|
||||
while (src < where) {
|
||||
if (*src == '\\') {
|
||||
oldFileNameMarker = fileNameMarker;
|
||||
fileNameMarker = dst + 1;
|
||||
}
|
||||
*(dst++) = *(src++);
|
||||
}
|
||||
|
||||
while (*src && *src != '*' && *src != '?') {
|
||||
if (*src == '\\') {
|
||||
oldFileNameMarker = fileNameMarker;
|
||||
fileNameMarker = dst + 1;
|
||||
}
|
||||
*(dst++) = *(src++);
|
||||
}
|
||||
|
||||
if (*src) {
|
||||
/*
|
||||
* Must have seen the first wildcard letter
|
||||
*/
|
||||
|
||||
hasWildcard = TRUE;
|
||||
while (*src && *src != '\\') {
|
||||
*(dst++) = *(src++);
|
||||
}
|
||||
}
|
||||
|
||||
/* Now src points to either null or \ */
|
||||
|
||||
assert(*src == '\0' || *src == '\\');
|
||||
assert(hasWildcard || *src == '\0');
|
||||
*dst = '\0';
|
||||
|
||||
/*
|
||||
* If the pattern does not contain any wildcard characters, then
|
||||
* we don't need to go the FindFirstFile route.
|
||||
*/
|
||||
|
||||
if (!hasWildcard) {
|
||||
/*
|
||||
* See if it is the root directory, \, or X:\.
|
||||
*/
|
||||
|
||||
assert(!wcscmp(fileName, pattern));
|
||||
assert(wcslen(fileName) >= 1);
|
||||
if (dst[-1] == '\\' && (dst == fileName + 1 || dst[-2] == ':')) {
|
||||
fileData.cFileName[0] = '\0';
|
||||
} else {
|
||||
/*
|
||||
* Do not include the trailing \, if any
|
||||
*/
|
||||
|
||||
if (dst[-1] == '\\') {
|
||||
assert(*fileNameMarker == '\0');
|
||||
dst[-1] = '\0';
|
||||
fileNameMarker = oldFileNameMarker;
|
||||
}
|
||||
wcscpy(fileData.cFileName, fileNameMarker);
|
||||
}
|
||||
fileData.dwFileAttributes = GetFileAttributes(fileName);
|
||||
if (fileData.dwFileAttributes == 0xFFFFFFFF) {
|
||||
return TRUE;
|
||||
}
|
||||
*nFiles = 1;
|
||||
return (*fileFcn)(fileName, &fileData, arg);
|
||||
}
|
||||
|
||||
hSearch = FindFirstFile(fileName, &fileData);
|
||||
if (hSearch == INVALID_HANDLE_VALUE) {
|
||||
return retVal;
|
||||
}
|
||||
|
||||
do {
|
||||
if (!wcscmp(fileData.cFileName, L".")
|
||||
|| !wcscmp(fileData.cFileName, L"..")) {
|
||||
/*
|
||||
* Skip over . and ..
|
||||
*/
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (patternEndsInDotStar) {
|
||||
int nDots = 0;
|
||||
wchar_t *p = fileData.cFileName;
|
||||
while (*p) {
|
||||
if (*p == '.') {
|
||||
nDots++;
|
||||
}
|
||||
p++;
|
||||
}
|
||||
/* Now p points to the null byte at the end of file name */
|
||||
if (patternEndsInDot && (p == fileData.cFileName
|
||||
|| p[-1] != '.')) {
|
||||
/*
|
||||
* File name does not end in dot. Skip this file.
|
||||
* Note: windows file name probably cannot end in dot,
|
||||
* but we do this check anyway.
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
if (nDots < numDotsInPattern) {
|
||||
/*
|
||||
* Not enough dots in file name. Must be an extra
|
||||
* file in matching .* pattern. Skip this file.
|
||||
*/
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
wcscpy(fileNameMarker, fileData.cFileName);
|
||||
if (*src && *(src + 1)) {
|
||||
/*
|
||||
* More to go. Recurse.
|
||||
*/
|
||||
|
||||
int n;
|
||||
|
||||
assert(*src == '\\');
|
||||
where = fileName + wcslen(fileName);
|
||||
wcscat(fileName, src);
|
||||
sh_EnumerateFiles(fileName, where, fileFcn, arg, &n);
|
||||
*nFiles += n;
|
||||
} else {
|
||||
assert(wcschr(fileName, '*') == NULL);
|
||||
assert(wcschr(fileName, '?') == NULL);
|
||||
(*nFiles)++;
|
||||
if ((*fileFcn)(fileName, &fileData, arg) == FALSE) {
|
||||
retVal = FALSE;
|
||||
}
|
||||
}
|
||||
} while (FindNextFile(hSearch, &fileData));
|
||||
|
||||
FindClose(hSearch);
|
||||
return retVal;
|
||||
}
|
@ -4,8 +4,18 @@ import os, sys, os.path, time
|
||||
from tempfile import mkdtemp
|
||||
from shutil import rmtree
|
||||
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
|
||||
from mozprocess import processhandler
|
||||
|
||||
from nsinstall import nsinstall
|
||||
import nsinstall as nsinstall_module
|
||||
NSINSTALL_PATH = nsinstall_module.__file__
|
||||
|
||||
# Run the non-ASCII tests on (a) Windows, or (b) any platform with
|
||||
# sys.stdin.encoding set to UTF-8
|
||||
import codecs
|
||||
RUN_NON_ASCII_TESTS = (sys.platform == "win32" or
|
||||
(sys.stdin.encoding is not None and
|
||||
codecs.lookup(sys.stdin.encoding) == codecs.lookup("utf-8")))
|
||||
|
||||
class TestNsinstall(unittest.TestCase):
|
||||
"""
|
||||
@ -15,7 +25,13 @@ class TestNsinstall(unittest.TestCase):
|
||||
self.tmpdir = mkdtemp()
|
||||
|
||||
def tearDown(self):
|
||||
rmtree(self.tmpdir)
|
||||
# Unicode strings means non-ASCII children can be deleted properly on
|
||||
# Windows
|
||||
if sys.stdin.encoding is None:
|
||||
tmpdir = unicode(self.tmpdir)
|
||||
else:
|
||||
tmpdir = unicode(self.tmpdir, sys.stdin.encoding)
|
||||
rmtree(tmpdir)
|
||||
|
||||
# utility methods for tests
|
||||
def touch(self, file, dir=None):
|
||||
@ -121,6 +137,38 @@ class TestNsinstall(unittest.TestCase):
|
||||
self.assertEqual(nsinstall(["-d", testfile, destdir]), 0)
|
||||
self.assert_(os.path.isdir(os.path.join(destdir, "testfile")))
|
||||
|
||||
# Disable this temporarily on Windows (will be re-enabled by bug 680636)
|
||||
if RUN_NON_ASCII_TESTS and sys.platform != "win32":
|
||||
def test_nsinstall_non_ascii(self):
|
||||
"Test that nsinstall handles non-ASCII files"
|
||||
filename = u"\u2325\u3452\u2415\u5081"
|
||||
testfile = self.touch(filename)
|
||||
testdir = self.mkdirs(u"\u4241\u1D04\u1414")
|
||||
self.assertEqual(nsinstall([testfile.encode("utf-8"),
|
||||
testdir.encode("utf-8")]), 0)
|
||||
|
||||
destfile = os.path.join(testdir, filename)
|
||||
self.assert_(os.path.isfile(destfile))
|
||||
|
||||
if RUN_NON_ASCII_TESTS:
|
||||
def test_nsinstall_non_ascii_subprocess(self):
|
||||
"Test that nsinstall as a subprocess handles non-ASCII files"
|
||||
filename = u"\u2325\u3452\u2415\u5081"
|
||||
testfile = self.touch(filename)
|
||||
testdir = self.mkdirs(u"\u4241\u1D04\u1414")
|
||||
# We don't use subprocess because it can't handle Unicode on
|
||||
# Windows <http://bugs.python.org/issue1759845>. mozprocess calls
|
||||
# CreateProcessW directly so it's perfect.
|
||||
p = processhandler.ProcessHandlerMixin([sys.executable,
|
||||
NSINSTALL_PATH,
|
||||
testfile, testdir])
|
||||
p.run()
|
||||
rv = p.waitForFinish()
|
||||
|
||||
self.assertEqual(rv, 0)
|
||||
destfile = os.path.join(testdir, filename)
|
||||
self.assert_(os.path.isfile(destfile))
|
||||
|
||||
#TODO: implement -R, -l, -L and test them!
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
@ -15,12 +15,6 @@ DIRS = src
|
||||
|
||||
ifdef ENABLE_TESTS
|
||||
XPCSHELL_TESTS = tests/unit
|
||||
ABS_topsrcdir = $(call core_abspath,$(topsrcdir))
|
||||
libs::
|
||||
$(NSINSTALL) -D $(DEPTH)/_tests/xpcshell/$(relativesrcdir)/tests/unit/data
|
||||
cd $(srcdir)/tests; $(PYTHON) $(ABS_topsrcdir)/config/nsinstall.py \
|
||||
./ \
|
||||
$(call core_abspath,$(DEPTH)/_tests/xpcshell/$(relativesrcdir)/tests/unit/data/)
|
||||
endif
|
||||
|
||||
include $(topsrcdir)/config/rules.mk
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user