qadevOOo/runner/util/ValueChanger.java | 52 +++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 8 deletions(-)
New commits: commit 1b5766f7c29f28349d8970e6437c8ab1ba994825 Author: Stephan Bergmann <sberg...@redhat.com> Date: Wed Oct 21 13:55:50 2015 +0200 In ValueChanger, don't accidentally modify oldValue ...so test code can later reliably check that a newly obtained value is different from oldValue. (Use copyStruct instead of new, in case the type of oldValue is derived from the type determined with instanceof.) Change-Id: I3bcf406e0ca06a710f5d43bd75c0e96ff68dbde4 diff --git a/qadevOOo/runner/util/ValueChanger.java b/qadevOOo/runner/util/ValueChanger.java index fc747ad..14e10f9 100644 --- a/qadevOOo/runner/util/ValueChanger.java +++ b/qadevOOo/runner/util/ValueChanger.java @@ -330,7 +330,8 @@ public class ValueChanger { if (oldValue.equals(FS5)) newValue = FS1; } else if (oldValue instanceof com.sun.star.awt.Gradient) { - com.sun.star.awt.Gradient _newValue = (com.sun.star.awt.Gradient) oldValue; + com.sun.star.awt.Gradient _newValue = copyStruct( + (com.sun.star.awt.Gradient) oldValue); _newValue.Angle += 10; _newValue.Border += 1; _newValue.EndColor += 1000; @@ -343,7 +344,8 @@ public class ValueChanger { _newValue.YOffset += 10; newValue = _newValue; } else if (oldValue instanceof com.sun.star.text.GraphicCrop) { - com.sun.star.text.GraphicCrop _newValue = (com.sun.star.text.GraphicCrop) oldValue; + com.sun.star.text.GraphicCrop _newValue = copyStruct( + (com.sun.star.text.GraphicCrop) oldValue); _newValue.Bottom += 10; _newValue.Left += 10; _newValue.Right += 10; @@ -445,7 +447,8 @@ public class ValueChanger { if (oldValue.equals(LJ5)) newValue = LJ1; } else if (oldValue instanceof com.sun.star.drawing.LineDash) { - com.sun.star.drawing.LineDash _newValue = (com.sun.star.drawing.LineDash) oldValue; + com.sun.star.drawing.LineDash _newValue = copyStruct( + (com.sun.star.drawing.LineDash) oldValue); _newValue.Dashes += 1; _newValue.DashLen += 10; _newValue.Distance += 20; @@ -454,7 +457,8 @@ public class ValueChanger { _newValue.Style = com.sun.star.drawing.DashStyle.RECT; newValue = _newValue; } else if (oldValue instanceof com.sun.star.drawing.Hatch) { - com.sun.star.drawing.Hatch _newValue = (com.sun.star.drawing.Hatch) oldValue; + com.sun.star.drawing.Hatch _newValue = copyStruct( + (com.sun.star.drawing.Hatch) oldValue); _newValue.Angle += 10; _newValue.Color += 1000; _newValue.Distance += 10; @@ -549,7 +553,8 @@ public class ValueChanger { if (oldValue.equals(RS2)) newValue = RS1; } else if (oldValue instanceof com.sun.star.awt.FontDescriptor) { - com.sun.star.awt.FontDescriptor _newValue = (com.sun.star.awt.FontDescriptor) oldValue; + com.sun.star.awt.FontDescriptor _newValue = copyStruct( + (com.sun.star.awt.FontDescriptor) oldValue); _newValue.CharacterWidth += 5; _newValue.CharSet = com.sun.star.awt.CharSet.ANSI; _newValue.Family = com.sun.star.awt.FontFamily.DECORATIVE; @@ -601,7 +606,8 @@ public class ValueChanger { _newValue.FileURL = util.utils.getFullTestURL("SwXTextSection.sdw"); newValue = _newValue; } else if (oldValue instanceof com.sun.star.table.BorderLine) { - com.sun.star.table.BorderLine _newValue = (com.sun.star.table.BorderLine) oldValue; + com.sun.star.table.BorderLine _newValue = copyStruct( + (com.sun.star.table.BorderLine) oldValue); _newValue.Color += 2; _newValue.InnerLineWidth += 2; _newValue.LineDistance += 2; @@ -703,7 +709,8 @@ public class ValueChanger { if (oldValue.equals(GF13)) newValue = GF1; } else if (oldValue instanceof com.sun.star.table.CellAddress) { - com.sun.star.table.CellAddress _newValue = (com.sun.star.table.CellAddress) oldValue; + com.sun.star.table.CellAddress _newValue = copyStruct( + (com.sun.star.table.CellAddress) oldValue); _newValue.Column += 1; _newValue.Row += 1; newValue = _newValue; @@ -829,7 +836,13 @@ public class ValueChanger { newValue = oldValue; } else if (oldValue instanceof com.sun.star.style.TabStop[]) { - com.sun.star.style.TabStop[] _newValue = (com.sun.star.style.TabStop[]) oldValue; + com.sun.star.style.TabStop[] old = (com.sun.star.style.TabStop[]) + oldValue; + com.sun.star.style.TabStop[] _newValue + = new com.sun.star.style.TabStop[old.length]; + for (int i = 0; i != old.length; ++i) { + _newValue[i] = copyStruct(old[i]); + } if (_newValue.length == 0) { _newValue = new com.sun.star.style.TabStop[1]; } @@ -1048,4 +1061,27 @@ public class ValueChanger { return result; } + + private static <T> T copyStruct(T value) { + Class<T> clazz = (Class<T>) value.getClass(); + T newValue; + try { + newValue = clazz.newInstance(); + } catch (IllegalAccessException e) { + throw new RuntimeException("unexpected " + e, e); + } catch (InstantiationException e) { + throw new RuntimeException("unexpected " + e, e); + } + Field[] fields = clazz.getFields(); + for (int i = 0; i != fields.length; ++i) { + if ((fields[i].getModifiers() & Modifier.STATIC) == 0) { + try { + fields[i].set(newValue, fields[i].get(value)); + } catch (IllegalAccessException e) { + throw new RuntimeException("unexpected " + e, e); + } + } + } + return newValue; + } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits