45 <execution defaultAgent="DEFAULT_{{ test_plan['harness'] }}"> |
45 <execution defaultAgent="DEFAULT_{{ test_plan['harness'] }}"> |
46 <metadata> |
46 <metadata> |
47 <meta name="component_path">{{ setd['component_path'] }}</meta> |
47 <meta name="component_path">{{ setd['component_path'] }}</meta> |
48 </metadata> |
48 </metadata> |
49 <initialization> |
49 <initialization> |
50 {% include 'prestep_custom.xml' ignore missing %} |
50 {{ atsself.get_template(setd['custom_dir'], 'prestep_custom.xml') }} |
51 |
51 |
52 {% if setd.image_files -%} |
52 {% if setd.image_files -%} |
53 <task> |
53 <task> |
54 <type>FlashTask</type> |
54 <type>FlashTask</type> |
55 <parameters> |
55 <parameters> |
56 {% set i = 1 %} |
56 {% set i = 1 %} |
57 {% for img in atsself.get_sorted_images(setd) -%} |
57 {% for img in atsself.get_sorted_images(setd) -%} |
58 {% if img.startswith('\\\\') -%} |
58 {% if img.startswith('\\\\') -%} |
59 <parameter name="image-{{ i }}" value="{{ img }}" /> |
59 <parameter name="image-{{ i }}" value="{{ img }}" /> |
60 {% else %} |
60 {% else -%} |
61 <parameter name="image-{{ i }}" value="ATS3Drop\images\{{ os.path.basename(img) }}" /> |
61 <parameter name="image-{{ i }}" value="ATS3Drop\images\{{ os.path.basename(img) }}" /> |
62 {% endif %} |
62 {%- endif %} |
63 {% set i = i + 1 %} |
63 {% set i = i + 1 %} |
64 {% endfor -%} |
64 {%- endfor %} |
65 </parameters> |
65 </parameters> |
66 </task> |
66 </task> |
67 {% endif %} |
67 {%- endif %} |
|
68 {% set udaerase = atsself.get_udaerase_image(setd) %} |
|
69 {% if udaerase -%} |
|
70 <task> |
|
71 <type>FlashTask</type> |
|
72 <parameters> |
|
73 <parameter name="image-{{ i }}" value="ATS3Drop\images\{{ os.path.basename(udaerase) }}" /> |
|
74 <parameter name="force" value="true"/> |
|
75 </parameters> |
|
76 </task> |
|
77 {%- endif %} |
68 |
78 |
69 {% if setd["ctc_enabled"] == "True" -%} |
79 {% if setd["ctc_enabled"] == "True" -%} |
70 {{ macros.ctc_initialization() }} |
80 {{ macros.ctc_initialization() }} |
71 {% endif %} |
81 {%- endif %} |
72 |
82 |
73 <task> |
83 <task> |
74 <type>CreateDirTask</type> |
84 <type>CreateDirTask</type> |
75 <parameters> |
85 <parameters> |
76 <parameter value="{{ atsself.getlogdir(setd) }}" name="dir"/> |
86 <parameter value="{{ atsself.getlogdir(test_plan, setd) }}" name="dir"/> |
77 </parameters> |
87 </parameters> |
78 </task> |
88 </task> |
79 |
89 |
80 {% if setd.has_key("sis_files") and setd["sis_files"] -%} |
90 {% if setd.has_key("sis_files") and setd["sis_files"] -%} |
81 {% for sis_file in setd["sis_files"] -%} |
91 {% for sis_file in setd["sis_files"] -%} |
82 <task> |
92 <task> |
83 <type>FileUploadTask</type> |
93 <type>FileUploadTask</type> |
84 <parameters> |
94 <parameters> |
85 <parameter name="src" value="ATS3Drop\{{ setd.name }}\sis\{{ os.path.basename(sis_file) }}"/> |
95 <parameter name="src" value="ATS3Drop\{{ setd.name }}\sis\{{ os.path.basename(sis_file) }}"/> |
86 <parameter name="dst" value="c:\testframework\{{ os.path.basename(sis_file) }}"/> |
96 <parameter name="dst" value="c:\testframework\{{ os.path.basename(sis_file) }}"/> |
87 </parameters> |
97 <parameter name="reboot-retry-count" value="1"/> |
88 </task> |
98 <parameter name="retry-count" value="1"/> |
89 {% endfor -%} |
99 </parameters> |
90 {% else %} |
100 </task> |
|
101 {%- endfor %} |
|
102 {% else -%} |
91 {% if setd['src_dst'] != [] -%} |
103 {% if setd['src_dst'] != [] -%} |
92 {% for file in setd['src_dst'] -%} |
104 {% for file in setd['src_dst'] -%} |
93 <task> |
105 <task> |
94 <type>FileUploadTask</type> |
106 <type>FileUploadTask</type> |
95 <parameters> |
107 <parameters> |
96 <parameter value="ATS3Drop\{{ setd.name }}\{{ file[1].replace(":", "") }}" name="src"/> |
108 <parameter value="ATS3Drop\{{ setd.name }}\{{ file[1].replace(":", "") }}" name="src"/> |
97 <parameter value="{{ file[1] }}" name="dst"/> |
109 <parameter value="{{ file[1] }}" name="dst"/> |
98 </parameters> |
110 <parameter name="reboot-retry-count" value="1"/> |
99 </task> |
111 <parameter name="retry-count" value="1"/> |
100 {% endfor -%} |
112 </parameters> |
101 {% else %} |
113 </task> |
|
114 {%- endfor %} |
|
115 {% else -%} |
102 {% for data_file in setd["data_files"] -%} |
116 {% for data_file in setd["data_files"] -%} |
103 <task> |
117 <task> |
104 <type>FileUploadTask</type> |
118 <type>FileUploadTask</type> |
105 <parameters> |
119 <parameters> |
106 <parameter name="src" value="ATS3Drop\{{ setd.name }}\data\{{ os.path.basename(data_file) }}"/> |
120 <parameter name="src" value="ATS3Drop\{{ setd.name }}\data\{{ os.path.basename(data_file) }}"/> |
107 <parameter name="dst" value="e:\testing\data\{{ os.path.basename(data_file) }}"/> |
121 <parameter name="dst" value="e:\testing\data\{{ os.path.basename(data_file) }}"/> |
108 </parameters> |
122 <parameter name="reboot-retry-count" value="1"/> |
109 </task> |
123 <parameter name="retry-count" value="1"/> |
110 {% endfor -%} |
124 </parameters> |
|
125 </task> |
|
126 {%- endfor %} |
111 {% for data_file in setd["config_files"] -%} |
127 {% for data_file in setd["config_files"] -%} |
112 <task> |
128 <task> |
113 <type>FileUploadTask</type> |
129 <type>FileUploadTask</type> |
114 <parameters> |
130 <parameters> |
115 <parameter name="src" value="ATS3Drop\{{ setd.name }}\conf\{{ os.path.basename(data_file) }}"/> |
131 <parameter name="src" value="ATS3Drop\{{ setd.name }}\conf\{{ os.path.basename(data_file) }}"/> |
116 <parameter name="dst" value="e:\testing\conf\{{ os.path.basename(data_file) }}"/> |
132 <parameter name="dst" value="e:\testing\conf\{{ os.path.basename(data_file) }}"/> |
117 </parameters> |
133 <parameter name="reboot-retry-count" value="1"/> |
118 </task> |
134 <parameter name="retry-count" value="1"/> |
119 {% endfor -%} |
135 </parameters> |
|
136 </task> |
|
137 {%- endfor %} |
120 {% for data_file in setd["testmodule_files"] -%} |
138 {% for data_file in setd["testmodule_files"] -%} |
121 <task> |
139 <task> |
122 <type>FileUploadTask</type> |
140 <type>FileUploadTask</type> |
123 <parameters> |
141 <parameters> |
124 <parameter name="src" value="ATS3Drop\{{ setd.name }}\testmodules\{{ os.path.basename(data_file) }}"/> |
142 <parameter name="src" value="ATS3Drop\{{ setd.name }}\testmodules\{{ os.path.basename(data_file) }}"/> |
125 <parameter name="dst" value="c:\sys\bin\{{ os.path.basename(data_file) }}"/> |
143 <parameter name="dst" value="c:\sys\bin\{{ os.path.basename(data_file) }}"/> |
126 </parameters> |
144 <parameter name="reboot-retry-count" value="1"/> |
127 </task> |
145 <parameter name="retry-count" value="1"/> |
128 {% endfor -%} |
146 </parameters> |
129 {% endif %} |
147 </task> |
130 {% endif %} |
148 {%- endfor %} |
|
149 {%- endif %} |
|
150 {%- endif %} |
131 |
151 |
132 {% if setd.engine_ini_file -%} |
152 {% if setd.engine_ini_file -%} |
133 {% if (setd.has_key("sis_files") and setd["sis_files"]) or setd["src_dst"] == [] -%} |
153 {% if (setd.has_key("sis_files") and setd["sis_files"]) or setd["src_dst"] == [] -%} |
134 <task> |
154 <task> |
135 <type>FileUploadTask</type> |
155 <type>FileUploadTask</type> |
136 <parameters> |
156 <parameters> |
137 <parameter name="src" value="ATS3Drop\{{ setd.name }}\init\{{ os.path.basename(setd["engine_ini_file"]) }}"/> |
157 <parameter name="src" value="ATS3Drop\{{ setd.name }}\init\{{ os.path.basename(setd["engine_ini_file"]) }}"/> |
138 <parameter name="dst" value="c:\testframework\{{ os.path.basename(setd["engine_ini_file"]) }}"/> |
158 <parameter name="dst" value="c:\testframework\{{ os.path.basename(setd["engine_ini_file"]) }}"/> |
139 </parameters> |
159 <parameter name="reboot-retry-count" value="1"/> |
140 </task> |
160 <parameter name="retry-count" value="1"/> |
141 {% endif %} |
161 </parameters> |
142 {% endif %} |
162 </task> |
|
163 {%- endif %} |
|
164 {%- endif %} |
143 |
165 |
144 {% for sis_file in setd["sis_files"] -%} |
166 {% for sis_file in setd["sis_files"] -%} |
145 <task> |
167 <task> |
146 <type>InstallSisTask</type> |
168 <type>InstallSisTask</type> |
147 <parameters> |
169 <parameters> |
150 <parameter name="ignore-ocsp-warnings" value="true"/> |
172 <parameter name="ignore-ocsp-warnings" value="true"/> |
151 <parameter name="ocsp-done" value="true"/> |
173 <parameter name="ocsp-done" value="true"/> |
152 <parameter name="software-package" value="c:\testframework\{{ os.path.basename(sis_file) }}"/> |
174 <parameter name="software-package" value="c:\testframework\{{ os.path.basename(sis_file) }}"/> |
153 </parameters> |
175 </parameters> |
154 </task> |
176 </task> |
155 {% endfor -%} |
177 {%- endfor %} |
156 </initialization> |
178 </initialization> |
157 |
179 {{ atsself.get_template(setd['custom_dir'], 'prerun_custom.xml') }} |
158 {% include 'prerun_custom.xml' ignore missing %} |
|
159 |
|
160 {% if setd['src_dst'] -%} |
180 {% if setd['src_dst'] -%} |
161 {{ macros.generate_runsteps_stif(setd) }} |
181 {{ macros.generate_runsteps_stif(setd) }} |
162 |
|
163 {% for file in setd['src_dst'] -%} |
182 {% for file in setd['src_dst'] -%} |
164 {% if setd["test_harness"] == "GENERIC" -%} |
183 {% if setd["test_harness"] == "GENERIC" -%} |
165 {% if 'testscript' in file[2] -%} |
184 {% if 'testscript' in file[2] -%} |
166 {% if 'testscript:mtf' in file[2] -%} |
185 {% if 'testscript:mtf' in file[2] -%} |
167 <task> |
186 <task> |
168 <type>MTFTask</type> |
187 <type>MTFTask</type> |
169 <parameters> |
188 <parameters> |
170 <parameter name="file" value="testframework.exe"/> |
189 <parameter name="file" value="{{ file[2].split(':')[2] }}"/> |
171 <parameter name="parameters" value="{{ file[1] }}"/> |
190 <parameter name="parameters" value="{{ file[1] }}"/> |
172 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/> |
191 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/> |
173 <parameter name="result-file" value="{{ atsself.MTF_LOG_DIR }}\{{ os.path.basename(file[1]).replace('.script', '.htm') }}"/> |
192 <parameter name="result-file" value="{{ atsself.MTF_LOG_DIR }}\{{ atspath.basename(file[1]).replace('.script', '.htm') }}"/> |
174 </parameters> |
193 <parameter name="result-download-retry-count" value="1" /> |
175 </task> |
194 <parameter name="result-download-reboot-retry-count" value="1" /> |
176 {% else %} |
195 </parameters> |
|
196 </task> |
|
197 {% else -%} |
177 <task> |
198 <task> |
178 <type>TEFTask</type> |
199 <type>TEFTask</type> |
179 <parameters> |
200 <parameters> |
180 <parameter name="file" value="testexecute.exe"/> |
201 <parameter name="file" value="{{ file[2].split(':')[1] }}"/> |
181 <parameter name="parameters" value="{{ file[1] }}"/> |
202 <parameter name="parameters" value="{{ file[1] }}"/> |
182 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/> |
203 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/> |
183 <parameter name="result-file" value="{{ atsself.TEF_LOG_DIR }}\{{ os.path.basename(file[1]).replace('.script', '.htm') }}"/> |
204 <parameter name="result-file" value="{{ atsself.TEF_LOG_DIR }}\{{ atspath.basename(file[1]).replace('.script', '.htm') }}"/> |
184 </parameters> |
205 <parameter name="result-download-retry-count" value="1" /> |
185 </task> |
206 <parameter name="result-download-reboot-retry-count" value="1" /> |
186 {% endif %} |
207 </parameters> |
187 {% endif %} |
208 </task> |
188 |
209 {%- endif %} |
|
210 {%- endif %} |
189 {% if file[2] == 'testmodule:rtest' -%} |
211 {% if file[2] == 'testmodule:rtest' -%} |
190 <task> |
212 <task> |
191 <type>ExecutableTestCaseTask</type> |
213 <type>ExecutableTestCaseTask</type> |
192 <parameters> |
214 <parameters> |
193 <parameter name="file" value="{{ os.path.basename(file[1]) }}"/> |
215 <parameter name="file" value="{{ os.path.basename(file[1]) }}"/> |
194 <parameter name="parser" value="RTestResultParser" /> |
216 <parameter name="parser" value="RTestResultParser" /> |
195 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/> |
217 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/> |
196 <parameter name="parameters" value="" /> |
218 <parameter name="parameters" value="" /> |
197 <parameter name="result-file" value="{{ atsself.TEF_LOG_DIR }}\{{ os.path.basename(file[1]).replace('.exe', '.htm') }}"/> |
219 <parameter name="result-file" value="{{ atsself.TEF_LOG_DIR }}\{{ atspath.basename(file[1]).replace('.exe', '.htm') }}"/> |
198 </parameters> |
220 <parameter name="result-download-retry-count" value="1" /> |
199 </task> |
221 <parameter name="result-download-reboot-retry-count" value="1" /> |
200 {% endif %} |
222 </parameters> |
201 {% endif %} |
223 </task> |
|
224 {%- endif %} |
|
225 {% if file[2] == "testmodule:sut" -%} |
|
226 <task> |
|
227 <type>SymbianUnitTestTask</type> |
|
228 <parameters> |
|
229 <parameter value="z:\sys\bin\symbianunittest.exe" name="file"/> |
|
230 <parameter value="-tests={{ file[1] }} -noprompt" name="parameters"/> |
|
231 <parameter value="{{ atsself.SUT_LOG_DIR }}\SymbianUnitTestResults.html" name="result-file"/> |
|
232 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/> |
|
233 <parameter name="result-download-retry-count" value="1" /> |
|
234 <parameter name="result-download-reboot-retry-count" value="1" /> |
|
235 </parameters> |
|
236 </task> |
|
237 {%- endif %} |
|
238 {%- endif %} |
202 {% if setd["test_harness"] == "EUNIT" -%} |
239 {% if setd["test_harness"] == "EUNIT" -%} |
203 {% if file[2] == "testmodule" -%} |
240 {% if file[2] == "testmodule" -%} |
204 <task> |
241 <task> |
205 <type>EUnitTask</type> |
242 <type>EUnitTask</type> |
206 <parameters> |
243 <parameters> |
207 <parameter value="z:\sys\bin\EUNITEXERUNNER.EXE" name="file"/> |
244 <parameter value="z:\sys\bin\EUNITEXERUNNER.EXE" name="file"/> |
208 <parameter name="result-file" value="{{ atsself.EUNIT_LOG_DIR }}\{{ atspath.basename(file[1]).replace('.' + file[1].rsplit(".")[1], '_log.xml') }}"/> |
245 <parameter name="result-file" value="{{ atsself.EUNIT_LOG_DIR }}\{{ atspath.basename(file[1]).replace('.' + file[1].rsplit(".")[1], '_log.xml') }}"/> |
209 <parameter name="parameters" value="{{ test_plan["eunitexerunner_flags"] }} /F {{ atspath.basename(file[1]).replace('.dll', '').replace('.exe', '') }} /l xml {{ atspath.basename(file[1]) }}"/> |
246 <parameter name="parameters" value="{{ test_plan["eunitexerunner_flags"] }} /F {{ atspath.basename(file[1]).replace('.dll', '').replace('.exe', '') }} /l xml {{ atspath.basename(file[1]) }}"/> |
210 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/> |
247 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/> |
211 </parameters> |
248 <parameter name="result-download-retry-count" value="1" /> |
212 </task> |
249 <parameter name="result-download-reboot-retry-count" value="1" /> |
213 {% endif %} |
250 </parameters> |
|
251 </task> |
|
252 {%- endif %} |
214 {% if file[2] == "testmodule:qt" -%} |
253 {% if file[2] == "testmodule:qt" -%} |
215 <task> |
254 <task> |
216 <type>QTestTask</type> |
255 <type>QTestTask</type> |
217 <parameters> |
256 <parameters> |
218 <parameter name="file" value="{{ file[1] }}"/> |
257 <parameter name="file" value="{{ file[1] }}"/> |
219 <parameter name="parameters" value="-lightxml -o {{ atsself.QT_LOG_DIR }}\{{ os.path.basename(file[1]).replace('.' + file[1].rsplit(".")[1], '_log.xml') }}"/> |
258 <parameter name="parameters" value="-lightxml -o {{ atsself.QT_LOG_DIR }}\{{ atspath.basename(file[1]).replace('.' + file[1].rsplit(".")[1], '_log.xml') }}"/> |
220 <parameter name="result-file" value="{{ atsself.QT_LOG_DIR }}\{{ os.path.basename(file[1]).replace('.' + file[1].rsplit(".")[1], '_log.xml') }}"/> |
259 <parameter name="result-file" value="{{ atsself.QT_LOG_DIR }}\{{ atspath.basename(file[1]).replace('.' + file[1].rsplit(".")[1], '_log.xml') }}"/> |
221 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/> |
260 <parameter name="timeout" value="{{ test_plan["test_timeout"] }}"/> |
222 </parameters> |
261 <parameter name="result-download-retry-count" value="1" /> |
223 </task> |
262 <parameter name="result-download-reboot-retry-count" value="1" /> |
224 {% endif %} |
263 </parameters> |
225 {% endif %} |
264 </task> |
226 {% endfor -%} |
265 {%- endif %} |
227 {% else %} |
266 {%- endif %} |
|
267 {%- endfor %} |
|
268 {% else -%} |
228 {{ macros.generate_runsteps_stif_single_set(setd) }} |
269 {{ macros.generate_runsteps_stif_single_set(setd) }} |
229 {% endif %} |
270 {%- endif %} |
230 |
271 {{ atsself.get_template(setd['custom_dir'], 'postrun_custom.xml') }} |
231 {% include 'postrun_custom.xml' ignore missing %} |
|
232 |
272 |
233 <finalization> |
273 <finalization> |
234 {% if setd["ctc_enabled"] == "True" -%} |
274 {% if setd["ctc_enabled"] == "True" -%} |
235 {{ macros.ctc_finalization(setd) }} |
275 {{ macros.ctc_finalization(setd) }} |
236 {% endif %} |
276 {%- endif %} |
237 |
277 |
238 <task> |
278 <task> |
239 <type>FileDownloadTask</type> |
279 <type>FileDownloadTask</type> |
240 <parameters> |
280 <parameters> |
241 <parameter value="{{ atsself.getlogdir(setd) }}\*" name="src"/> |
281 <parameter value="{{ atsself.getlogdir(test_plan, setd) }}\*" name="src"/> |
242 <parameter name="recursive" value="true"/> |
282 <parameter name="recursive" value="true"/> |
243 </parameters> |
283 <parameter name="reboot-retry-count" value="1"/> |
244 </task> |
284 <parameter name="retry-count" value="1"/> |
245 {% include 'poststep_custom.xml' ignore missing %} |
285 </parameters> |
|
286 </task> |
|
287 {{ atsself.get_template(setd['custom_dir'], 'poststep_custom.xml') }} |
246 </finalization> |
288 </finalization> |
247 |
289 |
248 </execution> |
290 </execution> |
249 {% endfor -%} |
291 {%- endfor %} |
250 |
292 |
251 {% include 'postset_custom.xml' ignore missing %} |
293 {% include 'postset_custom.xml' ignore missing %} |
252 |
294 |
253 <postActions> |
295 <postActions> |
254 {% include 'prepostaction.xml' ignore missing %} |
296 {% include 'prepostaction.xml' ignore missing %} |
255 {% for action_type, parameters in test_plan.post_actions -%} |
297 {% for action_type, parameters in test_plan.post_actions -%} |
256 {% if action_type == 'RunProcessAction' %} |
298 {% if action_type == 'RunProcessAction' -%} |
257 <action> |
299 <action> |
258 <type>{{ action_type }}</type> |
300 <type>{{ action_type }}</type> |
259 <parameters> |
301 <parameters> |
260 {% for name, value in parameters -%} |
302 {% for name, value in parameters -%} |
261 <parameter name="{{ name }}" value="{{ value }}"/> |
303 <parameter name="{{ name }}" value="{{ value }}"/> |
262 {% endfor -%} |
304 {%- endfor %} |
263 </parameters> |
305 </parameters> |
264 </action> |
306 </action> |
265 {% endif %} |
307 {%- endif %} |
266 {% endfor -%} |
308 {%- endfor %} |
267 {% if test_plan['report_email'] -%} |
309 {% if test_plan['report_email'] -%} |
268 <action> |
310 <action> |
269 <type>EmailAction</type> |
311 <type>EmailAction</type> |
270 <parameters> |
312 <parameters> |
271 <parameter value="Release testing" name="subject"/> |
313 <parameter value="ATS test results {{ test_plan['testrun_name'] }}" name="subject"/> |
272 <parameter value="{{ test_plan['report_email'] }}" name="to"/> |
314 <parameter value="{{ test_plan['report_email'] }}" name="to"/> |
273 <parameter value="simplelogger" name="format"/> |
315 <parameter value="simplelogger" name="format"/> |
|
316 {% if test_plan['report_type'].lower() == 'no_attachment' -%} |
|
317 <parameter value="false" name="attach-report"/> |
|
318 {%- endif %} |
274 </parameters> |
319 </parameters> |
275 </action> |
320 </action> |
276 {% endif %} |
321 {%- endif %} |
277 {% if test_plan['diamonds_build_url'] -%} |
322 {% if test_plan['diamonds_build_url'] -%} |
278 <action> |
323 <action> |
279 <type>DiamondsAction</type> |
324 <type>DiamondsAction</type> |
|
325 {% if test_plan.sets != [] and test_plan.sets[0]["ctc_enabled"] == "True" -%} |
|
326 <parameters> |
|
327 <parameter value="true" name="send-ctc-data" /> |
|
328 </parameters> |
|
329 {%- endif %} |
280 </action> |
330 </action> |
281 {% endif %} |
331 {%- endif %} |
|
332 |
282 {% include 'postpostaction.xml' ignore missing %} |
333 {% include 'postpostaction.xml' ignore missing %} |
283 </postActions> |
334 </postActions> |
284 |
335 |
285 </testrun> |
336 </testrun> |