Example #1
0
 public void TestMaxUserflowCount()
 {
     for (int i = 0; i < 2 * UserflowReporter.MAX_USERFLOW_COUNT; i++)
     {
         Crittercism.BeginUserflow(i.ToString());
     }
     Object[] loggedUserflows = UserflowReporter.AllUserflows();
     Assert.AreEqual(UserflowReporter.UserflowCount(), UserflowReporter.MAX_USERFLOW_COUNT,
                     String.Format("Expecting userflowCount : {0} to be the maximum count : {1} .",
                                   UserflowReporter.UserflowCount(),
                                   UserflowReporter.MAX_USERFLOW_COUNT));
     Assert.AreEqual(UserflowReporter.UserflowCount(), loggedUserflows.Length,
                     String.Format("Expecting userflowCount : {0} to be the # of userflows : {1} .",
                                   UserflowReporter.UserflowCount(),
                                   loggedUserflows.Length));
     foreach (Userflow userflow in loggedUserflows)
     {
         int index = Int32.Parse(userflow.Name());
         Assert.IsTrue(((index >= 0) && (index < UserflowReporter.MAX_USERFLOW_COUNT)),
                       String.Format("Expecting userflow name to be an expected value between 0 and"
                                     + "MAX_USERFLOW_COUNT ({0}), name was {1}",
                                     UserflowReporter.MAX_USERFLOW_COUNT,
                                     index));
     }
 }
 internal Userflow(string name, int value) : this()
 {
     this.name = StringUtils.TruncateString(name, MAX_NAME_LENGTH);
     // timeout in milliseconds (Applying "userflow specific configuration"
     // can only be done after we know "name" of this userflow.)
     timeout = ClampTimeout(Int32.MaxValue);
     if (value == NULL_VALUE)
     {
         value = DefaultValue();
     }
     this.value = value;
     UserflowReporter.Save(this);
 }
Example #3
0
        public void TestSaveLoad()
        {
            // Load saved userflow.  Does it look the same?
            // Extract fields from userflow before saving.
            Userflow      example1       = ExampleUserflow();
            string        firstName      = example1.Name();
            UserflowState firstState     = example1.State();
            long          firstTimeout   = example1.Timeout();
            int           firstValue     = example1.Value();
            long          firstEyeTime   = example1.EyeTime();
            string        firstBeginTime = example1.BeginTimeString();
            string        firstEndTime   = example1.EndTimeString();

            // Save followed by load.
            UserflowReporter.Background();
            UserflowReporter.Foreground();
            example1 = Userflow.UserflowForName(firstName);
            Assert.IsNotNull(example1,
                             "Expecting to find example1 again");
            // Extract fields from loaded userflow.
            string        secondName      = example1.Name();
            UserflowState secondState     = example1.State();
            long          secondTimeout   = example1.Timeout();
            int           secondValue     = example1.Value();
            long          secondEyeTime   = example1.EyeTime();
            string        secondBeginTime = example1.BeginTimeString();
            string        secondEndTime   = example1.EndTimeString();

            // Everything is supposed to match now (within limits of persisting doubles).
            Assert.IsTrue(firstState == secondState,
                          "Expecting firstState==secondState");
            Assert.IsTrue(firstName == secondName,
                          "Expecting firstName==secondName");
            Assert.IsTrue(firstTimeout == secondTimeout,
                          "Expecting firstTimeout==secondTimeout");
            Assert.IsTrue(firstValue == secondValue,
                          "Expecting firstValue==secondValue");
            Assert.IsTrue(firstEyeTime == secondEyeTime,
                          "Expecting firstEyeTime==secondEyeTime");
            Assert.IsTrue(firstBeginTime == secondBeginTime,
                          "Expecting firstBeginTime==secondBeginTime");
            Assert.IsTrue(firstEndTime == secondEndTime,
                          "Expecting firstEndTime==secondEndTime");
            //UserflowReporter.Background();
            Trace.WriteLine("testSaveLoad EXITING");
            Trace.WriteLine("");
        }
 internal Userflow(string name, long beginTime, long endTime) : this(name, 0)
 {
     ////////////////////////////////////////////////////////////////
     // Input:
     //    name = userflow name
     //    beginTime = userflow begin time in ticks
     //    endTime = userflow end time in ticks
     // NOTE: Automatic userflows ("App Load", "App Foreground", "App Background")
     ////////////////////////////////////////////////////////////////
     state = UserflowState.ENDED;
     SetBeginTime(beginTime);
     SetEndTime(endTime);
     eyeTime = endTime - beginTime;
     SetForegroundTime(beginTime);
     // This "Save" needs to occur after the "state" assigned above is known.
     Debug.WriteLine("Reporting '" + name + "' == " + (eyeTime / (double)TimeUtils.TICKS_PER_SEC) + " seconds");
     UserflowReporter.Save(this);
 }
        private void SetState(UserflowState newState, long nowTime)
        {
            // Establishes newState for userflow at nowTime .
            state          = newState;
            isForegrounded = UserflowReporter.isForegrounded;
            switch (state)
            {
            case UserflowState.CANCELLED:
                SetEndTime(nowTime);
                RemoveTimer();
                break;

            case UserflowState.BEGUN:
                SetBeginTime(nowTime);
                if (isForegrounded)
                {
                    SetForegroundTime(nowTime);
                    CreateTimer();
                }
                break;

            default:
                // Final state
                SetEndTime(nowTime);
                RemoveTimer();
                if (isForegrounded)
                {
                    // Entering final state is effectively closing early ahead of
                    // the time when app may be backgrounded later.  The persisted
                    // record gets the correct additional "eye time".
                    eyeTime       += nowTime - foregroundTime;
                    isForegrounded = false;
                }
                if (newState == UserflowState.TIMEOUT)
                {
                    Crittercism.OnUserflowTimeOut(new CRUserflowEventArgs(name));
                }
                break;
            }
            UserflowReporter.Save(this);
        }
 internal static Userflow UserflowForName(string name)
 {
     return(UserflowReporter.UserflowForName(name));
 }
 internal static Userflow[] AllUserflows()
 {
     return(UserflowReporter.AllUserflows());
 }
        private int DefaultValue()
        {
            int answer = UserflowReporter.DefaultValue(name);

            return(answer);
        }
        private int ClampTimeout(int newTimeout)
        {
            int answer = UserflowReporter.ClampTimeout(name, newTimeout);

            return(answer);
        }
Example #10
0
 public void TestCleanup()
 {
     // Use TestCleanup to run code after each test has run
     UserflowReporter.Shutdown();
 }
Example #11
0
 public void TestInitialize()
 {
     // Use TestInitialize to run code before running each test
     UserflowReporter.Init();
 }