]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Addition of test sketch_014
authoreso <eugeny.savchenko@opencascade.com>
Thu, 27 Aug 2015 14:21:32 +0000 (17:21 +0300)
committereso <eugeny.savchenko@opencascade.com>
Thu, 27 Aug 2015 14:21:32 +0000 (17:21 +0300)
test.squish/shared/testdata/for_sketch_014.hdf [new file with mode: 0644]
test.squish/suite_ISSUES_SALOME/objects.map
test.squish/suite_ISSUES_SALOME/tst_sketch_014/test.py [new file with mode: 0644]
test.squish/suite_ISSUES_SALOME/tst_sketch_014/verificationPoints/VP1 [new file with mode: 0644]

diff --git a/test.squish/shared/testdata/for_sketch_014.hdf b/test.squish/shared/testdata/for_sketch_014.hdf
new file mode 100644 (file)
index 0000000..353f715
Binary files /dev/null and b/test.squish/shared/testdata/for_sketch_014.hdf differ
index 45d0242fbe3b01e5d54cf864cf7f2c578cf6e45c..d3a1ab0d9cd65c3475d7ac09e3f13864f2db1fe7 100644 (file)
 :Line.Start point_QGroupBox    {container=':SALOME*.Line_XGUI_PropertyPanel' title='Start point' type='QGroupBox' unnamed='1' visible='1'}
 :Line.property_panel_cancel_QToolButton        {container=':SALOME*.Line_XGUI_PropertyPanel' name='property_panel_cancel' type='QToolButton' visible='1'}
 :Line.property_panel_ok_QToolButton    {container=':SALOME*.Line_XGUI_PropertyPanel' name='property_panel_ok' type='QToolButton' visible='1'}
+:Mirror.Mirror line_QLabel     {container=':SALOME*.Mirror_XGUI_PropertyPanel' text='Mirror line' type='QLabel' unnamed='1' visible='1'}
+:Mirror.Mirror line_QLineEdit  {container=':SALOME*.Mirror_XGUI_PropertyPanel' leftWidget=':Mirror.Mirror line_QLabel' type='QLineEdit' unnamed='1' visible='1'}
+:Mirror.Segments:_QLabel       {container=':SALOME*.Mirror_XGUI_PropertyPanel' text='Segments:' type='QLabel' unnamed='1' visible='1'}
+:Mirror.Segments:_QListWidget  {aboveWidget=':Mirror.Segments:_QLabel' container=':SALOME*.Mirror_XGUI_PropertyPanel' type='QListWidget' unnamed='1' visible='1'}
+:Mirror.property_panel_ok_QToolButton  {container=':SALOME*.Mirror_XGUI_PropertyPanel' name='property_panel_ok' type='QToolButton' visible='1'}
 :OK_QPushButton        {container=':Object browser_XGUI_DataTree' text='OK' type='QPushButton' unnamed='1' visible='1'}
 :Object browser_XGUI_DataTree  {container=':SALOME*.Object browser_QDockWidget' type='XGUI_DataTree' unnamed='1' visible='1'}
 :Open File.File name:_QLabel   {name='fileNameLabel' text='File name:' type='QLabel' visible='1' window=':Open File_SUIT_FileDlg'}
 :SALOME*.Length_XGUI_PropertyPanel     {name='property_panel_dock' type='XGUI_PropertyPanel' visible='1' window=':SALOME*_STD_TabDesktop' windowTitle='Length'}
 :SALOME*.Line_QToolButton      {text='Line' type='QToolButton' unnamed='1' visible='1' window=':SALOME*_STD_TabDesktop'}
 :SALOME*.Line_XGUI_PropertyPanel       {name='property_panel_dock' type='XGUI_PropertyPanel' visible='1' window=':SALOME*_STD_TabDesktop' windowTitle='Line'}
+:SALOME*.Mirror_XGUI_PropertyPanel     {name='property_panel_dock' type='XGUI_PropertyPanel' visible='1' window=':SALOME*_STD_TabDesktop' windowTitle='Mirror'}
 :SALOME*.New part_QToolButton  {text='New part' type='QToolButton' unnamed='1' visible='1' window=':SALOME*_STD_TabDesktop'}
 :SALOME*.NewGeom_QToolButton   {text='NewGeom' type='QToolButton' unnamed='1' visible='1' window=':SALOME*_STD_TabDesktop'}
 :SALOME*.Object browser_QDockWidget    {type='QDockWidget' unnamed='1' visible='1' window=':SALOME*_STD_TabDesktop' windowTitle='Object browser'}
diff --git a/test.squish/suite_ISSUES_SALOME/tst_sketch_014/test.py b/test.squish/suite_ISSUES_SALOME/tst_sketch_014/test.py
new file mode 100644 (file)
index 0000000..b227005
--- /dev/null
@@ -0,0 +1,56 @@
+
+def main():
+    #[project] NewGEOM
+    #[Scenario] Sketch_014
+    #[Topic] 'Mirror' functionality
+    #[Tested functionality] 
+    #[Summary description]
+    #[Expected results]
+    #[General comments]
+    
+    source(findFile("scripts", "common.py"))
+    
+    #[section] Application start
+    #[step] Launch SALOME
+    startApplication("salome_run.sh")
+
+    set_defaults()
+    
+    #[step] Open 'for_sketch_014.hdf'
+    open(DATA_PATH + "/for_sketch_014.hdf")
+    
+    #[step] Activate NewGeom
+    clickButton(waitForObject(":SALOME*.NewGeom_QToolButton"))
+    
+    #[step] Edit 'Sketch_1'
+    waitForObjectItem(":Object browser_XGUI_DataTree", "Sketch\\_1")
+    clickItem(":Object browser_XGUI_DataTree", "Sketch\\_1", 43, 12, 0, Qt.LeftButton)
+    openItemContextMenu(waitForObject(":Object browser_XGUI_DataTree"), "Sketch\\_1", 43, 12, 0)
+    activateItem(waitForObjectItem(":_QMenu", "Edit..."))
+    
+    #[step] Click '+OZ' button
+    clickButton(waitForObject(":SALOME*.+OZ_QToolButton"))
+    
+    #[step] Sketch - Mirror
+    mouseClick(waitForObjectItem(":SALOME*_QMenuBar", "Sketch"))
+    mouseClick(waitForObjectItem(":Sketch_QMenu", "Mirror"))
+    
+    #[step] Select long line as mirror line
+    mouseClick(waitForObject(":Mirror.Mirror line_QLineEdit"), 122, 5, 0, Qt.LeftButton)
+    mouseClick(waitForObject(":SALOME*.3D View Operations_OCCViewer_ViewPort3d"), 256, 193, 0, Qt.LeftButton)
+    
+    #[step] Select other objects as objects for mirror
+    mouseClick(waitForObject(":Mirror.Segments:_QListWidget"), 147, 69, 0, Qt.LeftButton)
+    mouseDrag(waitForObject(":SALOME*.3D View Operations_OCCViewer_ViewPort3d"), 45, 277, 689, 219, 1, Qt.LeftButton)
+    
+    #[step] Ok
+    clickButton(waitForObject(":Mirror.property_panel_ok_QToolButton"))
+    
+    #[step] Click Fit all button
+    fit_all()
+    
+    #[check] Check that mirroring has been executed successfully
+    test.vp("VP1")
+
+    # [step] Close application without saving
+    close_application()
diff --git a/test.squish/suite_ISSUES_SALOME/tst_sketch_014/verificationPoints/VP1 b/test.squish/suite_ISSUES_SALOME/tst_sketch_014/verificationPoints/VP1
new file mode 100644 (file)
index 0000000..dfcaedf
--- /dev/null
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><VerificationPoint type="Screenshot" version="4"><Description/><Verification object=":SALOME*.3D View Operations_OCCViewer_ViewPort3d" type="PNG">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<Mask/></Verification></VerificationPoint>
\ No newline at end of file