Inércia Sensorial

25 de January de 2017

Custom Protractor Flake shard parser

Filed under: Javascript — inerte @ 23:29

PR #45 on Protractor Flake added the ability to specify custom parsers. On my project we’re sharding (running multiple instances of) Protractor and using the following parser to re-run only the failing spec files.

You’ll want to replace the /test/functional/specs/ and the browser name (chrome) below with your actual values.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
const _ = require('lodash');
 
// If only one spec file fails, on the next re-run, we don't get the filename on the output. So
// if it fails again, we need re-use the filename from the previous run
let previousSpecFileNames = [];
 
module.exports = {
  parse: function (protractorTestOutput) {
    if (previousSpecFileNames.length === 1) {
      return previousSpecFileNames;
    }
 
    const lines = protractorTestOutput.split(`\n`);
    // At the end of the output there's a summary of which shards failed
    const failedLines = lines.filter(line =>
      line.startsWith('[launcher] chrome')
      && line.includes('failed')
      && line.includes('test(s)'));
 
    // regex matches #number and #number-number (ie #1 or #1-1, #1-2, #1-3...)
    const testNumberRegExp = new RegExp(/#[0-9](-[0-9]+)?/);
 
    const failedSpecsLines = failedLines.map(failedLine => {
      const match = testNumberRegExp.exec(failedLine);
 
      if (match) {
        // Lines with "#number-number ]" (space followed by closing bracket) and "Specs: "
        return lines.filter(line => line.includes(`${match[0]}] `) && line.includes('Specs: '));
      }
 
      return null;
    }).reduce(function (a, b) { // Flatten the array
      return a.concat(b);
    }, []);
 
    const specFileNames = _.compact(failedSpecsLines).map(line => {
      const startingPathPosition = line.indexOf('/test/functional/specs/');
      return line.substr(startingPathPosition + 1);
    });
 
    previousSpecFileNames = specFileNames;
 
    return specFileNames;
  },
 
  name: 'Your custom parser name',
};

28 de January de 2014

Remove ._ files from Mac OS X

Filed under: Perils of Software Development — inerte @ 15:43

Run this command on the terminal to remove every ._ file created by Mac OS X on the current path and its descendants:

find . -name '._*' -delete

17 de December de 2013

Hide “username” has entered the room, or left the room on Adium

Filed under: Geral — Tags: — inerte @ 15:24

I just spent 10 minutes perusing every Adium menu and options to find where I could disable the message “entered the room” and “left the room” on Adium. Turns out, it’s easy: Right click on the IRC channel name tab and the option “Show Join/Leave messages” will appear.

23 de September de 2013

Replace tabs by space on git history

Filed under: Perils of Software Development — Tags: — inerte @ 21:04

So, I prefer spaces, and when I press tab, it should instead write 4 spaces. I forgot to set this option on Sublime Text and did some commits with tabs. The following git command will rewrite the repo history and replace tabs by 4 spaces.

git filter-branch --tree-filter 'git diff-tree --name-only --diff-filter=AM -r --no-commit-id $GIT_COMMIT | find . -exec perl -pi -e "s/\t/    /g" {} \;' HEAD

07 de May de 2013

Download file using WinJS.xhr

Filed under: Javascript — Tags: , , — inerte @ 15:00

Snippet to download a file using WinJS.xhr and save it. The file variable below is a StorageFile, result of pickSaveFileAsync.

Note the usage of responseType: “blob” as an option to xhr, and how it is copied to the file stream with msDetachStream.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
WinJS.xhr({
    responseType: "blob",
    type: "GET",
    url: "http://example.com/",
}).then(function (response) {
    var fileContents = response.response;
 
    return file.openAsync(Windows.Storage.FileAccessMode.readWrite).then(function (stream) {
        return Windows.Storage.Streams.RandomAccessStream.copyAsync(fileContents.msDetachStream(), stream).then(function () {
            return stream.flushAsync().then(function () {
                stream.close();
                fileContents.msClose();
            });
        });
    });
});

I tried to use replaceWithStreamedFileFromUriAsync and writeBufferAsync, but never managed to make it work. If you do, leave a comment!

13 de April de 2013

PCH file built from a different branch ((clang-425.0.24)) than the compiler ((clang-425.0.27))

Filed under: Programação — Tags: , — inerte @ 10:44

Atualizei o XCode da versão 4.6.0 para 4.6.01 e de repente meus projetos não construíam mais, dando o erro:

PCH file built from a different branch ((clang-425.0.24)) than the compiler ((clang-425.0.27))

A solução foi simplesmente limpar o projeto. Vá ao menu “Product” e selecione “Clean”.

06 de December de 2012

Powershell script to snap an app in Windows 8

Filed under: Programação — Tags: , , — inerte @ 13:52

You can not, from inside a Windows 8 application, snap it.

That doesn’t mean there is no other way 🙂

At work, we have to test our app in a snapped state, so we need a way to programmatically make it happen. We discovered that there are two keyboard shortcuts for this action. Windows Key + . (the period key) snaps to the right edge, and Windows Key + Shift + . snaps to the left edge.

So all we have to do is send these keys to the operating system. Sending the Windows Key is tricky, and not supported using only [System.Windows.Forms.SendKeys]::SendWait.

So here’s an alternative:

Download InputSimulator.dll

Run the following commands on a Powershell prompt:

1
2
[Reflection.Assembly]::LoadFile("C:\path\to\InputSimulator.dll")
[WindowsInput.InputSimulator]::SimulateModifiedKeyStroke('LWIN', 'OEM_PERIOD')

And your app will snap to the right edge. I am still researching how to snap to the left edge, it’s a more complicated call to SimulateModifiedKeyStroke, but will keep researching.

Get current session id on Ruby Selenium WebDriver

Filed under: Programação — Tags: , , — inerte @ 10:36
1
@browser.instance_variable_get('@bridge').instance_variable_get('@session_id')

20 de November de 2012

SWOTOR Nvidia crash

Filed under: Jogos — Tags: , — inerte @ 12:29

All of sudden, the game Star Wars: The Old Republic is crashing my Nvidia drivers. I have a GeForce GTX 460. Oddly, I played the game for months without any issues, but since the last update, it crashes multiple times.

08 de November de 2012

Javascript function to find background task by name on Windows 8

Filed under: Javascript — Tags: — inerte @ 15:59
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
FindTask: function (taskName) {
    var background = Windows.ApplicationModel.Background;
    var iter = background.BackgroundTaskRegistration.allTasks.first();
    var hascur = iter.hasCurrent;
 
    while (hascur) {
        var cur = iter.current.value;
 
        if (cur.name === taskName) {
            return cur;
        }
 
        hascur = iter.moveNext();
    }
 
    return null;
}
Older Posts »

Powered by WordPress