]> git.lyx.org Git - lyx.git/blob - lib/doc/Development.lyx
3cb4d8b350d0f78e678bb27e105482a21608f12a
[lyx.git] / lib / doc / Development.lyx
1 #LyX 2.2 created this file. For more info see http://www.lyx.org/
2 \lyxformat 503
3 \begin_document
4 \begin_header
5 \origin /systemlyxdir/doc/
6 \textclass scrartcl
7 \options BCOR8mm,captions=tableheading
8 \use_default_options false
9 \begin_modules
10 logicalmkup
11 \end_modules
12 \maintain_unincluded_children false
13 \begin_local_layout
14 Format 7
15 InsetLayout CharStyle:MenuItem
16 LyxType               charstyle
17 LabelString           menu
18 LatexType             command
19 LatexName             menuitem
20 Font
21 Family              Sans
22 EndFont
23 Preamble
24 \newcommand*{\menuitem}[1]{{\sffamily #1}}
25 EndPreamble
26 End
27 \end_local_layout
28 \language english
29 \language_package default
30 \inputencoding auto
31 \fontencoding global
32 \font_roman "lmodern" "default"
33 \font_sans "lmss" "default"
34 \font_typewriter "lmtt" "default"
35 \font_math "auto" "auto"
36 \font_default_family default
37 \use_non_tex_fonts false
38 \font_sc false
39 \font_osf false
40 \font_sf_scale 100 100
41 \font_tt_scale 100 100
42 \graphics default
43 \default_output_format default
44 \output_sync 0
45 \bibtex_command default
46 \index_command default
47 \paperfontsize 12
48 \spacing single
49 \use_hyperref true
50 \pdf_title "LyX's Development manual"
51 \pdf_author "LyX Team"
52 \pdf_subject "LyX's development documentation"
53 \pdf_keywords "LyX, Documentation, Development"
54 \pdf_bookmarks true
55 \pdf_bookmarksnumbered true
56 \pdf_bookmarksopen true
57 \pdf_bookmarksopenlevel 1
58 \pdf_breaklinks false
59 \pdf_pdfborder false
60 \pdf_colorlinks true
61 \pdf_backref false
62 \pdf_pdfusetitle false
63 \pdf_quoted_options "linkcolor=black, citecolor=black, urlcolor=blue, filecolor=blue, pdfpagelayout=OneColumn, pdfnewwindow=true, pdfstartview=XYZ, plainpages=false"
64 \papersize a4paper
65 \use_geometry false
66 \use_package amsmath 1
67 \use_package amssymb 1
68 \use_package cancel 0
69 \use_package esint 0
70 \use_package mathdots 1
71 \use_package mathtools 0
72 \use_package mhchem 1
73 \use_package stackrel 0
74 \use_package stmaryrd 0
75 \use_package undertilde 0
76 \cite_engine basic
77 \cite_engine_type default
78 \biblio_style plain
79 \use_bibtopic false
80 \use_indices false
81 \paperorientation portrait
82 \suppress_date false
83 \justification true
84 \use_refstyle 0
85 \notefontcolor #0000ff
86 \index Index
87 \shortcut idx
88 \color #008000
89 \end_index
90 \secnumdepth 4
91 \tocdepth 4
92 \paragraph_separation indent
93 \paragraph_indentation default
94 \quotes_language english
95 \papercolumns 1
96 \papersides 2
97 \paperpagestyle headings
98 \tracking_changes false
99 \output_changes false
100 \html_math_output 0
101 \html_css_as_file 0
102 \html_be_strict true
103 \end_header
104
105 \begin_body
106
107 \begin_layout Title
108 Developing \SpecialChar LyX
109
110 \end_layout
111
112 \begin_layout Subtitle
113 Version 2.2.x
114 \end_layout
115
116 \begin_layout Author
117 by the \SpecialChar LyX
118  Team
119 \begin_inset Foot
120 status collapsed
121
122 \begin_layout Plain Layout
123 \noindent
124 If you have comments or error corrections, please send them to the \SpecialChar LyX
125  Documentatio
126 n mailing list, 
127 \begin_inset Flex Code
128 status collapsed
129
130 \begin_layout Plain Layout
131 \noindent
132 <lyx-docs@lists.lyx.org>
133 \end_layout
134
135 \end_inset
136
137 .
138 \end_layout
139
140 \end_inset
141
142
143 \end_layout
144
145 \begin_layout Standard
146 \begin_inset CommandInset toc
147 LatexCommand tableofcontents
148
149 \end_inset
150
151
152 \end_layout
153
154 \begin_layout Section
155 Introduction
156 \end_layout
157
158 \begin_layout Standard
159 This manual documents some aspects of \SpecialChar LyX
160  development.
161  It is currently rather incomplete, but will hopefully be extended in the
162  future.
163  Meanwhile, additional information can be found in the 
164 \begin_inset Flex Code
165 status collapsed
166
167 \begin_layout Plain Layout
168 development
169 \end_layout
170
171 \end_inset
172
173  subfolder of the \SpecialChar LyX
174  source code distribution.
175  This document is not translated, since the development language of \SpecialChar LyX
176  is
177  english.
178  If you want to use \SpecialChar LyX
179  you don't need to read this manual.
180  However, if you want to learn more about how \SpecialChar LyX
181  is developed, or even want
182  to participate in \SpecialChar LyX
183  development, you may find some interesting information.
184 \end_layout
185
186 \begin_layout Section
187 File formats
188 \end_layout
189
190 \begin_layout Standard
191 \SpecialChar LyX
192  uses several custom file formats for configuration files and documents.
193  This chapter contains some background concerning these file formats.
194  Several file formats are also described in detail in the regular user documenta
195 tion.
196 \end_layout
197
198 \begin_layout Subsection
199 File Format Numbers
200 \end_layout
201
202 \begin_layout Subsection
203 When is an update of the .lyx file format number needed?
204 \begin_inset CommandInset label
205 LatexCommand label
206 name "sec:When-is-an"
207
208 \end_inset
209
210
211 \end_layout
212
213 \begin_layout Standard
214 When you are working on a new feature you may ask yourself whether it needs
215  an update of the .lyx file format number.
216  Whether an update is needed or not is not always obvious.
217  Below you can find a list of reasons for file format updates with explanations:
218 \end_layout
219
220 \begin_layout Description
221 New
222 \begin_inset space ~
223 \end_inset
224
225 document
226 \begin_inset space ~
227 \end_inset
228
229 setting Whenever you introduce a new setting that is stored in the document
230  header, a file format update is needed.
231  This is also true if you add a new valid value to an existing setting,
232  e.
233 \begin_inset space \thinspace{}
234 \end_inset
235
236 g.
237 \begin_inset space \space{}
238 \end_inset
239
240 a new language that is stored in 
241 \begin_inset Flex Code
242 status collapsed
243
244 \begin_layout Plain Layout
245
246 \backslash
247 language
248 \end_layout
249
250 \end_inset
251
252 .
253 \end_layout
254
255 \begin_layout Description
256 Removed
257 \begin_inset space ~
258 \end_inset
259
260 document
261 \begin_inset space ~
262 \end_inset
263
264 setting If a certain setting becomes obsolete and gets removed, a file format
265  update is needed.
266 \end_layout
267
268 \begin_layout Description
269 New
270 \begin_inset space ~
271 \end_inset
272
273 inset Of course a new inset requires a file format update.
274 \end_layout
275
276 \begin_layout Description
277 New
278 \begin_inset space ~
279 \end_inset
280
281 style in any layout file or module shipped with \SpecialChar LyX
282 , or new shipped layout
283  file or module.
284  These requirements are currently under discussion and might change in the
285  future.
286 \end_layout
287
288 \begin_layout Description
289 Automatically
290 \begin_inset space ~
291 \end_inset
292
293 loaded
294 \begin_inset space ~
295 \end_inset
296
297 math
298 \begin_inset space ~
299 \end_inset
300
301 package Any new math package that is automatically loaded needs a file format
302  update.
303  The reason for this is that there is no true ERT inset for math formulas:
304  Each command is parsed, and if a user happens to defne a local command
305  with the same name as a command that triggers an automatic load of a package,
306  he needs to be able to switch off the automatic loading of that package.
307  This switch is stored by the 
308 \begin_inset Flex Code
309 status collapsed
310
311 \begin_layout Plain Layout
312 use_package
313 \end_layout
314
315 \end_inset
316
317  header setting.
318 \end_layout
319
320 \begin_layout Standard
321 If you are still unsure, please ask on the development list.
322 \end_layout
323
324 \begin_layout Subsection
325 How to update the file format number of .lyx files
326 \end_layout
327
328 \begin_layout Standard
329 Once you came to the conclusion that a file format update is needed you
330  should use the following procedure to perform the update:
331 \end_layout
332
333 \begin_layout Enumerate
334 Implement and test the new feature, including the reading and writing of
335  .lyx files.
336  Note that any file produced at this stage does not use a valid format,
337  so do not use this version of \SpecialChar LyX
338  for working on any important documents.
339 \end_layout
340
341 \begin_layout Enumerate
342 Describe the new format in 
343 \begin_inset Flex Code
344 status collapsed
345
346 \begin_layout Plain Layout
347 development/FORMAT
348 \end_layout
349
350 \end_inset
351
352 .
353 \end_layout
354
355 \begin_layout Enumerate
356 Update the \SpecialChar LyX
357  file format number in 
358 \begin_inset Flex Code
359 status collapsed
360
361 \begin_layout Plain Layout
362 src/version.h
363 \end_layout
364
365 \end_inset
366
367 .
368 \end_layout
369
370 \begin_layout Enumerate
371 Update the range of file formats in the array 
372 \begin_inset Flex Code
373 status collapsed
374
375 \begin_layout Plain Layout
376 format_relation
377 \end_layout
378
379 \end_inset
380
381  in 
382 \begin_inset Flex Code
383 status collapsed
384
385 \begin_layout Plain Layout
386 lib/lyx2lyx/LyX.py
387 \end_layout
388
389 \end_inset
390
391 .
392 \end_layout
393
394 \begin_layout Enumerate
395 Add an entry to both format lists (for conversion and reversion) in
396 \begin_inset Newline newline
397 \end_inset
398
399
400 \begin_inset Flex Code
401 status collapsed
402
403 \begin_layout Plain Layout
404 lib/lyx2lyx/lyx_2_2.py
405 \end_layout
406
407 \end_inset
408
409 .
410  Add a conversion routine if needed (e.
411 \begin_inset space \thinspace{}
412 \end_inset
413
414 g.
415 \begin_inset space \space{}
416 \end_inset
417
418 a new header setting always needs a conversion that adds the new setting,
419  a new document language does not need one).
420  Add a reversion routine if needed.
421  While the conversion routine is required to produce a document that is
422  equivalent to the old version, the requirements of the reversion are not
423  that strict.
424  If possible, try to produce a proper reversion, using ERT if needed, but
425  for some features this might be too complicated.
426  In this case, the minimum requirement of the reversion routine is that
427  it produces a valid document which can be read by an older \SpecialChar LyX
428 .
429  If absolutely needed, even data loss is allowed for the reversion.
430 \end_layout
431
432 \begin_layout Enumerate
433 Since tex2lyx has several implicit file format dependencies caused by sharing
434  code with \SpecialChar LyX
435 , updating the file format of .lyx files produced by tex2lyx at
436  the same time as updating the main .lyx file format is strongly recommended.
437  Therefore, a compiler warning will be issued if the \SpecialChar LyX
438  and tex2lyx .lyx file
439  format numbers differ.
440  In many cases the tex2lyx update requires only the first and last item
441  of the list below:
442 \begin_inset Separator parbreak
443 \end_inset
444
445
446 \end_layout
447
448 \begin_deeper
449 \begin_layout Enumerate
450 Update the tex2lyx file format number in 
451 \begin_inset Flex Code
452 status collapsed
453
454 \begin_layout Plain Layout
455 src/version.h
456 \end_layout
457
458 \end_inset
459
460 .
461 \end_layout
462
463 \begin_layout Enumerate
464 If the lyx2lyx conversion from the old to the new format is empty, or if
465  tex2lyx does not yet output the changed feature, you do not need any further
466  tex2lyx changes.
467  Otherwise, search for the changed feature in tex2lyx, and adjust the output
468  according to the lyx2lyx changes.
469 \end_layout
470
471 \begin_layout Enumerate
472 Update the tex2lyx test references as described in 
473 \begin_inset CommandInset ref
474 LatexCommand formatted
475 reference "sec:Updating-test-references"
476
477 \end_inset
478
479 .
480 \end_layout
481
482 \end_deeper
483 \begin_layout Enumerate
484 If you did not implement full tex2lyx support of the new feature, add a
485  line to 
486 \begin_inset Flex Code
487 status collapsed
488
489 \begin_layout Plain Layout
490 src/tex2lyx/TODO.txt
491 \end_layout
492
493 \end_inset
494
495  describing the missing bits.
496  Note that it is perfectly fine if you do not add full tex2lyx support for
497  a new feature: The updating recommendation above is only issued for the
498  syntax of the produced .lyx file.
499  It is no problem if some features supported by \SpecialChar LyX
500  are still output as ERT
501  by tex2lyx, since the problems in the past that resulted in the update
502  recommendation were related to mixed version syntax, not ERT.
503 \end_layout
504
505 \begin_layout Enumerate
506 It would be nice if you could create a .lyx test file which contains instances
507  of all changed or added features.
508  This could then be used to test lyx2lyx and tex2lyx.
509  Unfortunately it has not yet been decided how to collect such examples,
510  so please ask on the development list if you want to create one.
511 \end_layout
512
513 \begin_layout Subsection
514 Backporting new styles to the stable version
515 \end_layout
516
517 \begin_layout Standard
518 Starting with the stable \SpecialChar LyX
519  2.1 branch, there is a mechanism in place to backport
520  new styles to the stable version without the need to update the file format.
521  The basic idea is that the new style definition is automatically copied
522  to the document preamble, so that it can even be used by older minor revisions
523  that did not yet include the style.
524  To backport a new style to the stable version, the following steps are
525  needed:
526 \end_layout
527
528 \begin_layout Enumerate
529 Add the line 
530 \begin_inset Flex Code
531 status collapsed
532
533 \begin_layout Plain Layout
534 ForceLocal -1
535 \end_layout
536
537 \end_inset
538
539  to the style definition in the development version.
540 \end_layout
541
542 \begin_layout Enumerate
543 Copy the style definition to the stable version, but use 
544 \begin_inset Flex Code
545 status collapsed
546
547 \begin_layout Plain Layout
548 ForceLocal 1
549 \end_layout
550
551 \end_inset
552
553  instead.
554  If needed adjust the format to the one used by the stable version (see
555  the customization manual for details of the layout file format).
556 \end_layout
557
558 \begin_layout Enumerate
559 For each update of the style in a later stable version, increase the argument
560  of 
561 \begin_inset Flex Code
562 status collapsed
563
564 \begin_layout Plain Layout
565 ForceLocal
566 \end_layout
567
568 \end_inset
569
570  by one (in the stable version, the development version should not be touched).
571 \end_layout
572
573 \begin_layout Standard
574 For details about the 
575 \begin_inset Flex Code
576 status collapsed
577
578 \begin_layout Plain Layout
579 ForceLocal
580 \end_layout
581
582 \end_inset
583
584  flag see the customization manual.
585  No 
586 \begin_inset Flex Code
587 status collapsed
588
589 \begin_layout Plain Layout
590 lyx2lyx
591 \end_layout
592
593 \end_inset
594
595  support is needed for backported styles: Since the style of the development
596  version has an infinite version number, it will always be used.
597  Furthermore, since its version number is less than one, the style will
598  not be written anymore to the document header for files saved by the new
599  version.
600 \end_layout
601
602 \begin_layout Standard
603 \begin_inset Newpage newpage
604 \end_inset
605
606
607 \end_layout
608
609 \begin_layout Section
610 Tests
611 \end_layout
612
613 \begin_layout Standard
614 Automated tests are an important tool to detect bugs and regressions in
615  software development.
616  Some projects like gcc even require each bug fix to be accompanied by a
617  test case for the automatic test suite, that would detect this bug.
618  Testing interactive features automatically is of course very hard, but
619  core functionality like document import and export can be tested quite
620  easily, and some tests of this kind exist.
621 \end_layout
622
623 \begin_layout Subsection
624 \SpecialChar LyX
625  tests
626 \end_layout
627
628 \begin_layout Standard
629 Some tests are located in the 
630 \begin_inset Flex Code
631 status collapsed
632
633 \begin_layout Plain Layout
634 development/autotests
635 \end_layout
636
637 \end_inset
638
639  subfolder of the \SpecialChar LyX
640  source code distribution.
641 \end_layout
642
643 \begin_layout Subsubsection
644 Running the tests
645 \end_layout
646
647 \begin_layout Standard
648 cmake is required to run the \SpecialChar LyX
649  tests, running them is not implemented for
650  autotools.
651  The \SpecialChar LyX
652  tests can be run by the commands 
653 \begin_inset Flex Code
654 status collapsed
655
656 \begin_layout Plain Layout
657 ctest
658 \end_layout
659
660 \end_inset
661
662  (all platforms) or 
663 \begin_inset Flex Code
664 status collapsed
665
666 \begin_layout Plain Layout
667 make test
668 \end_layout
669
670 \end_inset
671
672  (when using a make based build system and not MSVC) in the 
673 \begin_inset Flex Code
674 status collapsed
675
676 \begin_layout Plain Layout
677 autotests
678 \end_layout
679
680 \end_inset
681
682  subfolder of the build directory.
683 \end_layout
684
685 \begin_layout Subsection
686 tex2lyx tests
687 \end_layout
688
689 \begin_layout Standard
690 The tex2lyx tests are located in the 
691 \begin_inset Flex Code
692 status collapsed
693
694 \begin_layout Plain Layout
695 src/tex2lyx/test
696 \end_layout
697
698 \end_inset
699
700  subfolder of the \SpecialChar LyX
701  source code distribution.
702  The actual testing is performed by the simple python script 
703 \begin_inset Flex Code
704 status collapsed
705
706 \begin_layout Plain Layout
707 src/tex2lyx/test/runtests.py
708 \end_layout
709
710 \end_inset
711
712 .
713  Each test consists of two files: 
714 \begin_inset Flex Code
715 status collapsed
716
717 \begin_layout Plain Layout
718 <test name>.tex
719 \end_layout
720
721 \end_inset
722
723  contains the \SpecialChar LaTeX
724  code that should be tested.
725  
726 \begin_inset Flex Code
727 status collapsed
728
729 \begin_layout Plain Layout
730 <test name>.lyx.lyx
731 \end_layout
732
733 \end_inset
734
735  contains the expected output of tex2lyx.
736  When a test is run, the actual produced output is compared with the stored
737  reference output.
738  The test passes if both are identical.
739  The test machinery is also able to generate a file 
740 \begin_inset Flex Code
741 status collapsed
742
743 \begin_layout Plain Layout
744 <test name>.lyx.tex
745 \end_layout
746
747 \end_inset
748
749  by exporting the produced .lyx file with \SpecialChar LyX
750  again.
751  This may be useful for roundtrip comparisons.
752 \end_layout
753
754 \begin_layout Subsubsection
755 Running the tests
756 \end_layout
757
758 \begin_layout Standard
759 The tex2lyx tests can be run in several ways.
760  When in the 
761 \begin_inset Flex Code
762 status collapsed
763
764 \begin_layout Plain Layout
765 src/tex2lyx
766 \end_layout
767
768 \end_inset
769
770  subfolder of the build directory, the commands 
771 \begin_inset Flex Code
772 status collapsed
773
774 \begin_layout Plain Layout
775 ctest
776 \end_layout
777
778 \end_inset
779
780  (cmake, all platforms), 
781 \begin_inset Flex Code
782 status collapsed
783
784 \begin_layout Plain Layout
785 make test
786 \end_layout
787
788 \end_inset
789
790  (cmake, when using a make based build system and not MSVC) or 
791 \begin_inset Flex Code
792 status collapsed
793
794 \begin_layout Plain Layout
795 make alltests
796 \end_layout
797
798 \end_inset
799
800  (autotools) will run the tex2lyx tests.
801  Alternatively, in the root of the build directory, the command 
802 \begin_inset Flex Code
803 status collapsed
804
805 \begin_layout Plain Layout
806 ctest -R tex2lyx
807 \end_layout
808
809 \end_inset
810
811  runs all tests whose names match the regex 
812 \begin_inset Quotes eld
813 \end_inset
814
815 tex2lyx
816 \begin_inset Quotes erd
817 \end_inset
818
819 .
820  Another way to run the tex2lyx tests in the root build directory is to
821  instead use the command 
822 \begin_inset Flex Code
823 status collapsed
824
825 \begin_layout Plain Layout
826 ctest -L '(cmplyx|roundtrip)'
827 \end_layout
828
829 \end_inset
830
831 , which runs all tests categorized with the label 
832 \begin_inset Quotes eld
833 \end_inset
834
835 roundtrip
836 \begin_inset Quotes erd
837 \end_inset
838
839  or 
840 \begin_inset Quotes eld
841 \end_inset
842
843 cmplyx
844 \begin_inset Quotes erd
845 \end_inset
846
847 .
848  If a test fails, the differences between the expected and actual results
849  are output in unified diff format.
850 \end_layout
851
852 \begin_layout Subsubsection
853 Updating test references
854 \begin_inset CommandInset label
855 LatexCommand label
856 name "sec:Updating-test-references"
857
858 \end_inset
859
860
861 \end_layout
862
863 \begin_layout Standard
864 In some cases a changed tex2lyx output is not a test failure, but wanted,
865  e.
866 \begin_inset space \thinspace{}
867 \end_inset
868
869 g.
870 \begin_inset space \space{}
871 \end_inset
872
873 if a tex2lyx bug was fixed, or a new feature was added.
874  In these cases the stored references need to be updated.
875  To do so if using autotools, call 
876 \begin_inset Flex Code
877 status collapsed
878
879 \begin_layout Plain Layout
880 make updatetests
881 \end_layout
882
883 \end_inset
884
885  in the 
886 \begin_inset Flex Code
887 status collapsed
888
889 \begin_layout Plain Layout
890 src/tex2lyx
891 \end_layout
892
893 \end_inset
894
895  subdirectory of the build directory.
896  If instead using CMake, call 
897 \begin_inset Flex Code
898 status collapsed
899
900 \begin_layout Plain Layout
901 make updatetex2lyxtests
902 \end_layout
903
904 \end_inset
905
906  in the build directory or in the 
907 \begin_inset Flex Code
908 status collapsed
909
910 \begin_layout Plain Layout
911 src/tex2lyx/test
912 \end_layout
913
914 \end_inset
915
916  subdirectory of the build directory.
917 \begin_inset Foot
918 status collapsed
919
920 \begin_layout Plain Layout
921 Note that this is a case where a make target in the build directory can
922  affect the source directory, which might not be advisable.
923 \end_layout
924
925 \end_inset
926
927  On Windows do the following:
928 \end_layout
929
930 \begin_layout Itemize
931 Assure that the path to the python.exe is in your system PATH variable.
932 \end_layout
933
934 \begin_layout Itemize
935 Double-click on the file 
936 \begin_inset Flex Code
937 status collapsed
938
939 \begin_layout Plain Layout
940 updatetex2lyxtests.vcxproj
941 \end_layout
942
943 \end_inset
944
945  in the build directory or in the 
946 \begin_inset Flex Code
947 status collapsed
948
949 \begin_layout Plain Layout
950 src/tex2lyx/test
951 \end_layout
952
953 \end_inset
954
955  subdirectory of your build directory.
956 \end_layout
957
958 \begin_layout Itemize
959 In the appearing MSVC program right-click on the project 
960 \family sans
961 updatetex2lyxtests
962 \family default
963  in the project explorer and chose 
964 \family sans
965 Create
966 \family default
967 .
968 \end_layout
969
970 \begin_layout Standard
971 For convenience, these commands also produce re-exported roundtrip .lyx.tex
972  files.
973  Please examine the changed output carefully before committing the changed
974  files to the repository: Since the test machinery does not do a roundtrip
975  test .tex 
976 \begin_inset Formula $\Rightarrow$
977 \end_inset
978
979  .lyx 
980 \begin_inset Formula $\Rightarrow$
981 \end_inset
982
983  .tex, and does not compare the produced dvi or pdf output, it assumes that
984  the stored .lyx reference produces correct output if processed by \SpecialChar LyX
985 .
986  There is only one chance to detect wrong output: before committing a new
987  reference.
988  Once it is committed, it is quite difficult to verify whether it is correct.
989 \end_layout
990
991 \begin_layout Standard
992 Please 
993 \emph on
994 do not
995 \emph default
996  update the test references by opening them with \SpecialChar LyX
997  or directly running lyx2lyx
998  on them.
999  This would not work, since lyx2lyx and \SpecialChar LyX
1000  produce slightly different files
1001  regarding insignificant whitespace and line breaks.
1002 \end_layout
1003
1004 \begin_layout Subsubsection
1005 Adding a new test
1006 \end_layout
1007
1008 \begin_layout Standard
1009 In many cases tests for new features may be added to one of the existing
1010  test files, but sometimes this is not possible or not wanted.
1011  Then a new test file needs to be added:
1012 \end_layout
1013
1014 \begin_layout Enumerate
1015 Create the new file 
1016 \begin_inset Flex Code
1017 status collapsed
1018
1019 \begin_layout Plain Layout
1020 src/tex2lyx/test/<test name>.tex
1021 \end_layout
1022
1023 \end_inset
1024
1025  and run tex2lyx in roundtrip mode to produce the file 
1026 \begin_inset Flex Code
1027 status collapsed
1028
1029 \begin_layout Plain Layout
1030 src/tex2lyx/test/<test name>.lyx.lyx
1031 \end_layout
1032
1033 \end_inset
1034
1035 .
1036  This file will be the new reference.
1037 \end_layout
1038
1039 \begin_layout Enumerate
1040 Once you confirmed that the tex2lyx output is correct, add the new files
1041  to the corresponding lists in 
1042 \begin_inset Flex Code
1043 status collapsed
1044
1045 \begin_layout Plain Layout
1046 src/tex2lyx/test/runtests.py
1047 \end_layout
1048
1049 \end_inset
1050
1051
1052 \begin_inset Flex Code
1053 status collapsed
1054
1055 \begin_layout Plain Layout
1056 src/tex2lyx/Makefile.am
1057 \end_layout
1058
1059 \end_inset
1060
1061  and 
1062 \begin_inset Flex Code
1063 status collapsed
1064
1065 \begin_layout Plain Layout
1066 src/tex2lyx/test/CMakeLists.txt
1067 \end_layout
1068
1069 \end_inset
1070
1071 .
1072 \end_layout
1073
1074 \begin_layout Enumerate
1075 Commit the changes to the repository, or send a patch to the development
1076  list and ask for committing if you do not have commit rights.
1077 \end_layout
1078
1079 \begin_layout Subsection
1080 Export tests (cmake only)
1081 \end_layout
1082
1083 \begin_layout Standard
1084 The export tests are integration tests.
1085  They take longer to run and are more likely to break than the tex2lyx tests.
1086  Nevertheless, they have caught many regressions and without a better alternativ
1087 e it is important to keep them up-to-date and understand how they work.
1088 \end_layout
1089
1090 \begin_layout Standard
1091 The export tests require the 
1092 \begin_inset Flex Code
1093 status collapsed
1094
1095 \begin_layout Plain Layout
1096 ctest
1097 \end_layout
1098
1099 \end_inset
1100
1101  command that comes with the 
1102 \begin_inset Flex Code
1103 status collapsed
1104
1105 \begin_layout Plain Layout
1106 cmake
1107 \end_layout
1108
1109 \end_inset
1110
1111  build system
1112 \end_layout
1113
1114 \begin_layout Subsubsection
1115 Expectations of LyX developers
1116 \end_layout
1117
1118 \begin_layout Standard
1119 Because the export tests are integration tests and take a long time to run,
1120  LyX developers are rarely expected to run all of the tests.
1121  Here are some good practices to follow by developers:
1122 \end_layout
1123
1124 \begin_layout Itemize
1125 When making a non-trivial change to a .layout file, run the export and layout
1126  tests corresponding with that .layout file.
1127 \end_layout
1128
1129 \begin_layout Itemize
1130 When making non-trivial changes to a .lyx file, run the export tests correspondin
1131 g to that .lyx file.
1132 \end_layout
1133
1134 \begin_layout Itemize
1135 When making non-trivial changes to LyX's LaTeX export code (e.g.
1136  touching the encoding code or package handling code that you expect will
1137  change the exported LaTeX in some way), consider running all of the export
1138  tests before and after your change.
1139  If there are differences, please reconcile these (i.e.
1140  fix the bug or fix the tests) 
1141 \emph on
1142 before
1143 \emph default
1144  committing.
1145  Ask for help if you're not sure what to do or if you do not want to run
1146  the tests, post the patch on the list and others will run the tests.
1147 \end_layout
1148
1149 \begin_layout Itemize
1150 Understand how to interpret test failures.
1151  If your commit is found to have broken a test, you should be able to interpret
1152  the test results when made aware of them.
1153  See Section 
1154 \begin_inset CommandInset ref
1155 LatexCommand ref
1156 reference "subsec:Interpreting-export-tests"
1157
1158 \end_inset
1159
1160 .
1161 \end_layout
1162
1163 \begin_layout Subsubsection
1164 Configuring the tests
1165 \end_layout
1166
1167 \begin_layout Standard
1168 To enable these tests, add the 
1169 \begin_inset Flex Code
1170 status collapsed
1171
1172 \begin_layout Plain Layout
1173 -DLYX_ENABLE_EXPORT_TESTS=ON
1174 \end_layout
1175
1176 \end_inset
1177
1178  flag.
1179  For example:
1180 \end_layout
1181
1182 \begin_layout Standard
1183 \begin_inset Flex Code
1184 status collapsed
1185
1186 \begin_layout Plain Layout
1187 cmake -DLYX_ENABLE_EXPORT_TESTS=ON /path/to/source
1188 \end_layout
1189
1190 \end_inset
1191
1192
1193 \end_layout
1194
1195 \begin_layout Standard
1196 \noindent
1197 This flag will increase the time for the cmake command by several seconds,
1198  mainly because of the process of inverting tests (see Section 
1199 \begin_inset CommandInset ref
1200 LatexCommand ref
1201 reference "subsec:Interpreting-export-tests"
1202
1203 \end_inset
1204
1205 ).
1206 \end_layout
1207
1208 \begin_layout Subsubsection
1209 Running the tests
1210 \end_layout
1211
1212 \begin_layout Standard
1213 To run all tests, in the build directory simply run the command 
1214 \begin_inset Flex Code
1215 status collapsed
1216
1217 \begin_layout Plain Layout
1218 ctest
1219 \end_layout
1220
1221 \end_inset
1222
1223 .
1224  To run only some of the tests, use the command 
1225 \begin_inset Flex Code
1226 status collapsed
1227
1228 \begin_layout Plain Layout
1229 ctest -R <pattern>
1230 \end_layout
1231
1232 \end_inset
1233
1234 , where 
1235 \begin_inset Flex Code
1236 status collapsed
1237
1238 \begin_layout Plain Layout
1239 <pattern>
1240 \end_layout
1241
1242 \end_inset
1243
1244  is a regular expression that matches test names.
1245  To run only the export tests, you can use 
1246 \begin_inset Flex Code
1247 status collapsed
1248
1249 \begin_layout Plain Layout
1250 ctest -L export
1251 \end_layout
1252
1253 \end_inset
1254
1255 .
1256  For the list of test categories available in addition to 
1257 \begin_inset Quotes eld
1258 \end_inset
1259
1260 export
1261 \begin_inset Quotes erd
1262 \end_inset
1263
1264 , run 
1265 \begin_inset Flex Code
1266 status collapsed
1267
1268 \begin_layout Plain Layout
1269 ctest \SpecialChar nobreakdash
1270 \SpecialChar nobreakdash
1271 print-labels
1272 \end_layout
1273
1274 \end_inset
1275
1276 .
1277  It is often useful to list the tests without running them (e.g.
1278  if you want to know how many tests there are or whether your 
1279 \begin_inset Flex Code
1280 status collapsed
1281
1282 \begin_layout Plain Layout
1283 <pattern>
1284 \end_layout
1285
1286 \end_inset
1287
1288  regular expression did what you expected).
1289  This can be done with the 
1290 \begin_inset Flex Code
1291 status collapsed
1292
1293 \begin_layout Plain Layout
1294 -N
1295 \end_layout
1296
1297 \end_inset
1298
1299  or 
1300 \begin_inset Flex Code
1301 status collapsed
1302
1303 \begin_layout Plain Layout
1304 \SpecialChar nobreakdash
1305 \SpecialChar nobreakdash
1306 show-only
1307 \end_layout
1308
1309 \end_inset
1310
1311  argument.
1312  We are still working on getting the tests to run in parallel which is supported
1313  by the 
1314 \begin_inset Flex Code
1315 status collapsed
1316
1317 \begin_layout Plain Layout
1318 ctest
1319 \end_layout
1320
1321 \end_inset
1322
1323  command with the 
1324 \begin_inset Flex Code
1325 status collapsed
1326
1327 \begin_layout Plain Layout
1328 -j <jobs>
1329 \end_layout
1330
1331 \end_inset
1332
1333  or 
1334 \begin_inset Flex Code
1335 status collapsed
1336
1337 \begin_layout Plain Layout
1338 \SpecialChar nobreakdash
1339 \SpecialChar nobreakdash
1340 parallel <jobs>
1341 \end_layout
1342
1343 \end_inset
1344
1345  argument.
1346  However, when running the tests in parallel, sometimes tests fail that
1347  pass when run sequentially.
1348  A reasonable approach is to first run the tests in parallel and then run
1349  the failed tests sequentially.
1350  For example, to run 8 jobs at a time:
1351 \end_layout
1352
1353 \begin_layout Standard
1354 \begin_inset Flex Code
1355 status collapsed
1356
1357 \begin_layout Plain Layout
1358 ctest -j8
1359 \end_layout
1360
1361 \end_inset
1362
1363
1364 \end_layout
1365
1366 \begin_layout Standard
1367 \begin_inset Flex Code
1368 status collapsed
1369
1370 \begin_layout Plain Layout
1371 ctest \SpecialChar nobreakdash
1372 \SpecialChar nobreakdash
1373 rerun-failed
1374 \end_layout
1375
1376 \end_inset
1377
1378
1379 \end_layout
1380
1381 \begin_layout Standard
1382 \noindent
1383 Note that some tests cannot be run in parallel.
1384  These tests are marked in the code with the 
1385 \begin_inset Flex Code
1386 status collapsed
1387
1388 \begin_layout Plain Layout
1389 \noindent
1390 RUN_SERIAL ON
1391 \end_layout
1392
1393 \end_inset
1394
1395  CMake property.
1396 \end_layout
1397
1398 \begin_layout Standard
1399 In some situations the option 
1400 \begin_inset Flex Code
1401 status collapsed
1402
1403 \begin_layout Plain Layout
1404 \SpecialChar nobreakdash
1405 \SpecialChar nobreakdash
1406 timeout <seconds>
1407 \end_layout
1408
1409 \end_inset
1410
1411  is useful.
1412  There have been bugs in LyX and in LaTeX which cause compilation to hang,
1413  and without a timeout a test might never stop (in one case there was even
1414  a memory leak).
1415  If a test times out, the 
1416 \begin_inset Flex Code
1417 status collapsed
1418
1419 \begin_layout Plain Layout
1420 ctest
1421 \end_layout
1422
1423 \end_inset
1424
1425  command exits with error, but you can distinguish between a timed out test
1426  and a failed test in the output reported at the end of the 
1427 \begin_inset Flex Code
1428 status collapsed
1429
1430 \begin_layout Plain Layout
1431 ctest
1432 \end_layout
1433
1434 \end_inset
1435
1436  command.
1437 \end_layout
1438
1439 \begin_layout Standard
1440 See the manual (
1441 \begin_inset Flex Code
1442 status collapsed
1443
1444 \begin_layout Plain Layout
1445 man ctest
1446 \end_layout
1447
1448 \end_inset
1449
1450 ) the full list of command line options.
1451 \end_layout
1452
1453 \begin_layout Subsubsection
1454 \begin_inset CommandInset label
1455 LatexCommand label
1456 name "subsec:Interpreting-export-tests"
1457
1458 \end_inset
1459
1460 Interpreting the export test results
1461 \end_layout
1462
1463 \begin_layout Standard
1464 A test can fail for several reasons, not all of them bad.
1465 \end_layout
1466
1467 \begin_layout Enumerate
1468 The .lyx file could have been added recently and some formats are not expected
1469  to work well.
1470 \end_layout
1471
1472 \begin_layout Enumerate
1473 A dependency is not met (e.g.
1474  the LaTeX class file).
1475  One hint that this is the case is that the corresponding 
1476 \begin_inset Flex Code
1477 status open
1478
1479 \begin_layout Plain Layout
1480 check_load
1481 \end_layout
1482
1483 \end_inset
1484
1485  test will likely also fail.
1486 \end_layout
1487
1488 \begin_layout Enumerate
1489 An inverted test fails to fail (i.e.
1490  export that previously failed now works).
1491 \end_layout
1492
1493 \begin_layout Enumerate
1494 An external dependency was updated (e.g.
1495  TeX Live).
1496 \end_layout
1497
1498 \begin_layout Enumerate
1499 A recent code change introduced a bug.
1500 \end_layout
1501
1502 \begin_layout Enumerate
1503 \begin_inset CommandInset label
1504 LatexCommand label
1505 name "enu:exposed"
1506
1507 \end_inset
1508
1509 A change in a document exposed a previously unknown bug or an incompatibility
1510  with an export format (e.g.
1511  LuaTeX).
1512 \end_layout
1513
1514 \begin_layout Standard
1515 Because the .lyx files are exported in several formats, it is not surprising
1516  that many of the exports fail.
1517  This expectation of failure is addressed by 
1518 \begin_inset Quotes eld
1519 \end_inset
1520
1521 inverting
1522 \begin_inset Quotes erd
1523 \end_inset
1524
1525  the tests, that is, by marking the test as 
1526 \begin_inset Quotes eld
1527 \end_inset
1528
1529 passing
1530 \begin_inset Quotes erd
1531 \end_inset
1532
1533  if the export exits with error and as 
1534 \begin_inset Quotes eld
1535 \end_inset
1536
1537 failing
1538 \begin_inset Quotes erd
1539 \end_inset
1540
1541  if the export succeeds
1542 \emph on
1543 .
1544
1545 \emph default
1546  It follows that these expected failures will not show up as failed tests
1547  in the test results and thus will not pollute the 
1548 \begin_inset Quotes eld
1549 \end_inset
1550
1551 good
1552 \begin_inset Quotes erd
1553 \end_inset
1554
1555  tests.
1556  If the export actually succeeds, then the test will fail.
1557  The purpose of this failure is to get your attention—something has changed,
1558  possibly for the better.
1559 \end_layout
1560
1561 \begin_layout Standard
1562 We try to document why a test is inverted or ignored.
1563  See the comment (prefixed with 
1564 \begin_inset Flex Code
1565 status collapsed
1566
1567 \begin_layout Plain Layout
1568 #
1569 \end_layout
1570
1571 \end_inset
1572
1573 ) above the block in which the test is listed as inverted or ignored in
1574  the files 
1575 \begin_inset Flex Code
1576 status collapsed
1577
1578 \begin_layout Plain Layout
1579 development/autotests/revertedTests
1580 \end_layout
1581
1582 \end_inset
1583
1584  and 
1585 \begin_inset Flex Code
1586 status collapsed
1587
1588 \begin_layout Plain Layout
1589 development/autotests/ignoredTests
1590 \end_layout
1591
1592 \end_inset
1593
1594 .
1595  It is possible that an export goes from succeeding to failing just because
1596  the document was changed and the document was never expected to work with
1597  a certain export format in the first case.
1598  Once this is confirmed to be the situation, the test can be inverted.
1599 \end_layout
1600
1601 \begin_layout Standard
1602 A good question is why do we enable the tests for non-default formats? The
1603  answer is that if a non-default route is broken it is often because a bug
1604  was introduced in LyX and not because a document-specific change was made
1605  that is not supported by the route.
1606  In other words, there is a high signal/noise ratio in the export tests
1607  for some non-default formats.
1608  
1609 \end_layout
1610
1611 \begin_layout Standard
1612 What action should you take if a test fails? First, check manually that
1613  when the compilation succeeded before the resulting PDF was good.
1614  In fact, sometimes it is an improvement when a test fails.
1615  If you check manually, it might be the case that the export was succeeding
1616  before but showing garbled text in a PDF output.
1617  Now it might fail with a clear message of "language xyz not supported".
1618  It is always good to check manually why something fails and if it passes
1619  if the PDF output is good.
1620 \end_layout
1621
1622 \begin_layout Standard
1623 Sometimes a test is fixed as side-effect of some change.
1624  We should uninvert a test (remove it from the 
1625 \begin_inset Flex Code
1626 status collapsed
1627
1628 \begin_layout Plain Layout
1629 revertedTests
1630 \end_layout
1631
1632 \end_inset
1633
1634  file) in order to preserve the fix.
1635 \end_layout
1636
1637 \begin_layout Standard
1638 When a test or several tests fail, consider checking the files in the 
1639 \begin_inset Flex Code
1640 status collapsed
1641
1642 \begin_layout Plain Layout
1643 Testing/Temporary/
1644 \end_layout
1645
1646 \end_inset
1647
1648  subdirectory of your build directory.
1649  In this subdirectory are three files: the file 
1650 \begin_inset Flex Code
1651 status collapsed
1652
1653 \begin_layout Plain Layout
1654 LastTestsFailed.log
1655 \end_layout
1656
1657 \end_inset
1658
1659  simply lists the tests that failed on your last 
1660 \begin_inset Flex Code
1661 status collapsed
1662
1663 \begin_layout Plain Layout
1664 ctest
1665 \end_layout
1666
1667 \end_inset
1668
1669  command; the 
1670 \begin_inset Flex Code
1671 status collapsed
1672
1673 \begin_layout Plain Layout
1674 LastTest.log
1675 \end_layout
1676
1677 \end_inset
1678
1679  file contains the output from the tests (and often has details explaining
1680  why a test failed); and the 
1681 \begin_inset Flex Code
1682 status collapsed
1683
1684 \begin_layout Plain Layout
1685 CTestCostData.txt
1686 \end_layout
1687
1688 \end_inset
1689
1690  file lists the times that it took to run the tests.
1691 \end_layout
1692
1693 \begin_layout Subsubsection
1694 Inverted tests
1695 \end_layout
1696
1697 \begin_layout Standard
1698 These tests are expected to always fail.
1699 \end_layout
1700
1701 \begin_layout Description
1702 reverted These tests are expected to fail, but are subject to be examined.
1703  It is expected that they will pass in a foreseeable future.
1704  They are labeled 'reverted'.
1705 \end_layout
1706
1707 \begin_layout Description
1708 suspended Some inverted tests are labeled 'suspended'.
1709  This means, they are not executed using 
1710 \begin_inset Flex Code
1711 status collapsed
1712
1713 \begin_layout Plain Layout
1714 ctest -L export
1715 \end_layout
1716
1717 \end_inset
1718
1719  or 
1720 \begin_inset Flex Code
1721 status collapsed
1722
1723 \begin_layout Plain Layout
1724 ctest -L reverted
1725 \end_layout
1726
1727 \end_inset
1728
1729 .
1730  From time to time they still have to be checked using 
1731 \begin_inset Flex Code
1732 status collapsed
1733
1734 \begin_layout Plain Layout
1735 ctest -L suspended
1736 \end_layout
1737
1738 \end_inset
1739
1740 .
1741 \end_layout
1742
1743 \begin_deeper
1744 \begin_layout Standard
1745 These tests are suspended, because they fail for known reasons which cannot
1746  ATM be resolved.
1747  But it is expected the reason might disappear in the future.
1748  Be it new TL or better handling in \SpecialChar LyX
1749 .
1750 \end_layout
1751
1752 \begin_layout Standard
1753 For ctest commands without the 
1754 \begin_inset Flex Code
1755 status collapsed
1756
1757 \begin_layout Plain Layout
1758 -L
1759 \end_layout
1760
1761 \end_inset
1762
1763  parameter nothing changes.
1764  Suspended or not, tests will be executed depending only on the regexes
1765  parameters given to the ctest command.
1766 \end_layout
1767
1768 \end_deeper
1769 \begin_layout Subsubsection
1770 Unreliable tests
1771 \end_layout
1772
1773 \begin_layout Description
1774 nonstandard Requires non-standard ressources (LaTeX packages and document
1775  classes, fonts, ...) that are not a requirement for running this test suite.
1776 \end_layout
1777
1778 \begin_deeper
1779 \begin_layout Standard
1780 These tests are labeled as 
1781 \family typewriter
1782 'nonstandard'.
1783 \end_layout
1784
1785 \end_deeper
1786 \begin_layout Description
1787 erratic Tests with 
1788 \begin_inset Quotes eld
1789 \end_inset
1790
1791 arbitrary
1792 \begin_inset Quotes erd
1793 \end_inset
1794
1795  result, depending on local configuration, OS, TeX distribution, package
1796  versions, or the phase of the moon.
1797 \end_layout
1798
1799 \begin_deeper
1800 \begin_layout Standard
1801 These tests are labeled as 
1802 \family typewriter
1803 'erratic'.
1804 \end_layout
1805
1806 \end_deeper
1807 \begin_layout Subsection
1808 check_load tests
1809 \end_layout
1810
1811 \begin_layout Standard
1812 These tests check whether a .lyx file loads without any terminal messages.
1813  They correspond to the manual operations of simply opening a .lyx file on
1814  the terminal, exiting LyX once the file is loaded, and then checking whether
1815  there is any output from the terminal.
1816  These tests are useful for catching malformed .lyx files and parsing bugs.
1817  They can also be used to find a .lyx file in which an instance of something
1818  happens.
1819  To do this, compile LyX with a local patch that outputs something to the
1820  terminal when an instance is found, and then run the check_load tests to
1821  see if any fail, which would mean that the situation occurs in the LyX
1822  documentation files corresponding to the failed tests.
1823  These tests are expectedly fragile: any LyX diagnostic message, which is
1824  not necessarily an error, would cause the tests to fail.
1825  Similarly, any message output by a library (e.g.
1826  Qt) would also cause failure.
1827  There are some messages that the check_load tests are instructed to ignore,
1828  which are stored in the file 
1829 \begin_inset Flex Code
1830 status collapsed
1831
1832 \begin_layout Plain Layout
1833 development/autotests/filterCheckWarnings
1834 \end_layout
1835
1836 \end_inset
1837
1838 .
1839 \end_layout
1840
1841 \begin_layout Standard
1842 Under cmake, the tests are labeled as 'load'.
1843 \end_layout
1844
1845 \begin_layout Subsection
1846 URL tests (cmake only)
1847 \end_layout
1848
1849 \begin_layout Standard
1850 The URL tests are enabled with the 
1851 \begin_inset Flex Code
1852 status collapsed
1853
1854 \begin_layout Plain Layout
1855 -DLYX_ENABLE_URLTESTS=ON
1856 \end_layout
1857
1858 \end_inset
1859
1860  CMake flag and are useful for finding broken links in our documentation
1861  files.
1862  If a URL test fails, to see which link in particular was reported as broken,
1863  see the output in 
1864 \begin_inset Flex Code
1865 status collapsed
1866
1867 \begin_layout Plain Layout
1868 LastTest.log
1869 \end_layout
1870
1871 \end_inset
1872
1873 .
1874  These tests are extremely fragile (e.g.
1875  a test can depend on your Internet connection) and a failed URL test should
1876  not be taken too seriously.
1877  URL tests are labeled as 
1878 \family typewriter
1879 'url'.
1880 \end_layout
1881
1882 \begin_layout Subsubsection
1883 Running URL tests
1884 \end_layout
1885
1886 \begin_layout Standard
1887 cmake is required to run the \SpecialChar LyX
1888  tests, running them is not implemented for
1889  autotools.
1890 \end_layout
1891
1892 \begin_layout Standard
1893 The appropriate commands are:
1894 \end_layout
1895
1896 \begin_layout Itemize
1897
1898 \family typewriter
1899 ctest -L url
1900 \family default
1901
1902 \begin_inset Newline newline
1903 \end_inset
1904
1905 runns all tests with label 
1906 \family typewriter
1907 'url'
1908 \end_layout
1909
1910 \begin_layout Itemize
1911
1912 \family typewriter
1913 ctest -R 'check_.*urls'
1914 \family default
1915
1916 \begin_inset Newline newline
1917 \end_inset
1918
1919 runns the tests 'check_accessible_urls'
1920 \end_layout
1921
1922 \begin_layout Standard
1923 Associated test results can be examined in ctest-log directory in files
1924  of the form 'LastFailed.*URLS.log'
1925 \end_layout
1926
1927 \begin_layout Subsection
1928 Test labels (cmake only)
1929 \end_layout
1930
1931 \begin_layout Standard
1932 ctest label commands:
1933 \end_layout
1934
1935 \begin_layout Description
1936 \SpecialChar nobreakdash
1937 \SpecialChar nobreakdash
1938 print-labels shows all assigned labels
1939 \end_layout
1940
1941 \begin_layout Description
1942 \SpecialChar nobreakdash
1943 L
1944 \begin_inset space ~
1945 \end_inset
1946
1947 labelname executes all tests to which this label is asigned to.
1948  A test may have more that one label.
1949 \end_layout
1950
1951 \begin_layout Description
1952 \SpecialChar nobreakdash
1953 j
1954 \begin_inset space ~
1955 \end_inset
1956
1957 number executes tests in parallel using 'number' simultaneously processes.
1958  Some tests are marked as 'sequencial', for them this parameter has no effect.
1959 \end_layout
1960
1961 \begin_layout Section
1962 Development policies
1963 \end_layout
1964
1965 \begin_layout Standard
1966 This chapter lists some guidelines that should be followed.
1967  This list is not complete, and many guidelines are in separate chapters,
1968  such as 
1969 \begin_inset Quotes eld
1970 \end_inset
1971
1972 When is an update of the .lyx file format number needed?
1973 \begin_inset Quotes erd
1974 \end_inset
1975
1976  in Section 
1977 \begin_inset CommandInset ref
1978 LatexCommand ref
1979 reference "sec:When-is-an"
1980
1981 \end_inset
1982
1983 .
1984 \end_layout
1985
1986 \begin_layout Subsection
1987 When to set a fixed milestone?
1988 \end_layout
1989
1990 \begin_layout Standard
1991 Only set a fixed milestone (like 2.1.4 or 2.2.0) if at least one of the following
1992  holds:
1993 \end_layout
1994
1995 \begin_layout Enumerate
1996 Somebody is actively working on a fix.
1997 \end_layout
1998
1999 \begin_layout Enumerate
2000 The bug is so severe that it would block the release if it is not fixed.
2001 \end_layout
2002
2003 \begin_layout Standard
2004 If a bug is important, but nobody is working on it, and it is no showstopper,
2005  use a milestone like 2.1.x or 2.2.x.
2006  For all other bugs, do not set a milestone at all.
2007 \end_layout
2008
2009 \begin_layout Subsection
2010 Can we add rc entries in stable branch?
2011 \end_layout
2012
2013 \begin_layout Standard
2014 No.
2015  We are supposed to increase the prefs2prefs version number with such things.
2016 \end_layout
2017
2018 \begin_layout Section
2019 Documentation policies
2020 \end_layout
2021
2022 \begin_layout Standard
2023 The main documentation consists of these files:
2024 \end_layout
2025
2026 \begin_layout Description
2027 splash.lyx it is the first file you see after an installation.
2028  We assume that a new user sees this.
2029  It is therefore designed to be as simple as possible.
2030  Therefore please don't add any new formatting, only fix typos etc.
2031  Splash.lyx is up to date for \SpecialChar LyX
2032  2.1.x, currently maintained by Uwe Stöhr.
2033 \end_layout
2034
2035 \begin_layout Description
2036 Intro.lyx This is the manual new users will read to learn \SpecialChar LyX
2037 .
2038  It therefore uses a limited set of formatting.
2039  For example a standard document class.
2040  Since new users will first learn about the formatting possibilities of
2041  \SpecialChar LyX
2042  please keep this file that simple.
2043  Intro.lyx is up to date for \SpecialChar LyX
2044  2.1.x, currently maintained by Uwe Stöhr.
2045 \end_layout
2046
2047 \begin_layout Description
2048 Tutorial.lyx our tutorial.
2049  It must be always up to date.
2050  Normally there is nothing to add since we don't want to overwhelm new users
2051  with too much details.
2052  The will learn these details while using \SpecialChar LyX
2053  and we have special manuals.
2054  Tutorial.lyx is up to date for \SpecialChar LyX
2055  2.1.x, currently maintained by Uwe Stöhr.
2056 \end_layout
2057
2058 \begin_layout Description
2059 UserGuide.lyx our main user guide.
2060  It covers a mixture of basic and detailed information.
2061  Some information is also in the Math and EmbeddedObjects manual so that
2062  the UserGuide refers to these files.
2063  UserGuide.lyx is up to date for \SpecialChar LyX
2064  2.1.x, currently maintained by Uwe Stöhr.
2065 \end_layout
2066
2067 \begin_layout Description
2068 EmbeddedObjects.lyx a special manual to explain things like tables floats
2069  boxes etc.
2070  in all detail.
2071  EmbeddedObjects.lyx is up to date for \SpecialChar LyX
2072  2.1.x, currently maintained by Uwe
2073  Stöhr.
2074 \end_layout
2075
2076 \begin_layout Description
2077 Math.lyx a special manual to explain everything regarding math in all detail.
2078  Math.lyx is up to date for \SpecialChar LyX
2079  2.1.x, currently maintained by Uwe Stöhr.
2080 \end_layout
2081
2082 \begin_layout Description
2083 Additional.lyx this manual covers information that would be too much detail
2084  for the UserGuide or would make the UserGuide uncompilable or only compilable
2085  when installing a lot of special \SpecialChar LaTeX
2086 -packages.
2087  What should be in the UserGuide or better in Additional is a matter of
2088  taste.
2089  it is up to you to decide that.
2090  Additional.lyx is not completely up to date for \SpecialChar LyX
2091  2.1.x.
2092  Only chapter
2093 \begin_inset space ~
2094 \end_inset
2095
2096 8 is up to date and currently maintained by Uwe Stöhr.
2097  It certainly needs a rewrite and update.
2098  For example many info in chapter
2099 \begin_inset space ~
2100 \end_inset
2101
2102 2 and 3 are already covered by the UserGuide and/or the EmbeddedObjects
2103  manual.
2104 \end_layout
2105
2106 \begin_layout Description
2107 Customization.lyx this manual covers information how to customize \SpecialChar LyX
2108  for certain
2109  output formats, operating systems, languages etc.
2110  It is currently completely out of date and needs a major rewrite and update.
2111  If you do this please assure that your information are given for all OSes
2112  and \SpecialChar LaTeX
2113  distributions (meaning be as objective as possible).
2114 \end_layout
2115
2116 \begin_layout Standard
2117 There are only 4
2118 \begin_inset space ~
2119 \end_inset
2120
2121 rules in editing the docs:
2122 \end_layout
2123
2124 \begin_layout Enumerate
2125 If you are not the maintainer of a doc file or a chapter/section, you MUST
2126  use change tracking so that the maintainer could review your changes
2127 \end_layout
2128
2129 \begin_layout Enumerate
2130 Respect the formatting of the document.
2131  The different files use different formatting styles.
2132  That is OK and has historic reasons nobody fully know ;-).
2133  But it is important to be consistent within one file.
2134 \end_layout
2135
2136 \begin_layout Enumerate
2137 All changes you make to a file in one language MUST also go the file in
2138  the other actively maintained languages.
2139  Normally the maintainer does this for you, if you are the maintainer, you
2140  must do this by copying or changing the changed or added text to the other
2141  files so that the translators sees the blue underlined text and know what
2142  they have to translate and what was changed.
2143 \end_layout
2144
2145 \begin_layout Enumerate
2146 You MUST assure that the document is compilable as 
2147 \begin_inset Quotes eld
2148 \end_inset
2149
2150 PDF (pdflatex)
2151 \begin_inset Quotes erd
2152 \end_inset
2153
2154  after your changes.
2155 \end_layout
2156
2157 \end_body
2158 \end_document