Как выйти из эфирного приложения из библиотеки actioncript? - PullRequest
1 голос
/ 15 мая 2010

Я пытаюсь сделать следующее, но время от времени нативное приложение не определено.

var nativeApp:Object =  getDefinitionByName("flash.desktop.NativeApplication");
nativeApp.nativeApplication.exit();

Я запутался, почему иногда getDefinitionByName ("flash.desktop.NativeApplication") разрешается, а иногда - нет.

Я пытаюсь решить эту проблему, чтобы решить следующую проблему во flexcover - code.google.com/p/flexcover/issues/detail?id=33

Обновление - вотКласс, который я пытаюсь исправить: http://code.google.com/p/flexcover/source/browse/trunk/CoverageAgent/src/com/allurent/coverage/runtime/AbstractCoverageAgent.as CoverageAgent.swc - это библиотека actioncript, вызываемая модульными тестами для выхода из приложения flexcover air, используемого для определения покрытия кода модульных тестов.Приложение flexcover air завершает работу только наполовину, и это вызывает проблемы для успешного выполнения наших сборок maven.

Ответы [ 3 ]

2 голосов
/ 15 мая 2010
NativeApplication.nativeApplication.exit();
1 голос
/ 27 ноября 2010

Что касается FlexCover - причина, по которой вы видите, что он иногда работает, а не другие, заключается в том, что CoverageAgent предназначен для выхода из модульных тестов, которые он не передает обратно CoverageViewer. Я создал свой собственный FlexCoverListener, который отправляет сообщение о выходе через локальное подключение к CoverageViewer. Ниже приведен код.

package org.flexunit.listeners
{
import flash.events.EventDispatcher;

import org.flexunit.listeners.closer.FlexCoverCloser;
import org.flexunit.runner.IDescription;
import org.flexunit.runner.Result;
import org.flexunit.runner.notification.Failure;
import org.flexunit.runner.notification.IAsyncStartupRunListener;
import org.flexunit.runner.notification.ITemporalRunListener;

public class FlexCoverListener extends EventDispatcher implements IAsyncStartupRunListener,    
ITemporalRunListener
{
  import com.allurent.coverage.runtime.CoverageManager;

  public function FlexCoverListener()
  {
  }

  public function get ready():Boolean 
  {
      return true;
  }

  public function testTimed( description:IDescription, runTime:Number ):void
  {

  }


  public function testRunFinished( result:Result ):void 
  {
      CoverageManager.agent.recordCoverage("SR_TESTS_COMPLETE");
  }

  public function testFinished( description:IDescription ):void {}

  public function testRunStarted( description:IDescription ):void {}


  public function testStarted( description:IDescription ):void{}


  public  function testFailure( failure:Failure ):void{}


  public function testAssumptionFailure( failure:Failure ):void{}


  public function testIgnored( description:IDescription ):void{}
  }
  }

Вы можете добавить вышеупомянутого слушателя в свои тесты, выполнив в TestRunner следующее:

core.addListener(new FlexCoverListener());
var core : FlexUnitCore = new FlexUnitCore();

Последнее, но самое важное: я изменил метод recordCoverage в AbstractCoverageAgent, чтобы он выглядел следующим образом:

/**
     * Record the execution of a single coverage key; called by
     * the global coverage() function.
     */
    public function recordCoverage(key:String):void
    {
        if(key == "SR_TESTS_COMPLETE")
        {
            exit();    
        }
        else if (isNaN(coverageMap[key]++))
        {
            // The map must not have contained this key yet, so enter an
            // execution count of 1.  Subsequent calls will autoincrement without
            // returning NaN.
            //
            coverageMap[key] = 1;
        }
    }
0 голосов
/ 20 мая 2010

nativeAppilcation - статическое поле. Его не нужно вызывать для объекта. Таким образом, вам не нужно звонить getDefinitionByName("flash.desktop.NativeApplication").

Просто вызовите выход следующим образом:

NativeApplication.nativeApplication.exit();

Flash Builder или Flash Pro будут включать библиотеку для вас.
Если вы не используете IDE, импортируйте библиотеку:

import flash.desktop.NativeApplication;
...